Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.117.196.184] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Продолжаю вопросы новичка. Есть три файла: index.php - файл шаблона, main.css - файл стилей, admin.php - файл для всяких настроек, которые будут применяться при загрузке индекс.пхп Причем файл индекс.пхп и мэйн.цсс могут меняться по содержанию, ну или допустим подставляться другие вместо них.
Можно ли как-то вытащить из любого из этих двух файлов классы, ну а в последствии и id и составить из них список. Для простоты в индекс.пхп создал один класс, а в цсс задал для него стиль, в прочем и для боди тоже. Потом в админ.пхп пробовал разные варианты. Вот так сказать мои потуги: <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 Нечто подобное и в случае с цсс файлом. Так вот, возможно ли сделать то, что я хочу, и как это все таки правильней сделать |
Сообщ.
#2
,
|
|
|
Решил зайти с другой стороны. Создал небольшой файл цсс с двумя классами main.css
Попробовал из него вытащить данные вот так: $block=file_get_contents('main.css'); При этом по идее эти данные можно было бы представить в виде массива. Пробую его "перебрать" и вывести результаты, но ничего особого не дает, массив пуст echo "$block"; foreach ($_POST as $key=>$value) echo "$block $key $value "; var_dump($_POST); Вот что пулучаю: body { background: red; background-image: ; } .wrap { background:yellow ; margin: auto ; width: 700px ; height: 400px ; z-index: 3 ; }array(0) { } Может кто-то сказать, прав я или нет в том, что полученные данные можно представить в виде массива? Только видимо это двумерный массив? |
Сообщ.
#3
,
|
|
|
Цитата 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 |
Сообщ.
#4
,
|
|
|
Цитата D-G @ Только видимо это двумерный массив? Лично я не припомню метод, которым можно было бы одной строкой объяснить php интерпретатору "ты имеешь дело с ассоциативным массивом, пожалуйста считай этот файл таковым". Вроде должно быть, но не припоминаю (разве что регуляркой разбить). Вариант решения можно уложить одну строку "регулярки" (при этом логическая сложность этой регулярки, в общем то вполне сопоставима с ниже приведенным кодом), либо перебирать вручную: //вернуть значение (класс\элемент=значение) 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');//&$ и это ещё без обработки ошибок... Ладно, на счёт "регулярок", мы в соседней теме обсуждали сохранение в .css, у вас вопрос возник, куда пропал $3, вот куда он пропал, в некотором роде обратная функция, по сути без изменений, выводится как раз пропавший №3: $css_file=file_get_contents('style.css'); $Target1='ClassForUser'; $Target2='color'; preg_match('/(.*'.$Target1.'{)(.*[^}]\s'.$Target2.':)(.*;)(.*)/Usi', $css_file, $tmp1); echo $tmp1[3]; |
Сообщ.
#5
,
|
|
|
Цитата Руслан @ Строка 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' Добавлено Получилось прикольно. Добавил в свой файл следующий код: <?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. Разве это одно и то же? |
Сообщ.
#6
,
|
|
|
Цитата D-G @ стати, не знаете почему там в примере стоит '$mystring1' хотя нигде не объявялялась такая переменная? Только '$mystring' Очепятка в примере. Респект за внимательность. Цитата D-G @ Я ещё попробовал форму создать, так, ради эксперимента, что на что влияет. Окей, в принципе вполне метод уточнить-подразобраться что и как работает. Только зачем же было сюда этот эксперимент то выкладывать? Он же лишен практического смысла в контексте поставленного вами вопроса - "выборка из .css"! Цитата D-G @ Разве foreach не перебирает полученный массив? Вы перебираете массив переданных от клиента данных ($_POST), а не файл.css Цитата D-G @ Честно говоря с этим ещё определился. Хочу увидеть, что можно получить, потом решу. Не рассчитывайте, что за вас будут решать многочисленные хотелки "посмотреть так", "посмотреть эдак"... Хотя в целом, мысль изначально рассматривать .css как именованный массив - в принципе толковая, логичная. Нюансы есть на старте(не помню я стандартной функции для такого рода разбора, разве что с "регуляркой"), а позже вылезет ещё больше нюансов. Цитата D-G @ Про регулярные выражения читаю вот эту статью http://www.php.su/articles/?cat=regexp&page=008 Но хоть в оглавлении написано, что это пхп, в статье почему-то PERL. Разве это одно и то же? ПХП это не перл. Однако имеется такое понятие, как "перл-совместимые регулярны выражения", PCRE. В процессе несомненно найдутся отличия между регулярками для PHP и регулярками же Perl. Кстати, вот здесь можно потестировать свою регулярку, наглядно посмотреть этапы работы: https://regex101.com/ |
Сообщ.
#7
,
|
|
|
Цитата Руслан @ Респект за внимательность. Это случайность, на самом деле я сам очень невнимательный Цитата Руслан @ Только зачем же было сюда этот эксперимент то выкладывать? Уже начинаю запутываться что держу в голове, а что где-то пишу, вот и забыл прокоментировать весь процесс эксперимента, кстати, подсмотрел в вашем примере. Цитата Руслан @ мысль изначально рассматривать .css как именованный массив - в принципе толковая, логичная Теперь мне это кажется лишним, но на будущее пригодится. Сейчас пробую научится поиску строк, знаков, символов. Цитата Руслан @ Кстати, вот здесь можно потестировать свою регулярку, наглядно посмотреть этапы работы: https://regex101.com/ Спс, ))) буду и с этим разбираться, хоть пока не понял как, но идея проверять он-лайн мне нравится. Совсем недавно на кодэ-пэйне html и css мучал. |
Сообщ.
#8
,
|
|
|
Цитата D-G @ вот и забыл прокоментировать весь процесс эксперимента От формулировки вопроса зависит многое... В том числе вероятность его прочтения кем-либо. Цитата D-G @ Сейчас пробую научится поиску строк, знаков, символов. Весьма мудро! Всячески одобряю! |
Сообщ.
#9
,
|
|
|
Цитата Руслан @ Весьма мудро! Всячески одобряю! Спс, но у меня опять проблема, я все таки туговат. Не могу найти решение. Допустим есть файл со стилями style.css В котором какое-то количество классов, допустим: body, wrap1, wrap2, wraper3, wrapper4. Найти классы оказалось довольно легко. В начало поиска поставил точку, хотя это похоже пробел. В конце поиска поставил конец слова\b точку, звездочку (две последние захватывают все пробелы) и фигурную скобку. И создал типа массив. Таким образом показывает именно классы, если первый ключ массива выбирать 0. Можно было бы убрать фигурную скобку и точку со звездочкой, но тогда в список попадают и свойства класса, соответственно путаются под ногами. Можно ли как-то показать поиску, что искать нужно до фигурной скобки не включая её, но учитывая, что она конец искомого шаблона? Да и пробелы хотелось бы убрать из вывода результата. Потому что вырезать у меня не вышло. Просто бывают ситуации, когда фигурная скобка стоит без пробела или через несколько пробелов после имени класса. Вот что у меня получилось: $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> |
Сообщ.
#10
,
|
|
|
Нашел функцию trim. По одной строке она удаляет замечательно. В руководстве написано, что удаляет и в массивах. Пример рабочий. Но когда я пробую вырезать у себя в коде, то выдает различного рода ошибки. Вот один из примеров как я пробовал сделать:
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 массивом, ведь выше он у меня обрабатывается как массив, но тут не хочет. Где ещё может быть затык? И ещё разобрался частично с предыдущей функцией, вот так работает: $m1=preg_replace('/\b\s+{/', '', $mas[0][2]); /* Это рабочий вариант, в первой строке перебирает классы, вторая выводит один обрезанный */ echo '<br>'; print($m1); echo '<br>'; Но все равно не могу придумать как это сделать сразу в массиве или какую функцию написать, чтоб не перебирать построчно. |
Сообщ.
#11
,
|
|
|
Цитата D-G @ Где ещё может быть затык? Возможно "затык" в том, что вы не ограничились инструментарием, показанным в сообщении №4 - function GetValueFromCSS(). strpos(), strlen(), substr() Разобравшись с принципом "поиска требуемых значений", средствами ограниченного набора инструментов, станет значительно проще понимать принцип обработки строк другими инструментами. В частности не понадобится задействовать trim. Если вы считаете, что готовы перепрыгнуть сразу к использованию регулярных выражений, я не против(заметил Ваш практический успех в этом направлении ), но trim, используемый после регулярки - выглядит несколько удивительно (впрочем, извиняюсь, в смысл предложенного Вами кода я всё же не вникал, занят делами более насущными). |
Сообщ.
#12
,
|
|
|
Цитата Руслан @ Возможно "затык" в том, что вы не ограничились инструментарием, показанным в сообщении №4 - function GetValueFromCSS(). strpos(), strlen(), substr() Вообще-то я пробовал, и мое сообщение №5 тому пример. Но, во-первых, не захотел тут загромождать своими примерами, во-вторых возможно и правда слабо разобрался в теме, потому что и там не придумал как сделать это массово, циклом или ещё как-нибудь. А построчно занимает много места, как та же самая регулярка, и тот же trim. Цитата Руслан @ но trim, используемый после регулярки - выглядит несколько удивительно Да просто это единственный пример, который я нашел для понятной работы в массиве. Вернее с регуляркой тоже были примеры, но они мне показались более громоздкими, но главное так и не смог их применить в своих нуждах, о чем я и написал выше. А построчно не хочется делать, ведь это только в моем примере классов 5 штук, а если их больше? Да и для 5 тоже хотелось бы сократить код. Вы с Gonarh очень хорошо показали это в других темах. Цитата Руслан @ занят делами более насущными). Это нормально ))) а у меня как раз стало чуть больше времени ))) Кстати, у меня таки остались кое-какие вопросы по сообщению №4. В том числе и что значит "//&$"? |
Сообщ.
#13
,
|
|
|
Руслан... Кхм, ты конечно молодец, подсказываешь, и я не хочу показаться излишне придирчивым, но у 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 название_пакета" |
Сообщ.
#14
,
|
|
|
Цитата Serafim @ но у PHP есть кодстайл Слегка вступлюсь... Это видимо из-за меня, чтоб мне было понятней. Так-то Руслан постоянно говорит про чистоту кода, правила оформления, за что ему огромное спасибо. Возможно и переоцениваю свои достижения, но то, что я пробовал писать месяц назад и сейчас - две разные вещи, в том числе и в плане оформления. Вашу ссылку на кодстайл я тоже прочитал и понял насколько далек от "идеала" ((((( но буду учиться, надеюсь да получится в конце концов более менее. Цитата Serafim @ что лучше попробовать самому, если всё ради обучения Все ради обучения. К сожалению пока нет возможности куда-нибудь поступить, или найти, скажем так учителя, который бы структурировано давал знания и натаскивал на примерах, вот и выдумываю себе задачи. Цитата Serafim @ в мире PHP большинство подобных задач решается командой "composer install название_пакета" Почитал и про компосер, и понял, что мне туда ещё рано... Тут бы с более простыми вещами разобраться. Хотя вот чтение файла и составление списка освоил более менее. Чуток попозже вынесу на обсуждение для критики и замечаний то, что у меня получилось. А сейчас похоже буду новую тему начинать: чтение и составление списка файлов и каталогов с превью и прочим. |
Сообщ.
#15
,
|
|
|
Подправил слегка тему. Надеюсь такое не запрещено правилами. По крайней мере вроде явно об этом нет. Ну а лишь немного подправил, чтоб был некий компромисс между старым вариантом и тем пониманием темы, к которому пришел сейчас. Да и в поисковиках она где-то так числится.
На данный момент научился получить список файлов, выбирать из него нужный и дальше его обрабатывать. Но есть небольшая проблема. Не совсем "корректно" передается выбранный файл. Точнее - есть несколько вариантов. Либо выдается предупреждение типа Нотис о пустом значении переменной, пока файл не выбран. Либо выдает фатал эрор после получения файла в начале его обработки типа не может вызвать мою функцию обработки Cannot redeclare trim_value() (previously declared in ...) Код ниже с вариантом ошибки Фатал эрор. Тут нет полного анализа файла на наличие @media и прочих нюансов. Но в данном варианте он тоже кое-что может и код короче. Важен принцип проявления ошибки или предупреждения, а лишняя информация не нужна. Ниже под кодом список мелких отличий при появлении предупреждения Нотис. Хотя есть вариант и с Варнигом, но смысл тот же. Файл назваал sovm.php <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> Если меняю передачу файла напрямую, тоесть вот так: if (isset($_POST['strok'])) {$for_change=$_POST['strok']; file_get_contents($for_change); } Естественно убираю свою функцию get_file_for_change($for_change); (которую я и сделал то только для попытки убрать все эти предупрежддения), а в месте, куда передаются данные после обрезания оставляю вызов функции add_fields(); то остается предупреждение Нотис о пустой переменной Notice: Undefined variable: for_change ... on line 110 Warning: file_get_contents(): Filename cannot be empty ... on line 110 Очень надеюсь на подсказку, где у меня ошибка. Хотя конечно же все эти нотисы и варнинги не критичны, но неприятны. |