如何获取函数 stream_get_line 和 fget 的错误


How to obtain error for functions stream_get_line and fgets?

我有一个代码,我可以打开一个套接字连接。有时,fgets 会返回 false。我想知道为什么会发生这种情况。是否有一个函数可以提供有关$handle上最后一个错误的更多详细信息?像preg_last_errorjson_last_error、...

同样的问题可以应用于函数 stream_get_line()。

我使用 PHP 5.4 并且E_ALL是 error_reporting(即它甚至包括 E_NOTICE )。未引发任何错误。

注意这是

未经测试的代码。我还没有安装PHP来尝试它。

您应该能够使用在设置连接时创建的上下文来执行此操作。

$context = stream_context_create();
stream_context_set_params(
    $context, 
    array(
        'notification' => function(
            $notification_code,
            $severity,
            $message,
            $message_code
        ) {
            switch ($notification_code) {
            case: STREAM_NOTIFY_FAILURE
                print_r(array(
                    'message' => $message,
                    'message_code' => $message_code,
                ));
                break;
            }
        },
    )
);
$socket = stream_socket_client ($remote_socket, &$errno, &$errstr, ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);

现在,每当发生错误时,fgets都应调用错误处理程序。

很抱歉我目前无法对此进行测试...

可以使用 stream_get_meta_data() 检索有关流的详细信息。但是,我通过重写代码以使用 socket_* 函数解决了这个问题。API提供了socket_last_error功能,这有很大帮助。