如何获取函数stream_get_line和fgets的错误?

4
我有一份代码,在其中打开了一个socket连接。偶尔会出现fgets返回false的情况。我想知道为什么会发生这种情况。是否有一个函数可以提供关于$handle的最后错误的更多细节,类似于preg_last_errorjson_last_error之类的函数?
同样的问题也适用于stream_get_line()函数。
我使用的是PHP 5.4,并且E_ALL在error_reporting中(即它包括E_NOTICE)。但是没有抛出任何错误。

1
PHP本地流API内部仍未解决此问题,这太荒谬了。无论语言和目的如何,错误处理都是任何框架最重要的要求之一。 - JSON
2个回答

1

注意,这是未经测试的代码。我没有安装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现在应该在发生错误时调用错误处理程序。

很抱歉我目前无法测试此功能...


1
根据这个错误,解决方案行不通。我已经尝试过了,没有任何通知被触发。 - DrDol

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接