Сбой Apache - PHP - PullRequest
       9

Сбой Apache - PHP

1 голос
/ 05 августа 2010

ОБНОВЛЕННАЯ ИНФОРМАЦИЯ:

ОС Windows 7 32bit Apache 2.2.15 PHP 5.2.13


Это действительно странно. Когда я получил этот URI в моем приложении:

/view/course/teid/1/cid/-1/pos/30

Apache падает.

Когда я перехожу к очень похожему URI - как этот:

/view/course/teid/1/cid/-1/pos/29

Все отлично работает.

Это из журнала ошибок:

[Thu Aug 05 11:22:14 2010] [notice] Parent: child process exited with status 255 -- Restarting.

Мне удалось отследить линию, которая вызывает сбой Apache:

if (true === $aCourseTree->SetNodePassed($node)) { // this line crashes Apache
    self::writeTreeToDb($aCourseTree, $training, $this->aUtils);
}

Метод здесь:

public function SetNodePassed(CourseTreeNode $theNode)
{
    $aWasChange = !isset($theNode->Passed) || $theNode->Passed !== true;
    $theNode->Passed = true;

    if ($aWasChange && isset($theNode->Parent)) {
        if (true === $this->AreChildrenPassed($theNode->Parent)) {
            $this->SetNodePassed($theNode->Parent);
        }
    }
    return $aWasChange;
}

Что, черт возьми, происходит? Если есть какая-то ошибка, это должна быть просто ошибка PHP. Почему Apache падает?

Ответы [ 2 ]

1 голос
/ 05 августа 2010

Как у вас работает PHP в вашем Apache?

mod_php может легко уничтожить рабочий процесс Apache [1], и правильный путь действий для сервера Apache в целом - попытаться вернуться в максимально «чистое» состояние. Процесс почти невозможно очистить после повреждения памяти, но перезапуск очень безопасен и прост. [2] Это долгий путь к возвращению системы в заведомо исправное состояние.

Возможно, вы захотите переключиться на реализацию FastCGI вместо mod_php; если вам нужно больше причин, вот очень хорошо написанный набор причин:

http://www.majordojo.com/2007/11/is-mod-php-falling-out-of-favor-with-hosting-providers.php

[1] Команда PHP попросила группы безопасности дистрибутива Linux прекратить называть ошибки сбоя php-интерпретатора «проблемами безопасности» - они исправляли такие ошибки так часто, что возникали ошибки удаленного использования в php и его библиотеках. утонул в шуме.

[2] Конечно, для повторного выполнения необходимо будет вызвать одну из exec() функций в памяти, которая может быть повреждена, но, надеюсь, единственной поврежденной памятью в главном процессе Apache будет табло , Поэтому повторное выполнение должно быть достаточно безопасным.

0 голосов
/ 25 октября 2013

Попробуйте включить это в начало вашего php-скрипта и посмотрите, какую ошибку вы получаете

ini_set('error_reporting', E_ALL);
...