Как проверить, чист ли выход в функции выключения в PHP? - PullRequest
4 голосов
/ 30 августа 2011

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

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

Ответы [ 4 ]

6 голосов
/ 30 августа 2011

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

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 в вашей функции отключения регистра!

1 голос
/ 05 ноября 2013

Звонок на error_get_last() может сказать вам, если или какая ошибка произошла. Если функция возвращает NULL, это чистое отключение.

0 голосов
/ 16 ноября 2011

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

0 голосов
/ 30 августа 2011

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

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

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

...