我对此问题感到头疼。看似简单的事情 - 但我无法弄清楚它为什么不起作用。我有一个小的C ++守护进程监听127.0.0.1:3454请求并返回以分号分隔的单词列表。
我试图从PHP提供该守护程序请求 - 但我遇到的是 - 如果守护程序返回大字符串 - PHP获取0长度字符串而不是....我不知道#39;得到它......
// Doesn't work - empty string is returned...
$cmd = 'printf "ends a" | nc 127.0.0.1 3454';
exec($cmd, $out);
echo 'result is: ' . (empty($out) ? '' : $out[0]);
// Works - but why the should I use a file as an intermediary..?
$cmd = 'printf "ends a" | nc 127.0.0.1 3454 > /tmp/test.txt';
exec($cmd);
$res = file_get_contents('/tmp/test.txt');
echo 'result is: ' . $res;
此外 - 同样的命令:printf "ends a" | nc 127.0.0.1 3454
- 从CLI工作就好......
P.S。所以在上面的例子中,守护进程返回18645个字符 - > PHP得到空字符串。但是当它返回较短的响应时 - PHP得到它们就好了......?为什么? 18645个字符不多...
答案 0 :(得分:1)
您可以尝试更多面向I / O的功能,例如popen
$read="";
$handle = popen('printf "ends a" | nc 127.0.0.1 3454');
while (!feof($handle)) {
$read .= fread($handle, 1024);
}
echo $read;
pclose($handle);
修改强> 在阅读
上添加一个循环答案 1 :(得分:0)
尝试使用类似于exec(system,passthru,shell_exec)的函数之一,或在将数据返回给exec之前压缩数据。