Добрых вечеров! Есть каталог в этом каталоге находятся файлы .html, необходимо организовать поиск по каждому файлу в каталоге строчек вот такого вида - PHP: <?php $id=1; $ui=15; $yu=26; include'script.php'; ?> - нужно найти такую строчку и записать значение $id= - в массив , известно, что в файлах могут быть таких строчек много. Массив хранит все значения id до тех пор пока не начинается поиск на новой страничке. Вот как сейчас : PHP: <?php $link = mysql_connect("localhost", "root", "") /* Подключаюсь к базе */ or die(" "); /* сообщаю об ошибке */ mysql_select_db('dump', $link) or die (' '); /* сообщаю об ошибке */ $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`='1' || `Код документа`='2' || `Код документа`='3'"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */ /*Записываем в переменную*/ $result=mysql_query( $query ); /*Добавляем запись в начало строки*/ $ui = Array( '$id = Array(' ) ; /*Выводим все элеметы и добавляем запятую*/ $arr=array(); while($r=mysql_fetch_array( $result )) $arr[]=$r[0]; $var='$id = Array('.implode(', ',$arr).');'; echo $var; $line="2"; /* if ($line = '$id = Array(.*)') { проверка условия*/ $file=file( "1.html" ); $open=fopen( "1.html","w" ); for( $i=0;$i<count($file);$i++) { if (($i+1)!=$line){fwrite($open,$file[$i]);} else{ fwrite($open,$var."\r\n"); } } /* закрыть условие } */ fclose($open); ?> данный скрипт записывает необходимые 'Коды товаров' полученные от id соответствия, но все приходится делать в ручную тоесть на данном этапе приходится писать для каждой html свою страничку со скриптом, это очень не удобно ))) помогите пожалуйста советом или кодом)))
PHP: <?php $dir='/domen/www/mydir/'; $files=glob($dir.'*.html'); foreach($files as $file){ $text=file_get_contents($file); if(preg_match_all('#^<\?php \$id=[0-9]+; \$ui=[0-9]+; \$yu=[0-9]+; include\'[^\']+\'; \?>$#im', $text, $m)){ var_dump($m); } }
PHP: <?php $dir=dirname(__FILE__); $files=glob($dir.'/Тесты/*.html'); foreach($files as $file){ echo $file.PHP_EOL; $text=file_get_contents($file); $text=str_replace("\r\n", "\n", $text); if(preg_match_all('#^<\?php \$id=([0-9]+); \$ui=[0-9]+; \$yu=[0-9]+; include\'[^\']+\'; \?>$#im', $text, $m)){ var_dump($m); } }
Все плохо))) PHP: test/123.txt array(2) { [0]=> array(0) { } [1]=> array(0) { } } test/info.txt array(2) { [0]=> array(0) { } [1]=> array(0) { } } array(2) { [0]=> array(0) { } [1]=> array(0) { } } вот содержимое) 1 и второй странички) : HTML: 1 1 <?php $id=1; $ui=15; $yu=26; include"script.php"; ?> 1 11 1 11111111111 1 1 1 1 1 1 1 1 1 11 1 11 <?php $id=3; $ui=15; $yu=26; include"script.php"; ?> 1 1 1 1 1 <?php $id=11; $ui=15; $yu=26; include"script.php"; ?> 1 1 11 1 11 <?php $id=94; $ui=15; $yu=26; include"script.php"; ?> 1 HTML: 0 -12 <?php $id=23; $ui=15; $yu=26; include"script.php"; ?> 1 1 11 11 1 3 3 3 <?php $id=34; $ui=15; $yu=26; include"script.php"; ?> 4 4 2 4 24 24 2 4 2 42 <?php $id=19; $ui=15; $yu=26; include"script.php"; ?>
Код (Text): <?php $id=19; $ui=15; $yu=26; include"script.php"; ?> Код (Text): <?php $id=19; $ui=15; $yu=26; include'script.php'; ?> Найдите отличия. возможно потребуется использование: http://ru2.php.net/manual/en/regexp.ref ... nation.php
PHP: $source = array("/r/n" => "/n", "<?php" => "хрень какая нибудь"); - думаю вот так будет работать)) как сделаю отпишусь)
Я веду к тому что preg_match_all ищет строки по заданной маске. Первая строчка с кодом маске не удовлетворяет, вторая -удовлетворяет. Если найти отличия, то можно изменить/дополнить маску.
Код (Text): '#^\s*<\?php \$id=([0-9]+); \$ui=[0-9]+; \$yu=[0-9]+; include\'|"[^\']+\'|"; \?>$#im' ))) так вроде работает- но чтото не совсем))
Код (Text): include\'|"[^\']+\'|" Два раза из трех учли. Так же Код (Text): \'|" Стоит взять в скобки, иначе, похоже, он выбирает не из двух символов, а из двух "выражений". Чтоб в итоговом массиве не мешало, можно использовать пассивную группу - (?:\'|")
Volt(220) -Спасибо еще раз за неоценимую помощь!!)) Но на этом прошу помочь еще)) если можно... вот что вернул: Код (Text): <br />Array ( [0] => Array ( [0] => "; ?> <?php $id=1111; $ui=15; $yu=26; include' [1] => <?php $id=2222; $ui=15; $yu=26; include' [2] => <?php $id=3333; $ui=15; $yu=26; include' ) [1] => Array ( [0] => [1] => 2222 [2] => 3333 ) ) почему первый элемент массива не вернул? вот код первой странички))) Код (Text): 1 <?php $id = "12, 31, 1231"; $id_author = ""; $date_create = ""; $date_edit = "12.02.2011"; ?> 1 1 1 1 1 1 1 <?php $id=1111; $ui=15; $yu=26; include'script.php'; ?> 9 9 9 9 9 9 9 9 9 <?php $id=2222; $ui=15; $yu=26; include'script.php'; ?> 9 99 <?php $id=3333; $ui=15; $yu=26; include'script.php'; ?>
PHP: preg_match_all('#^\s*<\?php\s\$id=([0-9]+);\s\$ui=[0-9]+;\s\$yu=[0-9]+;\sinclude\'|"[^\'|"]+\'|";\s\?>$#im',
а как теперь вывести из массива данные для поочередного запроса - вот такого вида? PHP: <? $link = mysql_connect("localhost", "root", "") /* Подключаюсь к базе */ or die(" "); /* сообщаю об ошибке */ mysql_select_db('dump', $link) or die (' '); /* сообщаю об ошибке */ $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`='1' || `Код документа`='2' || `Код документа`='3'"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */ /*Записываем в переменную*/ $result=mysql_query( $query ); /*Добавляем запись в начало строки*/ $ui = Array( '$id = Array(' ) ; /*Выводим все элеметы и добавляем запятую*/ $arr=array(); while($r=mysql_fetch_array( $result )) $arr[]=$r[0]; $var='$id = Array('.implode(', ',$arr).');'; echo $var; ?> то есть надо вот отсюда PHP: Array ( [0] => Array ( [0] => <?php $id=1111; $ui=15; $yu=26; include' [1] => <?php $id=2222; $ui=15; $yu=26; include' [2] => <?php $id=3333; $ui=15; $yu=26; include' ) [1] => Array ( [0] => 1111 [1] => 2222 [2] => 3333 ) ) достать поочередно 1111 в запрос потом 2222 и затем 3333 как реализовать направьте пожалуйста?))))
PHP: <? foreach($m[1] as $roo){ $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`=".$roo; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */ /*Записываем в переменную*/ $result=mysql_query($query); /*Добавляем запись в начало строки*/ /*Выводим все элеметы и добавляем запятую*/ $arr=array(); while($r=mysql_fetch_array( $result )) $arr[]=$r[0]; } $var='$id = Array('.implode(', ',$arr).');'; echo '<br />'.$var; } ?> вот так выводит только последнюю запись массива, а как все записи сложить? тоесть строка будет состоять из всех записей которые вернул нам mysql и генерируется строка... что не так?)))
PHP: <?php $docCodes=implode(',',$m[1]); $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа` in ($roo) order by `Код документа`"; У while пропущена открывающая фигурная скобка
PHP: <?php foreach($files as $file) { $konec=file_get_contents($file); echo '<br />'; preg_match_all('#^\s{0,1}<\?php\s\$id=([0-9]+);\s\$ui=[0-9]+;\s\$yu=[0-9]+;\sinclude\'|"[^\'|"]+?:\'|";\s\?>\s{0,1}$#im', $konec, $m); print_r ($m); foreach($m[1] as $roo){ $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа` in ($roo) order by `Код документа`"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */ /*Записываем в переменную*/ $result=mysql_query($query); /*Добавляем запись в начало строки*/ /*Выводим все элеметы и добавляем запятую*/ $docCodes=implode(',',$m[1]); $arr=array(); while($r=mysql_fetch_array( $result )) $arr[]=$r[0]; { $var='$id = Array('.$docCodes.');'; } } echo '<br />'.$var; } ?> Понимаю, что задолбал своими вопросами))), но мозг уже плохо соображает))) вернул $id = Array(1111, 2222, 3333); , а должен был результат запроса Mysql
0)Не понимаю почему мое предыдущее сообщение отразилось на коде частично и искаженно. 1)Опишите что делает каждая строчка? 2)Зачем foreach в третьей строчке? 3)Зачем открывающая скобка в 17 строчке 4)Проанализируйте откуда берется переменная $docCodes в 18 строчке. 5)Вопрос на засыпку: Что измениться если в коде останутся только 2, 18, и 24 строчки?