抑制PHP错误&警告使用@不使用set_error_handler

时间:2018-01-29 23:20:50

标签: php sockets

我正在尝试连接到TCP服务器,当服务器正常工作时我应该变为现实,当它出现时,我应该会变错。

但那是我得到的而不是假的:

    Error: [2], fsockopen(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /website/classes/Main.php on line 2874 

我的代码:

public function checkInternetConnection(){

        $connected = @fsockopen("www.gossssogle.com", 80);

        if (!$connected){
          return false;
        }else{
            fclose($connected);
            return true;
        }
        return $is_conn;

}

问题我猜我在使用set_error_handler所以@在函数名称之前不能正常工作

set_error_handler('customError');

错误处理程序功能

    function  customError($errno, $errstr, $errfile, $errline, $errcontext){
    $error_number = rand(1111 , 99999999);
    $message = "Error Number:" . $error_number . "\r\n";
    $message .= date("Y-m-d H:i:s")."\r\n";
    $message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline \r\n, ";
    $message .= "Variables:" . print_r($errcontext, true) . "\r\n";



    error_log($message, 3, log_file);

   throw new internalError();
}

问: 如何检查连接状态而不是PHP错误?

1 个答案:

答案 0 :(得分:0)

我所做的是,如果套接字出现错误,则忽略抛出异常。

function  customError($errno, $errstr, $errfile, $errline, $errcontext){
    $error_number = rand(1111 , 99999999);
    $message = "Error Number:" . $error_number . "\r\n";
    $message .= date("Y-m-d H:i:s")."\r\n";
    $message .= "Error: [" . $errno ."], " . "$errstr in $errfile on line $errline \r\n, ";
    $message .= "Variables:" . print_r($errcontext, true) . "\r\n";

    if (!stristr($message, 'stream_socket_client')) 
    error_log($message, 3, log_file);
    else return false;

   throw new internalError();
}

它正在运行,但我想应该有更好的解决方案。