【问题标题】:php5 make a system call in the backgroundphp5在后台进行系统调用
【发布时间】:2016-01-13 23:11:59
【问题描述】:

我正在尝试从 Linux 下的 php5 脚本创建一个 tarball,但我并不关心输出;到目前为止我立即找到的方法就是简单地

system("tar czf tarball.tgz directory/path &");

但是我想后台处理这个过程

检查 system() documentation 它提到必须将输出重定向到文件

然而

system("tar czf tarball.tgz directory/path > /dev/null 2>&1");

没有帮助。 system() 函数不接受文件描述符......我错过了什么?

用这些测试:

脚本test.php

<pre><?php

exec("bash dodate 2>&1 /dev/null &");
system("echo done at \$(date)");

?></pre>

脚本./dodate

sleep 5
date

我转到我的浏览器并调用/刷新页面;确实需要 5 秒,然后打印/更新“完成”消息。

谢谢

【问题讨论】:

  • 第一个 sn-p 结束时的 &amp; 应该让它在后台运行 - 不是吗?您需要将输出/结果报告给您的 PHP 程序,还是可以在不知情的情况下继续执行?
  • 如果您不关心输出,exec() 可能是您更好的选择:php.net/manual/en/function.exec.php
  • 唉,& 符号没有后台处理...具体来说,我通过创建一个包含 sleep 5 ; date 内容的脚本“dodate”然后调用 system("bash dodate &amp;") 来测试它,但它会等待然后打印输出……!与 exec 效果相同

标签: php system


【解决方案1】:

您在 php.ini 中“没有”线程。您可以做的一个技巧是向另一个执行您想要的操作的 php 发出 curl 请求。你需要确保你的 curl 很快就会超时,并且当 curl 超时关闭到它的 http 连接时,另一个 php 不会死。

您也可以在此处阅读有关该主题的信息:cURL Multi Threading with PHPcURL Multi Threading?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-12
    • 2014-01-14
    • 2016-08-30
    • 2018-11-06
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多