2017-08-01 11 views
1

内socket_connectでPHPExceptionをキャッチすることができません。私は、try catchブロックを経由してPHPのエラーを無視しようとしているが、それは動作していないようですか?私はLaravelのコントローラの中でそれを使用しています。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) {} 

あなたは私がサイレントエラー例外にしようとしています見ることができるように、クライアントのIPとポートが異なるを使用してアクセスすることができないならば、私はそれがないように助言されて知っているが、その私が扱うAJAXリクエストを介しました方法。トライキャッチを使用してからそれがサイレント作るときにもエラー例外を返す理由

は誰でも知っていますか?

私は取得していますエラーは、この行で

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をスローします。また、すべてのunhandled exceptionsをキャッチするだけExceptionクラスを指定することができます。

あなたが異なっそれらを処理するために、複数の例外クラスをキャッチしたい場合は、複数のcatchブロックを追加することができます。

例:laravelで

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

ありがとう、私はPHPExceptionが他のすべての例外の親であると思ったが、明らかに間違っていた、ありがとう。 – distributi0n

0

あなたは、このようなエラーをキャッチすることができます。 この

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

// get http error code 
Log::info($e->getCode()); 
} 
関連する問題