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
我使用下面的脚本连接到外部 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