【问题标题】:How can I run a PHP script in the background after pushing some data to it?向其推送一些数据后,如何在后台运行 PHP 脚本?
【发布时间】:2011-09-14 00:31:46
【问题描述】:

我有一个将图像上传到服务器的上传脚本。在图像上传并由move_uploaded_file() 移动后,我需要一个脚本在后台运行,但我需要将文件名和该文件的路径发送到脚本(几乎是发送一些数据)。

一些数据发送到 PHP 脚本后,如何在后台运行它?

注意:文件是通过 XMLHttpRequest 上传的。

【问题讨论】:

  • @Joseph Silber 有没有办法在不提前关闭连接的情况下做到这一点?
  • 我不明白。你想完成什么?
  • @Joseph Silber 一个脚本运行并启动了几个后台脚本进程。所以 script1.php script2.php 等将被执行,但我发送它的数据。我需要这个来绕过 PHP 的最大执行时间。

标签: php process background upload


【解决方案1】:

首先阅读本文

php exec command (or similar) to not wait for result

基本上是指出您需要创建一个带有两个参数的脚本( 文件名,路径)

那你需要使用exec函数

编辑:

正如 Brent Baisle 在下面的 cmets 中指出的那样,必须在脚本前面添加“nohup”才能独立执行(使用不同的父 pid)

exec('noup php scriptyoucreated.php '.$filename.' '.$path.' > /dev/null 2>&1 &');

这会将输出写入dev/null,此时php不应阻塞,我没有尝试过,但理论上。

【讨论】:

  • 我相信 exec() 确实会阻塞。你可以分叉你的进程:php.net/manual/en/function.pcntl-fork.php
  • exec() 只有在等待响应时才会阻塞。重定向输出使其解除阻塞。但是,您需要在正在运行的脚本前面包含“nohup”。否则脚本将在父进程结束时终止。你不想在 Apache 下分叉。
猜你喜欢
  • 1970-01-01
  • 2017-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
相关资源
最近更新 更多