doubinei1457 2011-09-28 22:42
浏览 56
已采纳

PHP管道进入后台进程

I'm trying to use popen to run a php script in the background. However, I need to pass a (fairly large) serialized object.

$cmd = "php background_test.php >log/output.log &";
$fh = popen($cmd, 'w');
fwrite($fh, $data); 
fclose($fh);
//pclose($fh);

Without the ampersand this code executes fine but the parent script will wait until the child is finished running. With the ampersand STDIN gets no data.

Any ideas?

  • 写回答

3条回答 默认 最新

  • dongqu9917 2011-09-28 22:53
    关注

    As far as I know there is no way in php to send a process in background and continue to feed its STDIN (but maybe I'm wrong). You have two other choices here:

    1. Refactor your background_test.php to get its input from command line and transform your command line in php background_test.php arg1 arg2 ... >log/output.log &
    2. If your input is pretty long, write it to a temporary file and then feed the background_test.php script with that file as in the following code

    Example for point 2:

    <?
    $tmp_file = tempnam();
    file_put_content($tmp_file, $data);
    $cmd = "php background_test.php < $tmp_name > log/output.log &";
    exec($cmd);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效