Как проверить, чист ли выход в функции выключения в PHP?

Как я могу проверить, чист ли выход в функции завершения работы в PHP?

Под чистым выходом я подразумеваю, что скрипт не был прерван из-за ошибки.

4 ответа

Решение

Хороший вопрос, на данный момент у меня есть только одна идея: зарегистрировать функцию отключения следующим образом:

function shutdown() {
    if (defined('END_REACHED') {
        echo 'Script executed with no error', PHP_EOL;
    }
}

register_shutdown_function('shutdown');

С auto_append_file добавьте дополнительный файл в самый конец каждого выполнения скрипта, который устанавливает константу.

Ваш контент auto_append_file.php:

define('END_REACHED', TRUE);

Если вы не хотите редактировать php.ini, вы можете проверить error_get_last() или же $php_errormsg в вашем реестре отключение функции!

Вызов error_get_last() can tell you if or which error occurred. Если функция возвращает NULL, it is a clean shutdown.

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

Большой вопрос, конечно, что вы хотите делать с этой информацией в функции выключения?

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

Я портировал (для PHP 5.3) компонент ezcExecution, который прекрасно справляется с этим. Смотрите https://github.com/sobstel/Execution. По сути, вам нужно сообщить lib, что выход был чистым (вызывая Execution::cleanExit(). В противном случае это означает, что выход не был чистым. Просто так.

Другие вопросы по тегам