CLI命令的长字符串(18Kb)响应 - 导致exec()返回空字符串

时间:2014-06-30 19:12:41

标签: php exec

我对此问题感到头疼。看似简单的事情 - 但我无法弄清楚它为什么不起作用。我有一个小的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个字符不多...

2 个答案:

答案 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之前压缩数据。