Вы знаете любое решение восстановиться с фатальной ошибки PHP: "Позволенная емкость памяти... исчерпывается"
У меня есть функция завершения работы, которая вызвана, когда фатальная ошибка появляется. Эта функция создает ErrorException из него, и регистрирует его.
Проблема: когда больше нет доступной памяти, она не может зарегистрировать ошибку (я вхожу в систему Firebug, через FirePHP, с Платформой Зенда).
Таким образом, то, под чем я подразумеваю, "как восстановиться с него", то, как выполнить основной журнал ошибок и позволить Платформе Зенда отправить Заголовки, так, чтобы ошибка была зарегистрирована (в Firebug в моем случае) как какая-либо другая ошибка?
Спасибо
Эта ошибка является фатальной - это означает, что вы не можете исправить ее. Если PHP достиг предела памяти, он не сможет выделить больше памяти для создания вашего исключения и любой другой памяти, необходимой для его выполнения.
Существует еще один тип ошибок - «фиксируемая фатальная ошибка», которая, как следует из названия, может быть обнаружена с помощью команды try / catch, но, к сожалению, выделение размера памяти не входит в их число.
регулярный способ настроить обработку ошибок до
, set_error_handler
- Устанавливает определенную пользователями ошибочную функцию укладчика
доктора для этого состояния функции ( шахта акцента ):
следующие ошибочные типы не могут быть обработаны с определенной функцией пользователя: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING и большинство E_STRICT подняли в файле, где set_error_handler () называют.
Так, это не будет регулярно работать, но вы можете попробовать
, register_shutdown_function
С PHP7, Ошибок и Исключений - Throwables, таким образом, вы можете пробовать/ловить их:
Мне кажется, проблема не в том, что вы используете Waterfall, а не Agile. Это то, что ваша реализация водопада имеет большие проблемы. Наиболее очевидно:
Требование собирает тех, кто не знает Бизнес
Водопад может и работает хорошо, если делается правильно. Я думаю, что это звучит как некоторые из вовлеченных людей и то, как они делают вещи неправильно, а не концептуальный процесс.
-121--3320575-о человек, просто установите ресхарпер!! (vs плагин) с ним установлен вы просто перейти и Ctrl + щелкните, чтобы перейти к определению.
это не единственное, что делает ресхарпер, пробовать это бесплатно!!!
-121--716077- Ошибки PHP по умолчанию отправляются в ваш журнал ошибок apache /path/to/apache/logs/error.log
, и вы можете увидеть его там.
Я могу вспомнить, что когда вы выполняете операцию с интенсивным использованием памяти, вы вручную запрашиваете memory_get_usage ()
на обычном основы (например, каждую итерацию цикла) и выгружать ваши заголовки / ошибки, когда они превышают какое-то отказоустойчивое значение, которое ниже предела скрипта. Это сильно замедлит ваш скрипт, но, по крайней мере, вы что-то получите обратно.
Или, если вы не сможете этого сделать, запустите материал, интенсивно использующий память, как сценарий на основе интерфейса командной строки, вызываемый изнутри вашего веб-материала с помощью exec. Часть CLI может упасть, но веб-часть сможет сообщить об этом.
У меня есть идея для непроверенного трюка, и я буду рад узнать, поможет ли это. Выделите некоторую глобальную переменную при первой регистрации функции выключения и отпустите ее при первом выполнении кода функции выключения. Тогда у вас может быть достаточно памяти для создания объекта Exception. Сообщите мне, сработало ли это, и опубликуйте код здесь.