Глобальная обработка ошибок file_get_contents () PHP - PullRequest
4 голосов
/ 17 мая 2011

Эй, ребята, так что я иногда получаю ошибки при использовании 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?

Спасибо

Ответы [ 4 ]

3 голосов
/ 17 мая 2011

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

2 голосов
/ 17 мая 2011

@ на самом деле не подавляет ошибки, как вы обнаружили. Они по-прежнему отображаются в вашем пользовательском обработчике ошибок . И чтобы "подавленные" ошибки там игнорировались, вы должны сначала проверить ток error_level:

function customError($errno)
{
   if ( !error_reporting() ) return;

   echo 'Oh No!';
}

// That's what PHPs default error handler does too.

Просто угадай. Если вы имели в виду что-то другое, пожалуйста, продлите свой вопрос. (Вы не можете вызывать обработчик ошибок для каждого file_get_contents - если не было ошибок.)

1 голос
/ 17 мая 2011

или проверьте трассировку и обработайте ошибку, если функция referer - 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");
0 голосов
/ 17 мая 2011

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

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

?>
...