如何处理PHP中的fsockopen错误?

时间:2016-10-17 21:32:56

标签: php error-handling cron

try {
    $fp = fsockopen($site, $port, $errno, $errstr, 2);
}
catch(Exception $ex) {
    echo 'error';
}

为什么catch无效,而我看到fsockopen

的警告

Warning: fsockopen(): php_network_getaddresses: getaddrinfo failed: No such host is known.

Warning: fsockopen(): unable to connect to www.myrandsitedf.net:80 (php_network_getaddresses: getaddrinfo failed: No such host is known. )

我知道我可以使用@来抑制错误/警告消息,但我认为这不是处理错误的正确方法。

我宿主的Cronjob也不允许PHP文件中有错误,@无法解决。

2 个答案:

答案 0 :(得分:1)

您必须区分exceptionserrors。 如果您希望将错误(警告等)转换为异常,以便可以捕获它们,您应该注册一个将错误转换为异常的error_handler

function error_handler($errno, $errstr, $errfile, $errline)
{
    if( ($errno & error_reporting()) > 0 )
        throw new ErrorException($errstr, 500, $errno, $errfile, $errline);
    else
        return false;
}
set_error_handler('error_handler');

答案 1 :(得分:0)

做到这一点的简单而正确的方法

noexcept