Обработка ошибок выходного буфера
Давайте предположим, что простой фрагмент кода используется для создания шаблонов и использует управление выводом (ob)
public function capture($file, array $args = array())
{
extract($args, EXTR_SKIP);
ob_start();
require $file; //'foo.php'
return ob_get_clean();
}
И foo.php
с ошибкой (обрабатывается обработчиком ошибок и обработчиком завершения работы)
<?php
echo "before";
echo $someVariable; //$someVariable is undefined here
echo "after";
Вывод
before <- would like to avoid
some message from the error handler
Вопрос: можно ли избежать любого вывода из файла при ошибке?
Да,
-
Есть похожие вопросы, которые я читал/анализировал, но ни один из них не дал мне четкого ответа. ответьте, так это или нет.
Ошибки внутри выходного буфера
Как увидеть ошибку php во включенном файле при выводе буфера? (@marc-b - вероятно, это не так)
Я понимаю, что вы не должны хотеть обрабатывать такого рода ошибки в своем собственном коде, так как он должен быть чистым и проверенным, но все же вы можете получить некоторые, например, опечатку, неопределенную переменную и т. Д.
1 answers
Если вы используете обработчик завершения работы, а не обработчик ошибок, он может очистить вывод, потому что обработчик ошибок может очистить вывод только до него, поэтому все, что выводится после него, все равно будет отображаться.
<?php
function error_handler()
{
if(error_get_last()) {
ob_get_clean();
echo 'An error has occured.';
}
}
register_shutdown_function('error_handler');
function capture()
{
ob_start();
require 'foo.php';
return ob_get_clean();
}
echo capture();
// foo.php
<?php
echo 'before';
echo $variable;
echo 'after';
?>
Это приведет только к выводу "Произошла ошибка".
Однако, используя set_error_handler, он выведет "Произошла ошибка.после", если вы не добавите DIE() или что-то подобное обработчику ошибок.