我正在尝试连接到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错误?
答案 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();
}
它正在运行,但我想应该有更好的解决方案。