За последние 24 часа нас посетили 102795 программистов и 5623 робота. Сейчас ищут 3062 программиста ...

Поиск строк в каталогах

Тема в разделе "Прочие вопросы по PHP", создана пользователем Lovelysop, 31 мар 2011.

  1. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Добрых вечеров!

    Есть каталог в этом каталоге находятся файлы .html, необходимо организовать поиск по каждому файлу в каталоге строчек вот такого вида -
    PHP:
    1. <?php $id=1; $ui=15; $yu=26; include'script.php'; ?>
    - нужно найти такую строчку и записать значение $id= - в массив , известно, что в файлах могут быть таких строчек много. Массив хранит все значения id до тех пор пока не начинается поиск на новой страничке.
    Вот как сейчас :

    PHP:
    1. <?php
    2. $link = mysql_connect("localhost", "root", "") /* Подключаюсь к базе */
    3. or die(" "); /* сообщаю об ошибке */
    4. mysql_select_db('dump', $link)
    5. or die (' '); /* сообщаю об ошибке */
    6. $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`='1' || `Код документа`='2' || `Код документа`='3'"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */
    7. /*Записываем в переменную*/
    8. $result=mysql_query(
    9.                 $query
    10.         );
    11. /*Добавляем запись в начало строки*/
    12.  
    13. $ui =  Array(
    14.         '$id = Array(' 
    15.         ) ;
    16. /*Выводим все элеметы и добавляем запятую*/
    17.  
    18.  $arr=array();
    19.  while($r=mysql_fetch_array(
    20.                             $result
    21.                                     )) $arr[]=$r[0];
    22.  $var='$id = Array('.implode(', ',$arr).');';
    23.    
    24.    
    25.  echo $var;
    26.  
    27.   $line="2";
    28. /* if ($line = '$id = Array(.*)')
    29.  { проверка условия*/
    30.  
    31. $file=file(
    32.             "1.html"
    33.                                                     );
    34.  $open=fopen(
    35.                 "1.html","w"
    36.                                                             );
    37.  
    38. for(
    39.         $i=0;$i<count($file);$i++)
    40.  {
    41.  if
    42.  (($i+1)!=$line){fwrite($open,$file[$i]);}
    43.  else{
    44.     fwrite($open,$var."\r\n");
    45.                             }
    46.                                         }
    47. /* закрыть условие } */
    48. fclose($open);
    49.  ?>
    данный скрипт записывает необходимые 'Коды товаров' полученные от id соответствия, но все приходится делать в ручную
    тоесть на данном этапе приходится писать для каждой html свою страничку со скриптом, это очень не удобно ))) помогите пожалуйста советом или кодом)))
     
  2. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    PHP:
    1. <?php
    2. $dir='/domen/www/mydir/';
    3. $files=glob($dir.'*.html');
    4. foreach($files as $file){
    5.     $text=file_get_contents($file);
    6.     if(preg_match_all('#^<\?php \$id=[0-9]+; \$ui=[0-9]+; \$yu=[0-9]+; include\'[^\']+\'; \?>$#im', $text, $m)){
    7.         var_dump($m);
    8.     }
    9. }
     
  4. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Volt(220) Огромное спасибо за помощь!!! вот только строки все равно не ищет(((
     
  5. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    PHP:
    1. <?php
    2.  $dir=dirname(__FILE__);
    3.  $files=glob($dir.'/Тесты/*.html');
    4.  foreach($files as $file){
    5.      echo $file.PHP_EOL;
    6.      $text=file_get_contents($file);
    7.      $text=str_replace("\r\n", "\n", $text);
    8.      if(preg_match_all('#^<\?php \$id=([0-9]+); \$ui=[0-9]+; \$yu=[0-9]+; include\'[^\']+\'; \?>$#im', $text, $m)){
    9.          var_dump($m);
    10.      }
    11.  }
     
  6. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Все плохо)))
    PHP:
    1. 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
    2. 1
    3. <?php $id=1; $ui=15; $yu=26; include"script.php"; ?>
    4. 1
    5. 11
    6. 1
    7. 11111111111
    8. 1
    9. 1
    10. 1
    11. 1
    12. 1
    13. 1
    14. 1
    15. 1
    16. 1
    17. 11
    18. 1
    19. 11
    20. <?php $id=3; $ui=15; $yu=26; include"script.php"; ?>
    21. 1
    22. 1
    23. 1
    24. 1
    25. 1
    26. <?php $id=11; $ui=15; $yu=26; include"script.php"; ?>
    27. 1
    28. 1
    29. 11
    30. 1
    31. 11
    32. <?php $id=94; $ui=15; $yu=26; include"script.php"; ?>
    33. 1
    HTML:
    1.  
    2. 0
    3. -12
    4. <?php $id=23; $ui=15; $yu=26; include"script.php"; ?>
    5. 1
    6. 1
    7. 11
    8. 11
    9. 1
    10. 3
    11. 3
    12. 3
    13. <?php $id=34; $ui=15; $yu=26; include"script.php"; ?>
    14. 4
    15. 4
    16. 2
    17. 4
    18. 24
    19. 24
    20. 2
    21. 4
    22. 2
    23. 42
    24. <?php $id=19; $ui=15; $yu=26; include"script.php"; ?>
     
  7. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    Код (Text):
    1.  <?php $id=19; $ui=15; $yu=26; include"script.php"; ?>
    Код (Text):
    1. <?php $id=19; $ui=15; $yu=26; include'script.php'; ?>
    Найдите отличия.
    возможно потребуется использование:
    http://ru2.php.net/manual/en/regexp.ref ... nation.php
     
  8. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Не понял, к чему вы ведете?
     
  9. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    PHP:
    1. $source = array("/r/n" => "/n", "<?php" => "хрень какая нибудь");
    - думаю вот так будет работать)) как сделаю отпишусь)
     
  10. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    Я веду к тому что preg_match_all ищет строки по заданной маске. Первая строчка с кодом маске не удовлетворяет, вторая -удовлетворяет. Если найти отличия, то можно изменить/дополнить маску.
     
  11. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Код (Text):
    1. '#^\s*<\?php \$id=([0-9]+); \$ui=[0-9]+; \$yu=[0-9]+; include\'|"[^\']+\'|"; \?>$#im'
    ))) так вроде работает- но чтото не совсем))
     
  12. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    Код (Text):
    1. include\'|"[^\']+\'|"
    Два раза из трех учли.

    Так же
    Код (Text):
    1. \'|"
    Стоит взять в скобки, иначе, похоже, он выбирает не из двух символов, а из двух "выражений".
    Чтоб в итоговом массиве не мешало, можно использовать пассивную группу - (?:\'|")
     
  13. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    И есть еще такой вариант этой части:
    Код (Text):
    1. include(\'|")[^\'"]+\\2;
     
  14. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Volt(220) -Спасибо еще раз за неоценимую помощь!!))
    Но на этом прошу помочь еще)) если можно...

    вот что вернул:
    Код (Text):
    1. <br />Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => ";
    6.  
    7. ?>
    8.  
    9. <?php $id=1111; $ui=15; $yu=26; include'
    10.             [1] => <?php $id=2222; $ui=15; $yu=26; include'
    11.             [2] => <?php $id=3333; $ui=15; $yu=26; include'
    12.         )
    13.  
    14.     [1] => Array
    15.         (
    16.             [0] =>
    17.             [1] => 2222
    18.             [2] => 3333
    19.         )
    20.  
    21. )
    почему первый элемент массива не вернул?

    вот код первой странички)))


    Код (Text):
    1. 1
    2. <?php
    3. $id = "12, 31, 1231";
    4. $id_author = "";
    5. $date_create = "";
    6. $date_edit = "12.02.2011";
    7. ?>
    8. 1
    9. 1
    10. 1
    11. 1
    12. 1
    13. 1
    14. 1
    15. <?php $id=1111; $ui=15; $yu=26; include'script.php'; ?>
    16. 9
    17. 9
    18. 9
    19. 9
    20. 9
    21. 9
    22. 9
    23. 9
    24. 9
    25. <?php $id=2222; $ui=15; $yu=26; include'script.php'; ?>
    26. 9
    27. 99
    28. <?php $id=3333; $ui=15; $yu=26; include'script.php'; ?>
     
  15. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    PHP:
    1. preg_match_all('#^\s*<\?php\s\$id=([0-9]+);\s\$ui=[0-9]+;\s\$yu=[0-9]+;\sinclude\'|"[^\'|"]+\'|";\s\?>$#im',
     
  16. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    Посмотрите мои последние два сообщения в этой теме.
    Кстати, там еще пробельные символы в конце.
     
  17. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Уффф!!!!))) Заработало))))
     
  18. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    а как теперь вывести из массива данные для поочередного запроса - вот такого вида?
    PHP:
    1.  
    2. <?
    3. $link = mysql_connect("localhost", "root", "") /* Подключаюсь к базе */
    4. or die(" "); /* сообщаю об ошибке */
    5. mysql_select_db('dump', $link)
    6. or die (' '); /* сообщаю об ошибке */
    7. $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`='1' || `Код документа`='2' || `Код документа`='3'"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */
    8. /*Записываем в переменную*/
    9. $result=mysql_query(
    10.                 $query
    11.         );
    12. /*Добавляем запись в начало строки*/
    13.  
    14. $ui =  Array(
    15.         '$id = Array(' 
    16.         ) ;
    17. /*Выводим все элеметы и добавляем запятую*/
    18.  
    19.  $arr=array();
    20.  while($r=mysql_fetch_array(
    21.                             $result
    22.                                     )) $arr[]=$r[0];
    23.  $var='$id = Array('.implode(', ',$arr).');';
    24.    
    25.    
    26.  echo $var;
    27. ?>
    то есть надо вот отсюда
    PHP:
    1. Array
    2. (
    3.     [0] => Array
    4.         (
    5.             [0] => <?php $id=1111; $ui=15; $yu=26; include'
    6.            [1] => <?php $id=2222; $ui=15; $yu=26; include'
    7.             [2] => <?php $id=3333; $ui=15; $yu=26; include'
    8.        )
    9.  
    10.    [1] => Array
    11.        (
    12.            [0] => 1111
    13.            [1] => 2222
    14.            [2] => 3333
    15.        )
    16.  
    17. )
    достать поочередно 1111 в запрос потом 2222 и затем 3333 как реализовать направьте пожалуйста?))))
     
  19. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    Код (Text):
    1. foreach($m[1] as $id){
    2. ...
    3. }
    А почему строки обрезаны?
     
  20. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Оп, только заметил))) счас буду смотреть
     
  21. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    PHP:
    1.  <?
    2. foreach($m[1] as $roo){
    3.  
    4.  $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа`=".$roo; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */
    5.  
    6.  
    7.  /*Записываем в переменную*/
    8. $result=mysql_query($query);
    9. /*Добавляем запись в начало строки*/
    10.  
    11. /*Выводим все элеметы и добавляем запятую*/
    12.  
    13.  $arr=array();
    14.  while($r=mysql_fetch_array(
    15.                             $result
    16.                                     )) $arr[]=$r[0];
    17.  
    18.   }
    19.  $var='$id = Array('.implode(', ',$arr).');';
    20. echo '<br />'.$var;
    21.  }
    22. ?>
    вот так выводит только последнюю запись массива, а как все записи сложить? тоесть строка будет состоять из всех записей которые вернул нам mysql и генерируется строка... что не так?)))
     
  22. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    PHP:
    1. <?php
    2. $docCodes=implode(',',$m[1]);
    3.  $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа` in ($roo) order by `Код документа`";


    У while пропущена открывающая фигурная скобка
     
  23. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    PHP:
    1. <?php
    2. foreach($files as $file)
    3.  {
    4.      $konec=file_get_contents($file);
    5.      
    6.      echo '<br />';
    7.    
    8.      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);
    9.  
    10. print_r ($m);
    11.          
    12.      
    13.  
    14.  
    15.  foreach($m[1] as $roo){
    16.  
    17.  $query = "SELECT `Код товара` FROM `Соответсвие` WHERE `Код документа` in ($roo) order by `Код документа`"; /* выбираю из базы таблицу Соответствие и все записи в которых Код документа=2 */
    18.  
    19.  /*Записываем в переменную*/
    20. $result=mysql_query($query);
    21. /*Добавляем запись в начало строки*/
    22.  
    23. /*Выводим все элеметы и добавляем запятую*/
    24.  $docCodes=implode(',',$m[1]);
    25.  $arr=array();
    26.  while($r=mysql_fetch_array(
    27.                             $result
    28.                                     )) $arr[]=$r[0];
    29. {
    30. $var='$id = Array('.$docCodes.');';
    31.  
    32.  
    33.  }
    34.  
    35.     }
    36. echo '<br />'.$var;
    37.  }
    38.  ?>
    Понимаю, что задолбал своими вопросами))), но мозг уже плохо соображает)))
    вернул $id = Array(1111, 2222, 3333); , а должен был результат запроса Mysql
     
  24. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.639
    Симпатии:
    1
    0)Не понимаю почему мое предыдущее сообщение отразилось на коде частично и искаженно.
    1)Опишите что делает каждая строчка?
    2)Зачем foreach в третьей строчке?
    3)Зачем открывающая скобка в 17 строчке
    4)Проанализируйте откуда берется переменная $docCodes в 18 строчке.
    5)Вопрос на засыпку: Что измениться если в коде останутся только 2, 18, и 24 строчки?
     
  25. Lovelysop

    Lovelysop Активный пользователь

    С нами с:
    15 фев 2011
    Сообщения:
    40
    Симпатии:
    0
    Это я не стого файла копировал)) прошу прощения)))