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条)

报告相同问题?

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大