PHP中出现fsockopen错误时怎么办?

vom3gejh  于 2023-10-15  发布在  PHP
关注(0)|答案(3)|浏览(339)
try {
    $fp = fsockopen($site, $port, $errno, $errstr, 2);
}
catch(Exception $ex) {
    echo 'error';
}

为什么catch不工作,而我看到fsockopen给出了警告
注意:fsockopen():php_network_getaddresses:getaddrinfo失败:没有这样的主机是已知的。

注意:fsockopen():无法连接到www.myrandsitedf.net:80(php_network_getaddresses:getaddrinfo失败:没有这样的主机是已知的。)我知道我可以使用@来抑制错误/警告消息,但我不认为这是处理错误的正确方法。 此外,我的主机上的Cronjob不允许PHP文件中有错误,@`不能解决这个问题。

5ssjco0h

5ssjco0h1#

你必须区分exceptionserrors。如果你想将错误(警告等)转换为异常,这样它们就可以在catch中被捕获,你应该注册一个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');
2admgd59

2admgd592#

您必须使用具有全局命名空间的异常。
试试这个代码:

try {
    $fp = fsockopen($site, $port, $errno, $errstr, 2);
}
catch(\Exception $ex) { //used back-slash for global namespace
    echo 'error';
}

这将在PHP 5.3或更高版本中工作。
谢谢.

iyr7buue

iyr7buue3#

简单而正确的方法是

try {
    $fp = @fsockopen($ip, $port, $errno, $errstr, 5);
    @fclose($fp);
    return true;
} catch (\Exception $th) {
    // return "error";
    return $th;
}

相关问题