无法在Laravel控制器

时间:2017-08-01 18:45:09

标签: php laravel

我试图通过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'));

2 个答案:

答案 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());
}