Я выполняю версию 5.3.0 PHP и 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 не жаловался на это так, я думаю что-то еще?
Спасибо все
Эта ошибка была зарегистрирована моей машиной окон в конечном счете средство просмотра:
Дающее сбой приложение httpd.exe, версия 2.2.11.0, метка времени 0x493f5d44, дающий сбой модуль php5ts.dll, версия 5.3.0.0, метка времени 0x4a4922e7, код исключения 0xc0000005, отказ сместил 0x00083655, обрабатывает идентификатор 0x1588, время начала приложения 0x01ca8b46e4925f90.
Рассматриваемый сценарий. Я удалил URL.
';
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.'
';
echo '------------>'.$i;
}
}
fclose($FileHandle);
echo 'End
';
?>
Я использую Простой HTML PHP Синтаксический анализатор DOM, и я только что нашел это:
http://simplehtmldom.sourceforge.net/manual_faq.htm#memory_leak
Я думаю, что должен очищать память иначе, она откажет. Тестирование теперь.
Да, это была утечка памяти!:)
Apache аварийно завершал работу из-за утечки памяти, которая была вызвана не закрытием ресурса, который использовался снова и снова в цикле, а также скриптом, использующим рекурсию.
Спасибо всем за помощь.
Я столкнулся с подобными проблемами при использовании PHP с Apache на Windows. Вместо того, чтобы сообщать какую-либо полезную информацию на экран, процесс просто умирает. Если это вообще возможно, я бы предложил запустить ваш код на linux-боксе с Apache & PHP. По моему опыту, эта комбинация, как правило, сообщает об этом как об ошибке памяти, в то время как на Windows, кажется, ничего не происходит вообще. Кстати, я видел это только при рекурсии
.Вы не используете рекурсию? Я видел ошибку PHP и убивал потомок Apache без какого-либо полезного вывода журнала, когда происходит бесконечная рекурсия.