我使用下面的脚本连接到外部 PBX 服务器并获取通话记录。
然而,它一次只返回 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句