За последние 24 часа нас посетил 17481 программист и 1676 роботов. Сейчас ищут 918 программистов ...

Чтение большого кол-ва файлов

Тема в разделе "Прочие вопросы по PHP", создана пользователем Artos, 21 ноя 2010.

  1. Artos

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

    С нами с:
    4 фев 2009
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте, есть папка в которой около 70 000 html файлов и следующий скрипт:

    Код (Text):
    1.  
    2.         $dir   = "/home/fighters";
    3.         $files = scandir($dir);
    4.  
    5.         $links = array();
    6.  
    7.         foreach ($files as $ind => $file)
    8.         {
    9.             if (in_array($file, array(".", ".."))) continue;
    10.  
    11.             $c = $this->clear(file_get_contents($dir . "/"  . $file));
    12.  
    13.             preg_match_all('|href="/events/(.*)"|isU', $c, $events);
    14.             if (isset($events[1]))
    15.             {
    16.                 $links = array_merge($links, $events[1]);    
    17.             }
    18.  
    19.             echo $ind . "\n";
    20.         }
    21.  
    22.         $links = array_unique($links);
    23.  
    24.         foreach($links as $ind => $link)
    25.         {
    26.             $links[$ind] = "http://www.site.com/events/{$link}";
    27.         }
    28.  
    29.         $links = implode("\n", $links);
    30.         $file   = "./data/links/events.txt";
    31.  
    32.         file_put_contents($file ,$links);            
    33.         chmod($file, 0777);
    Где то на 20 000 - ом файле появляется ошибка:
    PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 524288 bytes).

    В php.ini - memory_limit 1280000M

    Почему то скрипт с дальнейшими итерациями ест все больше и больше памяти.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    А зачем все скопом? пиши в файл результат обработки после каждого прохода. Потом разок его отсортируешь, если надо будет.

    вобще, учи БД
     
  3. Artos

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

    С нами с:
    4 фев 2009
    Сообщения:
    3
    Симпатии:
    0
    да можно попробовать добавлять в файл на каждой итерации, причем тут БД? мне нужно из большого кол-ва файлов пропарсить ссылки, которые потом wget буду отдавать
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и? бд удобнее всегда =)
     
  5. Ensiferum

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

    С нами с:
    11 июл 2010
    Сообщения:
    1.292
    Симпатии:
    0
    Адрес:
    из секты поклонников Нео
    Семь бед - в БД ответ =)