2017-08-01 89 views
1

我试图通过try catch块来忽略PHP错误,但它似乎并没有工作?我在Laravel的控制器中使用它。在Laravel控制器中无法捕获socket_connect的PHPException

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

'赶上(\ $例外前){...}'可以用来捕捉任何Laravel的异常,也可以添加多个'赶上()'块,如果你需要的具体行动对于特定的例外。 –

回答

3

你试图赶上了错误的异常。 socket_connect()将抛出ErrorException而不是PHPException。您也可以指定Exception类以捕获全部unhandled exceptions

如果您想捕获多个异常类来处理它们,您也可以添加多个catch块。

例子:

try { 
    // 
} catch (ErrorException $ex) { 
    // here you go. 
} 
+0

谢谢,我认为PHPException是所有其他异常的父项,但显然我错了,谢谢。 – distributi0n

0

在laravel你可以捕捉错误是这样的。 尝试登录该

try { 
// 
} catch (\Exception $e) { 
// catch error message 
Log::info($e->getMessage()); 

// get http error code 
Log::info($e->getCode()); 
}