Php CLI命令的长字符串(18Kb)响应-导致exec()返回空字符串
这个问题让我头疼死了。看起来很简单,但我不明白为什么它不起作用。我有一个小的C++守护进程,在127.0.0.1:345请求下进行侦听,并返回分号分隔的单词列表。p> 我正试图从PHP向该守护进程发送请求——但我遇到的是——如果守护进程返回大字符串,则改为PHP get的0长度字符串。。。。我不明白Php CLI命令的长字符串(18Kb)响应-导致exec()返回空字符串,php,exec,Php,Exec,这个问题让我头疼死了。看起来很简单,但我不明白为什么它不起作用。我有一个小的C++守护进程,在127.0.0.1:345请求下进行侦听,并返回分号分隔的单词列表。p> 我正试图从PHP向该守护进程发送请求——但我遇到的是——如果守护进程返回大字符串,则改为PHP get的0长度字符串。。。。我不明白 // Doesn't work - empty string is returned... $cmd = 'printf "ends a" | nc 127.0.0.1 3454'; exec($c
// 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“结束一个”| nc127.0.0.1 3454
-可以从CLI正常工作
另外,在上面的示例中,守护进程返回18645个字符->PHPGET的空字符串。但是当它返回较短的响应时——PHP get就可以了。。。。?为什么?18645个字符不多…请尝试使用类似于exec的函数之一(system、passthru、shell_exec)或在将数据返回exec之前压缩数据 您可以尝试一种更面向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);
编辑:
在阅读时添加一个循环。是的…-成功了!现在-为什么他妈的不与exec合作?非常感谢。您的输出中是否有\n项?请参阅输出部分exec似乎需要“行”,即以\n、\r或\r\n结尾的字符串