Как восстановиться с фатальной ошибки, “Позволенной исчерпанную емкость памяти”

Вы знаете любое решение восстановиться с фатальной ошибки PHP: "Позволенная емкость памяти... исчерпывается"

У меня есть функция завершения работы, которая вызвана, когда фатальная ошибка появляется. Эта функция создает ErrorException из него, и регистрирует его.

Проблема: когда больше нет доступной памяти, она не может зарегистрировать ошибку (я вхожу в систему Firebug, через FirePHP, с Платформой Зенда).

Таким образом, то, под чем я подразумеваю, "как восстановиться с него", то, как выполнить основной журнал ошибок и позволить Платформе Зенда отправить Заголовки, так, чтобы ошибка была зарегистрирована (в Firebug в моем случае) как какая-либо другая ошибка?

Спасибо

12
задан Matthieu Napoli 23 February 2010 в 14:32
поделиться

5 ответов

Эта ошибка является фатальной - это означает, что вы не можете исправить ее. Если PHP достиг предела памяти, он не сможет выделить больше памяти для создания вашего исключения и любой другой памяти, необходимой для его выполнения.

Существует еще один тип ошибок - «фиксируемая фатальная ошибка», которая, как следует из названия, может быть обнаружена с помощью команды try / catch, но, к сожалению, выделение размера памяти не входит в их число.

9
ответ дан 2 December 2019 в 05:27
поделиться

регулярный способ настроить обработку ошибок до

, set_error_handler - Устанавливает определенную пользователями ошибочную функцию укладчика

доктора для этого состояния функции ( шахта акцента ):

следующие ошибочные типы не могут быть обработаны с определенной функцией пользователя: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT подняли в файле, где set_error_handler () называют.

Так, это не будет регулярно работать, но вы можете попробовать

С PHP7, Ошибок и Исключений - Throwables, таким образом, вы можете пробовать/ловить их:

5
ответ дан 2 December 2019 в 05:27
поделиться

Мне кажется, проблема не в том, что вы используете Waterfall, а не Agile. Это то, что ваша реализация водопада имеет большие проблемы. Наиболее очевидно:

Требование собирает тех, кто не знает Бизнес

Водопад может и работает хорошо, если делается правильно. Я думаю, что это звучит как некоторые из вовлеченных людей и то, как они делают вещи неправильно, а не концептуальный процесс.

-121--3320575-

о человек, просто установите ресхарпер!! (vs плагин) с ним установлен вы просто перейти и Ctrl + щелкните, чтобы перейти к определению.

это не единственное, что делает ресхарпер, пробовать это бесплатно!!!

-121--716077-

Ошибки PHP по умолчанию отправляются в ваш журнал ошибок apache /path/to/apache/logs/error.log , и вы можете увидеть его там.

2
ответ дан 2 December 2019 в 05:27
поделиться

Я могу вспомнить, что когда вы выполняете операцию с интенсивным использованием памяти, вы вручную запрашиваете memory_get_usage () на обычном основы (например, каждую итерацию цикла) и выгружать ваши заголовки / ошибки, когда они превышают какое-то отказоустойчивое значение, которое ниже предела скрипта. Это сильно замедлит ваш скрипт, но, по крайней мере, вы что-то получите обратно.

Или, если вы не сможете этого сделать, запустите материал, интенсивно использующий память, как сценарий на основе интерфейса командной строки, вызываемый изнутри вашего веб-материала с помощью exec. Часть CLI может упасть, но веб-часть сможет сообщить об этом.

1
ответ дан 2 December 2019 в 05:27
поделиться

У меня есть идея для непроверенного трюка, и я буду рад узнать, поможет ли это. Выделите некоторую глобальную переменную при первой регистрации функции выключения и отпустите ее при первом выполнении кода функции выключения. Тогда у вас может быть достаточно памяти для создания объекта Exception. Сообщите мне, сработало ли это, и опубликуйте код здесь.

2
ответ дан 2 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: