代码之家  ›  专栏  ›  技术社区  ›  Robert Lewis

php exec命令防止echo工作

  •  1
  • Robert Lewis  · 技术社区  · 7 年前

    在本代码中:

    session_write_close();
    echo "reload";
    flush();
    //    exec("/etc/init.d/streaminit stop");
    //    sleep(2);
    //    session_write_close();
    //    exec("/etc/init.d/streaminit start");
    //    //all we have to do is copy currentView into nextView to trigger a page reload
    //    sleep(2);
    

    “reload”的回声可以工作,但如果下面的行未注释,则不会回声。我尝试过很多这样的排列,结论是 exec 命令正在阻止 echo 从工作中。 我发现一些关于 执行程序 导致Apache2出现问题,一个人说 session_write_close() 可能会阻止问题的发生。显然,在这种情况下,没有。有已知的修复方法吗?我做错什么了吗?

    ( streaminit 是一个shell脚本,用于启动和停止 mjpeg_streamer . shell命令是异步的(使用 & 最后)

    1 回复  |  直到 7 年前
        1
  •  2
  •   Robert Lewis    7 年前

    我终于在PHP文档中找到了这个 exec :“如果程序是用这个函数启动的,为了让它继续运行 在背景中 (我的重点),程序的输出必须重定向到一个文件或另一个输出流。如果不这样做,将导致PHP挂起,直到程序执行结束。

    exec("/etc/init.d/streaminit stop > /dev/null 2>&1 &”);
    

    对于那些不熟悉的人(像我直到一分钟前),这会重定向 stdout 设备到 /dev/null 2>&1 意味着“发送” stderr 输出到与相同的位置 标准输出 . 最后, & 表示“在后台运行此命令”。作品!

    推荐文章