На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Создать список классов (селекторов) css или php (возможно с помощью file_get_contents) , Пробую вытащить классы (элементы) из css-файла, можно из php и составить список
      Продолжаю вопросы новичка. Есть три файла: index.php - файл шаблона, main.css - файл стилей, admin.php - файл для всяких настроек, которые будут применяться при загрузке индекс.пхп Причем файл индекс.пхп и мэйн.цсс могут меняться по содержанию, ну или допустим подставляться другие вместо них.
      Можно ли как-то вытащить из любого из этих двух файлов классы, ну а в последствии и id и составить из них список. Для простоты в индекс.пхп создал один класс, а в цсс задал для него стиль, в прочем и для боди тоже. Потом в админ.пхп пробовал разные варианты. Вот так сказать мои потуги:
      ExpandedWrap disabled
        <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        </head>
        <?php
        echo get_declared_classes('index.php'); /* попытка №1 */
        print_r(get_class('index.php')); /* попытка №2 */
               $block=file_get_contents('index.php'); /* попытка №3 */
         
               $block_SetDivClas1=""; /* попытка получить имя хоть какого-то класса */
               $block_SetDivClas2="";
               $block_SetDivClas3="";
               $block_SetDivClas4="";
            
        ?>
        <!--  Создаю форму для составления списка -->
        <form action="admin.php">
        <input type="submit" value="Отправить" />
            
        <select name="Blocks" >
            <option ><?php echo $block_SetDivClas1 ?></option>
            <option ><?php echo $block_SetDivClas2 ?></option>
            <option>блок3</option>
            <option>блок4</option>
        </select>
        </form>

      При этом выскакивают такие ошибки (предупреждения):
      Warning: get_declared_classes() expects exactly 0 parameters, 1 given line 7
      Warning: get_class() expects parameter 1 to be object, string given on line 8
      Нечто подобное и в случае с цсс файлом.
      Так вот, возможно ли сделать то, что я хочу, и как это все таки правильней сделать
      Сообщение отредактировано: D-G -
        Решил зайти с другой стороны. Создал небольшой файл цсс с двумя классами main.css
        Попробовал из него вытащить данные вот так:
        ExpandedWrap disabled
          $block=file_get_contents('main.css');

        При этом по идее эти данные можно было бы представить в виде массива. Пробую его "перебрать" и вывести результаты, но ничего особого не дает, массив пуст
        ExpandedWrap disabled
           echo "$block";
           foreach ($_POST as $key=>$value)
           echo "$block $key $value ";
           var_dump($_POST);

        Вот что пулучаю:
        ExpandedWrap disabled
          body { background: red; background-image: ; } .wrap { background:yellow ; margin: auto ; width: 700px ; height: 400px ; z-index: 3 ; }array(0) { }

        Может кто-то сказать, прав я или нет в том, что полученные данные можно представить в виде массива? Только видимо это двумерный массив?
          Цитата D-G @
          echo "$block";
          foreach ($_POST as $key=>$value)
          echo "$block $key $value ";
          var_dump($_POST);


          Строка 1. Выдача клиенту содержимого php переменной $block //клиент изучает структуру файла.css
          Строка 2.,3.:
          ___перебор присланных от клиента данных //разве клиент что то отправил серверу? :-?
          ___опять отображение переменной $block //зачем? :-?
          ___отображение присланных клиентом данных (имен переменных и их значений) //разве клиент что-то отправил? И какое это имеет отношение к чтению файл.css ?
          Строка 4. структурированное отображение данных, присланных клиентом... //и опять - зачем? :-?

          Добавлено
          Цитата D-G @
          прав я или нет в том, что полученные данные можно представить в виде массива?

          В принципе да, но(пропускаю часть но), вам же не нужен весь этот массив. А только некоторые его части. Соответственно могу предложить искать требуемые части либо через регулярные выражения (сложно), либо через strpos
          Сообщение отредактировано: Руслан -
            Цитата D-G @
            Только видимо это двумерный массив?

            Лично я не припомню метод, которым можно было бы одной строкой объяснить php интерпретатору "ты имеешь дело с ассоциативным массивом, пожалуйста считай этот файл таковым". Вроде должно быть, но не припоминаю (разве что регуляркой разбить). :scratch:

            Вариант решения можно уложить одну строку "регулярки" (при этом логическая сложность этой регулярки, в общем то вполне сопоставима с ниже приведенным кодом), либо перебирать вручную:

            ExpandedWrap disabled
              //вернуть значение (класс\элемент=значение)
              function GetValueFromCSS($FileCSS, $ClassName, $ElementName)//&$
              {
                  $SearchClass_PosStart=strpos($FileCSS, $ClassName);//найти некоторый класс
                      $SearchClass_PosStart=strpos($FileCSS, '{', $SearchClass_PosStart);//сдвинуть указатель на начало его данных
                  $SearchClass_PosEnd=strpos($FileCSS, '}', $SearchClass_PosStart);//найти конец данных класса (кому это надо, тот пусть и обрабатывает)
               
                  $SearchData_PosStart=strpos($FileCSS, $ElementName.':', $SearchClass_PosStart);//найти значение "переменной"(чем по смыслу не переменная?),
                  //пропустить найденый элемент, если он часть другого (что бы не найти "background-color" вместо "color".
                  while (($SearchData_PosStart<>0) and ($FileCSS{$SearchData_PosStart-1}<>' ') and ($FileCSS{$SearchData_PosStart-1}<>"\t") and ($FileCSS{$SearchData_PosStart-1}<>";"))
                      {$SearchData_PosStart=strpos($FileCSS, $ElementName.':', $SearchData_PosStart+2);}
                  //сдвинуть указатель на начало данных
                  $SearchData_PosStart+=strlen($ElementName);
                  $SearchData_PosEnd=strpos($FileCSS,';', $SearchData_PosStart);
                  return substr($FileCSS, $SearchData_PosStart, ($SearchData_PosEnd-$SearchData_PosStart));
              }
               
                  $css_file=file_get_contents('style.css');
                  echo GetValueFromCSS($css_file, 'ClassForUser', 'color');//&$


            и это ещё без обработки ошибок... :whistle:

            Ладно, на счёт "регулярок", мы в соседней теме обсуждали сохранение в .css, у вас вопрос возник, куда пропал $3, вот куда он пропал, в некотором роде обратная функция, по сути без изменений, выводится как раз пропавший №3:
            ExpandedWrap disabled
                  $css_file=file_get_contents('style.css');
                  $Target1='ClassForUser';
                  $Target2='color';
                  preg_match('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi', $css_file, $tmp1);
                  echo $tmp1[3];
              Цитата Руслан @
              Строка 2.,3.:
              ___перебор присланных от клиента данных //разве клиент что то отправил серверу?


              Я ещё попробовал форму создать, так, ради эксперимента, что на что влияет. При загрузке страницы выдает array(0) { }
              При вводе в поле "mmm" (просто набор букв) выдает Name1 mmm array(1) { ["Name1"]=> string(3) "mmm" }
              Цитата Руслан @
              _опять отображение переменной $block //зачем

              Думал, может после ввода "mmm" что-то изменится
              Цитата Руслан @
              отображение присланных клиентом данных (имен переменных и их значений) //разве клиент что-то отправил? И какое это имеет отношение к чтению файл.css ?

              Разве foreach не перебирает полученный массив? По идее массив должен получится из цсс файла.
              Цитата Руслан @
              вам же не нужен весь этот массив. А только некоторые его части

              Честно говоря с этим ещё определился. Хочу увидеть, что можно получить, потом решу.
              Цитата Руслан @
              Соответственно могу предложить искать требуемые части либо через регулярные выражения (сложно), либо через strpos

              Спс, буду, читать
              Цитата Руслан @
              Лично я не припомню метод, которым можно было бы одной строкой объяснить php интерпретатору "ты имеешь дело с ассоциативным массивом, пожалуйста считай этот файл таковым". Вроде должно быть, но не припоминаю (разве что регуляркой разбить).

              Сперва с вашим первым коментом попробую разобраться и почитать про тот же http://www.php.su/strpos
              Кстати, не знаете почему там в примере стоит '$mystring1' хотя нигде не объявялялась такая переменная? Только '$mystring'

              Добавлено
              Получилось прикольно. Добавил в свой файл следующий код:
              ExpandedWrap disabled
                <?php
                 $findme   = 'body'; /* Ищу первый класс */
                $pos = strpos($block, $findme);
                if ($pos === false) {
                    echo "Строка '$findme' не найдена в строке '$block'";
                } else {
                    echo "Строка '$findme' найдена в строке '$block'";
                    echo " в позиции $pos";
                }
                    
                $findme1   = '.wrap'; /* Ищу второй класс в новой позиции*/
                $pos1 = strpos($block, $findme1);
                if ($pos1 === false) {
                    echo "Строка '$findme1' не найдена в строке '$block'";
                } else {
                    echo "Строка '$findme1' найдена в строке '$block'";
                    echo " в позиции $pos1";
                }
                ?>
                <!--  Создаю форму для составления списка -->
                <form action="class.php">
                <input type="submit" value="Отправить" />
                <select name="Blocks" >
                    <option >блок1--><?php if ($pos === false) {echo "";} else {echo "$findme"} ?></option><!--  Передаю полученные данные -->
                    <option >блок2--><?php if ($pos1 === false) {echo "";} else {echo "$findme1"} ?></option>
                    <option>блок3</option>
                    <option>блок4</option>
                </select>
                </form>

              Про регулярные выражения читаю вот эту статью http://www.php.su/articles/?cat=regexp&page=008
              Но хоть в оглавлении написано, что это пхп, в статье почему-то PERL. Разве это одно и то же?
              Сообщение отредактировано: D-G -
                Цитата D-G @
                стати, не знаете почему там в примере стоит '$mystring1' хотя нигде не объявялялась такая переменная? Только '$mystring'

                Очепятка в примере. Респект за внимательность. :good:

                Цитата D-G @
                Я ещё попробовал форму создать, так, ради эксперимента, что на что влияет.

                Окей, в принципе вполне метод уточнить-подразобраться что и как работает. Только зачем же было сюда этот эксперимент то выкладывать? :-? Он же лишен практического смысла в контексте поставленного вами вопроса - "выборка из .css"!

                Цитата D-G @
                Разве foreach не перебирает полученный массив?

                Вы перебираете массив переданных от клиента данных ($_POST), а не файл.css :D

                Цитата D-G @
                Честно говоря с этим ещё определился. Хочу увидеть, что можно получить, потом решу.

                Не рассчитывайте, что за вас будут решать многочисленные хотелки "посмотреть так", "посмотреть эдак"... ;)
                Хотя в целом, мысль изначально рассматривать .css как именованный массив - в принципе толковая, логичная. Нюансы есть на старте(не помню я стандартной функции для такого рода разбора, разве что с "регуляркой"), а позже вылезет ещё больше нюансов. :whistle:

                Цитата D-G @
                Про регулярные выражения читаю вот эту статью http://www.php.su/articles/?cat=regexp&page=008
                Но хоть в оглавлении написано, что это пхп, в статье почему-то PERL. Разве это одно и то же?

                ПХП это не перл. Однако имеется такое понятие, как "перл-совместимые регулярны выражения", PCRE. В процессе несомненно найдутся отличия между регулярками для PHP и регулярками же Perl. :D

                Кстати, вот здесь можно потестировать свою регулярку, наглядно посмотреть этапы работы: https://regex101.com/
                  Цитата Руслан @
                  Респект за внимательность.

                  Это случайность, на самом деле я сам очень невнимательный
                  Цитата Руслан @
                  Только зачем же было сюда этот эксперимент то выкладывать?

                  Уже начинаю запутываться что держу в голове, а что где-то пишу, вот и забыл прокоментировать весь процесс эксперимента, кстати, подсмотрел в вашем примере.
                  Цитата Руслан @
                  мысль изначально рассматривать .css как именованный массив - в принципе толковая, логичная

                  Теперь мне это кажется лишним, но на будущее пригодится. Сейчас пробую научится поиску строк, знаков, символов.
                  Цитата Руслан @
                  Кстати, вот здесь можно потестировать свою регулярку, наглядно посмотреть этапы работы: https://regex101.com/

                  Спс, ))) буду и с этим разбираться, хоть пока не понял как, но идея проверять он-лайн мне нравится. Совсем недавно на кодэ-пэйне html и css мучал.
                    Цитата D-G @
                    вот и забыл прокоментировать весь процесс эксперимента

                    От формулировки вопроса зависит многое... В том числе вероятность его прочтения кем-либо. :)

                    Цитата D-G @
                    Сейчас пробую научится поиску строк, знаков, символов.

                    Весьма мудро! Всячески одобряю! :good:
                      Цитата Руслан @
                      Весьма мудро! Всячески одобряю!

                      Спс, но у меня опять проблема, я все таки туговат. Не могу найти решение. Допустим есть файл со стилями style.css В котором какое-то количество классов, допустим: body, wrap1, wrap2, wraper3, wrapper4. Найти классы оказалось довольно легко. В начало поиска поставил точку, хотя это похоже пробел. В конце поиска поставил конец слова\b точку, звездочку (две последние захватывают все пробелы) и фигурную скобку. И создал типа массив. Таким образом показывает именно классы, если первый ключ массива выбирать 0. Можно было бы убрать фигурную скобку и точку со звездочкой, но тогда в список попадают и свойства класса, соответственно путаются под ногами. Можно ли как-то показать поиску, что искать нужно до фигурной скобки не включая её, но учитывая, что она конец искомого шаблона? Да и пробелы хотелось бы убрать из вывода результата. Потому что вырезать у меня не вышло. Просто бывают ситуации, когда фигурная скобка стоит без пробела или через несколько пробелов после имени класса. Вот что у меня получилось:
                      ExpandedWrap disabled
                         $block=file_get_contents('style.css');
                        preg_match_all('/(\.)(.*)(\b.*{)/', $block, $mas, PREG_SET_ORDER);
                        print preg_match_all('/(.)(.*)(\b.*{)/', $block, $mas); /* просто посчитать количество входов */
                           echo '<br>';
                        print $mas[0][0]; /* Значение второй квадратной скобки будет именно класс, начиная с нуля  */
                           echo '<br>';
                        $mas0=preg_replace('/\s\s++{/', '', $mas[0][3]); /* Пробую вырезатьпробелы в конце и фигурную скобку */
                        print $mas[0][3];
                           echo '<br>';
                        <form action="class.php">
                        <input type="submit" value="Отправить" />
                        <select name="Blocks" >
                            <option >блок1--><?php echo $mas[0][0] ?></option><!--  Передаю полученные данные -->
                            <option >блок2--><?php echo $mas[0][1] ?></option>
                            <option>блок3--><?php echo $mas[0][2] ?></option>
                            <option>блок4--><?php echo $mas[0][3] ?></option>
                        </select>
                        </form>
                      Сообщение отредактировано: D-G -
                        Нашел функцию trim. По одной строке она удаляет замечательно. В руководстве написано, что удаляет и в массивах. Пример рабочий. Но когда я пробую вырезать у себя в коде, то выдает различного рода ошибки. Вот один из примеров как я пробовал сделать:
                        ExpandedWrap disabled
                          function trim_value(&$value)
                          {
                              $value = trim($value, ' {');
                          }
                           
                          $mas=array('$mas[0][0]-$mas[0][6]');
                          var_dump($mas); /* чисто для проверки, что выдает  */
                           
                          array_walk($mas, 'trim_value');
                          var_dump($mas);  /* тоже чисто для проверки, что выдает  */
                          print $mas;

                        Пробовал без объявления $mas массивом, ведь выше он у меня обрабатывается как массив, но тут не хочет.
                        Где ещё может быть затык?
                        И ещё разобрался частично с предыдущей функцией, вот так работает:
                        ExpandedWrap disabled
                          $m1=preg_replace('/\b\s+{/', '', $mas[0][2]); /* Это рабочий вариант, в первой строке перебирает классы, вторая выводит один обрезанный */   echo '<br>';
                             print($m1);   echo '<br>';

                        Но все равно не могу придумать как это сделать сразу в массиве или какую функцию написать, чтоб не перебирать построчно.
                        Сообщение отредактировано: D-G -
                          Цитата D-G @
                          Где ещё может быть затык?

                          Возможно "затык" в том, что вы не ограничились инструментарием, показанным в сообщении №4 - function GetValueFromCSS().
                          strpos(), strlen(), substr()
                          Разобравшись с принципом "поиска требуемых значений", средствами ограниченного набора инструментов, станет значительно проще понимать принцип обработки строк другими инструментами. В частности не понадобится задействовать trim.

                          Если вы считаете, что готовы перепрыгнуть сразу к использованию регулярных выражений, я не против(заметил Ваш практический успех в этом направлении :good: ), но trim, используемый после регулярки - выглядит несколько удивительно (впрочем, извиняюсь, в смысл предложенного Вами кода я всё же не вникал, занят делами более насущными). :)
                          Сообщение отредактировано: Руслан -
                            Цитата Руслан @
                            Возможно "затык" в том, что вы не ограничились инструментарием, показанным в сообщении №4 - function GetValueFromCSS().
                            strpos(), strlen(), substr()

                            Вообще-то я пробовал, и мое сообщение №5 тому пример. Но, во-первых, не захотел тут загромождать своими примерами, во-вторых возможно и правда слабо разобрался в теме, потому что и там не придумал как сделать это массово, циклом или ещё как-нибудь. А построчно занимает много места, как та же самая регулярка, и тот же trim.
                            Цитата Руслан @
                            но trim, используемый после регулярки - выглядит несколько удивительно

                            Да просто это единственный пример, который я нашел для понятной работы в массиве. Вернее с регуляркой тоже были примеры, но они мне показались более громоздкими, но главное так и не смог их применить в своих нуждах, о чем я и написал выше. А построчно не хочется делать, ведь это только в моем примере классов 5 штук, а если их больше? Да и для 5 тоже хотелось бы сократить код. Вы с Gonarh очень хорошо показали это в других темах.
                            Цитата Руслан @
                            занят делами более насущными). :)

                            Это нормально ))) а у меня как раз стало чуть больше времени )))
                            Кстати, у меня таки остались кое-какие вопросы по сообщению №4. В том числе и что значит "//&$"?
                            Сообщение отредактировано: D-G -
                              Руслан... Кхм, ты конечно молодец, подсказываешь, и я не хочу показаться излишне придирчивым, но у PHP есть кодстайл, в твоём случае, PSR-2: https://www.php-fig.org/psr/psr-2/ А то от того что в сообщении #4 у меня глаза кровавыми слёзами кровоточат =) Про D-G я не говорю, новичок же, но ты-то :-?

                              А если говорить про основную задачу, то для 100% корректного разбора CSS требуется писать КС или КЗ парсер, можно самому, а можно взять готовый, например: https://packagist.org/packages/sabberworm/php-css-parser

                              Добавлено
                              P.S. Но, очевидно, что лучше попробовать самому, если всё ради обучения =) Просто на будущее хочу сообщить, что в мире PHP большинство подобных задач решается командой "composer install название_пакета" ;)
                              Сообщение отредактировано: Serafim -
                                Цитата Serafim @
                                но у PHP есть кодстайл

                                Слегка вступлюсь... Это видимо из-за меня, чтоб мне было понятней. Так-то Руслан постоянно говорит про чистоту кода, правила оформления, за что ему огромное спасибо. Возможно и переоцениваю свои достижения, но то, что я пробовал писать месяц назад и сейчас - две разные вещи, в том числе и в плане оформления. Вашу ссылку на кодстайл я тоже прочитал и понял насколько далек от "идеала" ((((( но буду учиться, надеюсь да получится в конце концов более менее.
                                Цитата Serafim @
                                что лучше попробовать самому, если всё ради обучения

                                Все ради обучения. К сожалению пока нет возможности куда-нибудь поступить, или найти, скажем так учителя, который бы структурировано давал знания и натаскивал на примерах, вот и выдумываю себе задачи.
                                Цитата Serafim @
                                в мире PHP большинство подобных задач решается командой "composer install название_пакета"

                                Почитал и про компосер, и понял, что мне туда ещё рано... Тут бы с более простыми вещами разобраться. Хотя вот чтение файла и составление списка освоил более менее. Чуток попозже вынесу на обсуждение для критики и замечаний то, что у меня получилось. А сейчас похоже буду новую тему начинать: чтение и составление списка файлов и каталогов с превью и прочим.
                                  Подправил слегка тему. Надеюсь такое не запрещено правилами. По крайней мере вроде явно об этом нет. Ну а лишь немного подправил, чтоб был некий компромисс между старым вариантом и тем пониманием темы, к которому пришел сейчас. Да и в поисковиках она где-то так числится.
                                  На данный момент научился получить список файлов, выбирать из него нужный и дальше его обрабатывать. Но есть небольшая проблема. Не совсем "корректно" передается выбранный файл. Точнее - есть несколько вариантов. Либо выдается предупреждение типа Нотис о пустом значении переменной, пока файл не выбран. Либо выдает фатал эрор после получения файла в начале его обработки типа не может вызвать мою функцию обработки
                                  ExpandedWrap disabled
                                    Cannot redeclare trim_value() (previously declared in ...)
                                  , хотя содержание файла распечатывает нормально.
                                  Код ниже с вариантом ошибки Фатал эрор. Тут нет полного анализа файла на наличие @media и прочих нюансов. Но в данном варианте он тоже кое-что может и код короче. Важен принцип проявления ошибки или предупреждения, а лишняя информация не нужна. Ниже под кодом список мелких отличий при появлении предупреждения Нотис. Хотя есть вариант и с Варнигом, но смысл тот же. Файл назваал sovm.php
                                  ExpandedWrap disabled
                                    <head>
                                    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                                    </head>
                                     
                                    <?php
                                    if (isset($_POST['find_css']))
                                    {find_css('.');}
                                     
                                    ?>
                                     
                                    <!--- Кнопка для сканирования файлов --->
                                    <form method="post">
                                    <input name="find_css" type="submit" value="Найти css в корневой папке">
                                    </form>
                                     
                                    <!--- Проверка нажатия кнопки для счетчика найденых файлов --->
                                    <?php
                                    if (isset($_POST['find_css']))
                                    {calcul();}
                                     ?>
                                     
                                    <!--- Форма списка,куда должны передаваться результаты для дальнейшего выбора файлов  --->
                                    <div class="form">
                                    <form action="" method="post">
                                    <div style="width:100%; height:150px; overflow:auto; border:solid 1px #C3E4FE;">
                                    <?php
                                    if (isset($_POST['find_css']))
                                    {add_strok();}
                                    ?>  <!--- Вызов функции для добавления строк с проверкой нажатия кнопки --->
                                    </div>
                                     <input type="submit" name="vibor_for_change" value="Выполнить">
                                    </form>
                                    </div>
                                     
                                    <?php
                                    // Калькулятор найденых файлов
                                    function calcul()
                                      {
                                      global $matchV; global $pic_on; global $parth_on;
                                            $calc=count($parth_on);      
                                             echo "Найдено $calc файла(ов)";
                                       }
                                     
                                    // Функция добавления строк в список файлов
                                    function add_strok()
                                       {
                                     global $pic_on; global $parth_on;
                                       for ($i=0; $i<count($parth_on); $i++)  // по идее должна была проверять количество строк (элементов массива и быть счетчиком)
                                          {
                                          echo "
                                          <input type=\"radio\" name=\"strok\" value=\"$parth_on[$i]\" />
                                    <div style=\"display:grid; grid-template-columns:80% 20%; \">
                                    <div style=\" grid-column: 1 / 1;\">$parth_on[$i]</div>
                                    <div style=\"grid-column: 2 / 2;\">$pic_on[$i]</div></div><br>
                                          ";
                                          }
                                       }
                                     
                                     
                                    // РАБОЧАЯ Функция для нахождения всех css
                                    function find_css($dir)
                                    {
                                      global $pic_on; global $parth_on;
                                      foreach (glob($dir.DIRECTORY_SEPARATOR."*") as $annown)
                                      {
                                         if (is_dir($annown))
                                         {
                                            if (find_css($annown)) continue;
                                         }
                                         else
                                         {
                                            $parth_annown[] =$annown;
                                            //echo $annown; echo '<br>';
                                                    if (preg_match_all("/^.*\.(css)$/i",$annown,$match, PREG_PATTERN_ORDER )) // выбираем все картинки
                                                 {
                                                 $matchV=array_values($match[0]); // собираем картинки в массив
                                                        foreach ($matchV as $key=>$css)
                                                       {
                                                          $parth_on[]=$css;
                                                          $pic_on[] ='<img src="./icon/icons8-css-26.png" width="100%" height="100%" >';   // делаем превью с иконкой
                                                          // echo $pic; echo '<br>'; // оставил для проверки
                                                          }
                                                   }
                                         }
                                      }
                                     
                                    }
                                     
                                    ?>
                                     
                                     
                                    <?---  тут начало всех форм по обработке селекторов  --->
                                     
                                    <?php
                                     
                                    if (isset($_POST['strok'])) {$for_change=$_POST['strok']; get_file_for_change($for_change); } // Передача файла
                                    //elseif (empty($for_change)) {$for_change='';}  // Этот вариант делал в надежде сделать "заглушку" для предупреждения Нотис
                                    // $for_change=$_POST['strok'];
                                     
                                    function get_file_for_change()
                                    { global $for_change; global $block; global $match; global $value; global $matchV;  // Это список переменных из функций обработки селекторов
                                    //file_get_contents($for_change);
                                      $block=file_get_contents($for_change);  
                                    //print_r($block); echo '<br>';  // Тут  можно ппроверить корректность получения данных из выбранного файла
                                    // Ниже небольшой список функций некоторых обрезаний селекторов
                                       preg_match_all('/()(.*)(\b.*{)|(.)(.*)(,\s)/', $block, $match, PREG_PATTERN_ORDER);
                                       $matchV=array_values($match[0]);
                                       //print_r($matchV); echo '<br>';
                                       function trim_value(&$value)
                                      {global $for_change; global $block; global $match; global $value; global $matchV;
                                      $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                                       $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                                       $value=preg_replace('/,\s+/','', $value);
                                       $value = trim($value, ' {');
                                       }
                                        array_walk($matchV, 'trim_value');
                                        //print_r($matchV); echo '<br>';
                                     
                                        /*  preg_match_all('/(\.)(.*)(,\s+)/', $block, $match1, PREG_PATTERN_ORDER);  */
                                        preg_match_all('/(,\s.)(.*)(,)/', $block, $match1, PREG_PATTERN_ORDER);
                                        $matchV1=array_values($match1[0]);
                                        //print_r($matchV1); echo '<br>';
                                        function trim_value1(&$value)
                                        {
                                          $value = preg_replace('/(,\s)(.*)(\.)/','.', $value);  
                                          $value = preg_replace('/(,)/','', $value);  
                                          }
                                         array_walk($matchV1, 'trim_value1');
                                         //print_r($matchV1); echo '<br>';
                                     
                                        preg_match_all('/(.*,\s)(.*)(,\s+)/', $block, $match2, PREG_PATTERN_ORDER);
                                       $matchV2=array_values($match2[0]);
                                       //print_r($matchV2); echo '<br>';
                                       function trim_value2(&$value)
                                       {
                                          $value = preg_replace('/(,)(.*)(,)/','', $value);  
                                        }
                                           array_walk($matchV2, 'trim_value2');
                                          //print_r($matchV2); echo '<br>';
                                     
                                     $mas1=array_merge($matchV, $matchV1, $matchV2);
                                     
                                        function trim_value3(&$value)
                                        {
                                          $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                                         $value = preg_replace('/(\.)(.*)(\.)/','.', $value);  
                                        $value=preg_replace('/,\s+/','', $value);
                                        }
                                     
                                        array_walk($mas1, 'trim_value3');
                                     
                                        $ubr=array_unique($mas1); // Удаление повторяющихся
                                     
                                        $count=count($ubr);
                                        //print $count;echo '--------<br>';
                                        $mas1id=preg_replace('/(\.)/', '', $ubr);
                                        //print_r($mas1id); echo '<br>';
                                     
                                     
                                    /*  Функция для создания списка */
                                         function add_fields()
                                        {
                                          global $count;
                                          global $ubr;
                                          for ($i=0; $i<$count; $i++)
                                             {
                                               echo "
                                                <input type=\"checkbox\" name=\"add_fields_class[]\" value=\"$ubr[$i]\"  />$ubr[$i] <br>
                                                ";
                                               }
                                        }
                                    }
                                    ?>
                                    <?--- Это форма, куда попадают отсортированные селекторы --->
                                    <form action="sovm.php" method="post">
                                    <div style="width:20%; height:100px; overflow:auto; border:solid 1px #C3E4FE;">
                                     
                                    <?php // Сюда передаются данные после обрезания, обычно вызываю функцию add_fields();
                                    if (isset($_POST['strok']))
                                    { get_file_for_change();
                                    //add_fields();
                                    } ?>
                                    </div>
                                     <input type="submit" name="formSubmit" value="Выполнить">
                                    </form>

                                  Если меняю передачу файла напрямую, тоесть вот так:
                                  ExpandedWrap disabled
                                    if (isset($_POST['strok'])) {$for_change=$_POST['strok']; file_get_contents($for_change); }

                                  Естественно убираю свою функцию get_file_for_change($for_change); (которую я и сделал то только для попытки убрать все эти предупрежддения), а в месте, куда передаются данные после обрезания оставляю вызов функции add_fields(); то остается предупреждение Нотис о пустой переменной
                                  ExpandedWrap disabled
                                    Notice: Undefined variable: for_change ... on line 110
                                    Warning: file_get_contents(): Filename cannot be empty ... on line 110

                                  Очень надеюсь на подсказку, где у меня ошибка. Хотя конечно же все эти нотисы и варнинги не критичны, но неприятны.
                                  Сообщение отредактировано: D-G -
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0683 ]   [ 16 queries used ]   [ Generated: 28.03.24, 14:45 GMT ]