Глобальная обработка ошибок file_get_contents() PHP

#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);}

?>