我试图通过try catch块忽略PHP错误,但它似乎没有起作用?我在Laravel的控制器里面使用它。
try {
if (!self::isEmulatorOnline()) {
return;
}
$MUSdata = $command . chr(1) . $data;
$socket = \socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp'));
$connect_timeval = array(
"sec"=>0,
"usec" => 100
);
\socket_set_option(
$socket,
SOL_SOCKET,
SO_SNDTIMEO,
$connect_timeval
);
\socket_connect($socket, Config::get('frontend.client_host_ip'), Config::get('frontend.mus_host_port'));
\socket_send($socket, $MUSdata, strlen($MUSdata), MSG_DONTROUTE);
\socket_close($socket);
}
catch(\PHPException $exception) {}
正如您所看到的,我正在尝试静默错误异常,我知道建议不要通过ajax请求来处理,如果客户端IP和端口不能使用不同的方法进行访问。
有没有人知道为什么它会在使用try catch使其无声时返回错误异常?
我得到的错误是
1/1) ErrorException
socket_connect(): unable to connect [10061]: No connection could be made because the target machine actively refused it.
在这一行:
\socket_connect($socket, Config::get('frontend.client_host_ip'), Config::get('frontend.mus_host_port'));
答案 0 :(得分:4)
你正试图抓住错误的例外。 socket_connect()
会引发ErrorException
而非PHPException
。您也可以只指定Exception
课程来抓住所有 unhandled exceptions。
如果要捕获多个异常类以便以不同方式处理它们,也可以添加多个catch块。
示例:
try {
//
} catch (ErrorException $ex) {
// here you go.
}
答案 1 :(得分:0)
在laravel中,您可以捕获这样的错误。 尝试记录此
try {
//
} catch (\Exception $e) {
// catch error message
Log::info($e->getMessage());
// get http error code
Log::info($e->getCode());
}