PHP socket_read() 仅 returns 1 个字符串

PHP socket_read() only returns 1 string

我使用下面的脚本连接到外部 PBX 服务器并获取通话记录。

然而它一次只 returns 1 刺,相当于 1 根原木。所以我需要刷新多次才能得到所有可用的日志。

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die();
$result = socket_connect($socket, $address, $port) or die();

$out = socket_read($socket, 2048);

如何获得所有可用的字符串而不必一直重新启动连接?

您的意思可能是循环读取套接字? 根据文档 (http://php.net/socket_read) 你可以做类似的事情 while ($portion = socket_read($socket, 2048)) { do_something_with_that_portion_of_log; } 如果数据耗尽你得到空字符串或者如果发生错误则得到 FALSE。

最终解决方案

我们使用 socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec'=> 10, 'usec'=> 0)); 默认的非阻塞模式。在读取所有日志后,程序将等待 ~10 秒并完成。

https://gist.github.com/mihalicyn/533273e0d8b23de33aaf7f2cf0973d88