【问题标题】:Running process in background with PHP using exec? [duplicate]使用exec在PHP后台运行进程? [复制]
【发布时间】:2011-12-14 01:25:55
【问题描述】:

可能重复:
php in background exec() function

在网站上运行某个脚本后,我想在后台进行一些处理,这可能需要很长时间才能在页面请求上运行。 我听说您可以通过使用 exec() 方法运行 PHP 脚本来做到这一点。 如果这是一个好方法,我如何使用 exec() 方法将查询字符串传递给 PHP 脚本?

编辑: 这不是重复的,因为您所指的帖子不涉及我关于查询字符串/参数传递的问题。

【问题讨论】:

  • “查询字符串”是什么意思——在命令行上使用 PHP 时,而不是通过 apache,没有 _GET 数组。您处理 $args 命令行参数数组。这些在脚本名称本身之后的命令行上传递,用空格分隔。
  • 好的,谢谢。很抱歉,我从来没有在命令行上运行过 PHP。

标签: php


【解决方案1】:

如果您想使用 PHP 在后台运行 PHP 脚本,那么您可以执行以下操作:

$command = "php -d max_execution_time=50 -f myfile.php '".$param."' >/dev/null &";
exec($command);

$param 是您要传递到文件中的变量。

【讨论】:

  • 如果$param 是从用户提供的输入提供(或不正确地派生自)用户提供的输入,那么以这种方式使用exec() 可能会很危险。详情请见Wikipedia's notes on shell injection vulnerabilities
  • 是的,当然.. 我假设他自己设置了值,例如 $param = "idx"
  • 既然你小心使用max_execution_time,我认为你的代码会很好——但并不是每个阅读本文的人都知道这一点。 :)
  • 谢谢。我现在就试试这个。
【解决方案2】:

由于您的脚本在后台而不是终端中运行,请尝试ignore_user_abort( TRUE );执行流程一直持续到执行完成,而不是在选项卡或窗口或网络连接关闭时。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    相关资源
    最近更新 更多