#php #handler #file-get-contents
#php #обработчик #файл-получение-содержимого
Вопрос:
Я иногда получаю ошибки при использовании file_get_contents, и это довольно часто используется в моем скрипте. Я знаю, что могу подавлять ошибки по отдельности с помощью @file_get_contents
и что я могу устанавливать глобальные сообщения об ошибках с помощью
//error handler function
function customError($errno)
{
echo 'Oh No!';
}
//set error handler
set_error_handler("customError");
Но как мне конкретно настроить обработчик ошибок для всех применений file_get_content?
Спасибо
Ответ №1:
вы можете установить свой пользовательский error_handler перед вызовом file_get_contents, а затем использовать функцию restore_error_handler() сразу после file_get_contents. если в вашем коде используется несколько file_get_contents, вы можете обернуть file_get_contents некоторой пользовательской функцией.
Ответ №2:
@
на самом деле не подавляет ошибки, как вы обнаружили. Они по-прежнему отображаются в вашем пользовательском обработчике ошибок. И чтобы там игнорировались «подавленные» ошибки, вы должны сначала проверить текущую error_level
:
function customError($errno)
{
if ( !error_reporting() ) return;
echo 'Oh No!';
}
// That's what PHPs default error handler does too.
Просто догадываюсь. Если вы имели в виду что-то другое, пожалуйста, расширьте свой вопрос. (Вы не можете вызвать обработчик ошибок для каждого вызова file_get_contents, если не возникло никакой ошибки.)
Ответ №3:
или проверьте трассировку и обработайте ошибку, если функция refererer — file_get_contents
//error handler function
function customError($errno)
{
$a = debug_backtrace();
if($a[1]['function'] == 'file_get_contents')
{
echo 'Oh No!';
}
}
//set error handler
set_error_handler("customError");
Ответ №4:
ваша функция обработки ошибок должна быть более всеобъемлющей, чем эта. вы бы сделали что-то вроде:
<?php
function customError($errno,$errstr){
switch ($errno) {
case E_USER_ERROR:
echo "<b>ERROR</b> $errstr<br />n";
break;
case E_USER_WARNING:
echo "<b>WARNING</b> $errstr<br />n";
break;
case E_USER_NOTICE:
echo "<b>NOTICE</b> $errstr<br />n";
break;
default:
echo "Whoops there was an error in the code, check below for more infomation:<br/>n";
break;
}
return true;
}
set_error_handler("customError");
$filename = 'somemissingfile.txt';
$file = file_get_contents($filename);
//add the trigger_error after your file_get_contents
if($file===false){trigger_error('Could not get:'.$filename.' - on line 27<br/>',E_USER_ERROR);}
?>