PHP file_get_contents() 的全局错误处理

发布于 2024-11-07 21:19:11 字数 336 浏览 4 评论 0原文

我在使用 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 的用途设置错误处理程序?

谢谢

I am occasionally getting errors while using file_get_contents and its used a fair bit in my script. I know I can suppress errors individually with @file_get_contents and that I can set global error messages with

//error handler function
function customError($errno)
  {
  echo 'Oh No!';
  }

//set error handler
set_error_handler("customError");

But how do I specifically set an error handler for all file_get_content's uses?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

孤凫 2024-11-14 21:19:11

您可以在调用 file_get_contents 之前设置自定义 error_handler,然后在 file_get_contents 之后立即使用 Restore_error_handler() 函数。如果您的代码中多次使用 file_get_contents,您可以通过一些自定义函数包装 file_get_contents。

you may set your custom error_handler before invoking file_get_contents and then use restore_error_handler() function right after file_get_contents. if there is multiple usage of file_get_contents in your code, you may wrap file_get_contents by some custom function.

青瓷清茶倾城歌 2024-11-14 21:19:11

@ 并没有真正抑制您发现的错误。它们仍然显示在您的自定义错误处理程序中。要在那里忽略“抑制”错误,您必须首先探测当前的 error_level

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

   echo 'Oh No!';
}

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

只是猜测。如果您的意思有所不同,请扩展您的问题。 (如果没有发生任何错误,则不能为每个 file_get_contents 调用调用错误处理程序。)

@ does not really suppress the errors as you've discovered. They still show up in your custom error handler. And to have "suppressed" errors ignored there, you have to first probe for the current error_level:

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

   echo 'Oh No!';
}

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

Just guessing. If you meant something different, please extend your question. (You cannot have an error handler invoked for each file_get_contents call - if there didn't occur any error.)

筑梦 2024-11-14 21:19:11

或检查跟踪并处理错误(如果引用函数为 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");

or check the trace and handle error if referer function is 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");
风蛊 2024-11-14 21:19:11

您的错误处理函数需要更全面。
你会做类似的事情:

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

?>

your error handler function would need tobe more comprehensive then that.
you would do something like:

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

?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文