Intereting Posts
Не удается выполнить одиночный тест с поставщиком данных в PHPUnit Почему PHP не поддерживает сеанс между страницами? тайм-аут автоматического выхода из системы с использованием jquery php PHP обнаруживает Internet Explorer, который ниже версии 10 Какой адрес электронной почты для использования в API аккаунта Google Service AJAX Вызов в файл PHP: возвращаемое значение пуст Как отправить данные формы в CSV Частота пересылки по вызову PHP неизбежно? как я могу исправить продолжительность времени, чтобы заполнить форму извлечение идентификаторов, назначенных списку идентификаторов пользователей загружать изображения спереди Динамическое создание ролей и разрешений RBAC Как отправить динамические данные из одной активности в другую в android Скрыть особенности Плоские тарифы, когда бесплатная доставка доступна в WooCommerce 3 Какие каталоги проверяет PHP при включении относительного пути с include ()?

PHP из памяти – сбой Apache?

Я запускаю PHP версии 5.3.0 и Apache: 2.2.11

Когда я запускаю скрипты PHP, которые потребляют много памяти (я думаю) – большие циклы и т. Д. Мой веб-сервер Apache сообщает об аварии!

[Sat Jan 02 00:51:30 2010] [notice] Parent: child process exited with status 255 -- Restarting. 

Нужно ли мне где-то увеличивать память? В настоящее время у меня установлена ​​память

 memory_limit = 512M 

PHP не жаловался на это, поэтому я думаю о чем-то другом?

Спасибо всем

Обновить

Эта ошибка была зарегистрирована моей машиной Windows в средстве просмотра событий:

Неверное приложение httpd.exe, версия 2.2.11.0, отметка времени 0x493f5d44, ошибка модуля php5ts.dll, версия 5.3.0.0, отметка времени 0x4a4922e7, код исключения 0xc0000005, смещение ошибки 0x00083655, идентификатор процесса 0x1588, время начала приложения 0x01ca8b46e4925f90.

Обновление 2

Сценарий в вопросе. Я удалил URL.

 <?php error_reporting(E_ALL); set_time_limit(300000); echo 'start<br>'; include_once('simple_html_dom.php'); $FileHandle = fopen('tech-statistics3.csv', 'a+') or die("can't open file"); for($i =1; $i < 101; $i ++){ // Create DOM from URL $html = file_get_html("http://www.x.com/$i"); foreach($html->find('div[class=excerpt]') as $article) { $item0 = $article->children(1)->children(1)->children[0]->plaintext; $item1 = $article->children(1)->children(1)->children[0]->plaintext; $item2 = $article->children(1)->children(0)->children(0)->children(0)->plaintext; //$item3 = $article->children(1)->children(0)->children(0)->children[1]->children(0)->next_sibling(); $stringa = trim($item0).",".trim($item1).",".trim($item2)."\r\n"; fwrite($FileHandle, $stringa); echo $stringa.'<br>'; echo '------------>'.$i; } } fclose($FileHandle); echo '<b>End<br>'; ?> 

Обновление 3

Я использую PHP Simple HTML DOM Parser, и я только что нашел это:

http://simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak

Я думаю, что я должен очистить память, иначе он потерпит крах. Тестирование сейчас.

Update4

Да, это была утечка памяти! 🙂

Apache рушился из-за утечки памяти, которая была вызвана не закрытием ресурса, который использовался снова и снова в цикле for, а также скрипт, использующий рекурсию.

Спасибо всем за помощь.

Я столкнулся с этим сегодня, анализируя тонну HTML в цикле. Вот простое исправление:

 $dom = file_get_html("http://www.x.com/$i"); ... // parse your DOM $dom->clear() // clear before next iteration 

Просто вызывая метод clear () для объекта dom, когда я был сделан на каждой итерации, он очистил его для меня.

Немного поздно для вечеринки, но я столкнулся с той же проблемой с ошибкой сегментации при использовании Simple HTML DOM. Я уверен, что использую $ html-> clear (); и unset ($ html); чтобы очистить HTML-код, который я загрузил, но я все еще получал ошибку с ошибкой сегментации во время большой царапины данных.

Я обнаружил, что мне нужно прокомментировать какой-то ясный код в файле simple_html_dom.php. Найдите функцию clear () в классе simple_html_dom_node и закомментируйте все внутри;

  function clear() { // These were causing a segmentation fault... // $this->dom = null; // $this->nodes = null; // $this->parent = null; // $this->children = null; } 

Я столкнулся с такими проблемами, как PHP с Apache в Windows. Вместо того, чтобы сообщать какую-либо полезную информацию на экран, процесс просто умирает. Если это вообще возможно, я бы предложил запустить ваш код в linux box с Apache и PHP. По моему опыту, эта комбинация будет сообщать об этом как об ошибке памяти, тогда как в Windows ничего не происходит вообще. Я видел это только с рекурсией.

Вы не используете рекурсию? Я видел ошибку PHP и убил дочерний Apache без какого-либо полезного вывода журнала, когда происходит бесконечная рекурсия.