Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php CLI命令的长字符串(18Kb)响应-导致exec()返回空字符串_Php_Exec - Fatal编程技术网

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

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

这个问题让我头疼死了。看起来很简单,但我不明白为什么它不起作用。我有一个小的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($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结尾的字符串