当前位置:   article > 正文

php如何实现流输出,php – 在流中读取实时整个输出

php接口文字流并实时输出

注意:这篇文章与这个

post有区别,其接受的答案只是一次读取每一行.

我必须在服务器端切割用于3D打印的3D模型,这个过程将耗费一些时间.所以我必须为用户显示进程,我使用redis来存储进程.我想每0.5秒刷新一次这个过程.

例如,睡眠0.5秒,读取点中的所有内容并每次处理它.

现在我尝试了以下两个,第一个将持续到完成.第二次使用虽然不是一种正确的方法,但它会不断写入redis会导致客户端读取进程请求保持到最后.

我试过这两个:

第一个将持续到命令完成.

$descriptorspec = array(

0 => array("pipe", "r"),

1 => array("pipe", "w"),

2 => array("pipe", "w") //here curaengine log all the info into stderror

);

$command = './CuraEngine slice -p -j ' . $fdmprinterpath . ' -j ' . $configpath . ' -o ' . $gcodepath . ' -l ' . $tempstlpath;

$cwd = '/usr/local/curaengine';

$process = proc_open($command, $descriptorspec, $pipes, $cwd);

if(is_resource($process))

{

print stream_get_contents($pipes[1]); //This will hold until the command finished.

}

而第二个实现为这个post将每次一行.

$descriptorspec = array(

0 => array("pipe", "r"),

1 => array("pipe", "w"),

2 => array("pipe", "w") //here curaengine log all the info into stderror

);

$command = './CuraEngine slice -p -j ' . $fdmprinterpath . ' -j ' . $configpath . ' -o ' . $gcodepath . ' -l ' . $tempstlpath;

$cwd = '/usr/local/curaengine';

$process = proc_open($command, $descriptorspec, $pipes, $cwd);

if(is_resource($process))

{

while ($s = fgets($pipes[1])) {

print $s;

flush();

}

}

最佳答案 使用fread()替换fgets().

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/825198?site
推荐阅读
相关标签
  

闽ICP备14008679号