浏览器表单必须启动断开连接并在后台运行的PHP脚本

时间:2013-06-21 05:03:38

标签: php command-line exec background-process

我有一个PHP例程,可以使用浏览器中的查询/ GET数据正确运行,我希望它在启动后与浏览器断开连接,以便它可以在后台运行。它将文件写入磁盘并通过电子邮件将链接发送给用户,因此不再需要浏览器。

浏览器启动的iframe路径如下所示

src="tool/scan.php?types=All&order=Newest&email=test@example.com"

我将使用中间人替换iframe目标,该中间人将所有内容传递到scan.php主力文件。

我理解exec()可以使用,但显然不明白如何格式化命令行,并且已经被我到目前为止找到的资源弄糊涂了。

我尝试传递$ _SERVER [“DOCUMENT_ROOT”]。路径/文件名。 $ _SERVER ['QUERY_STRING']通过逐字,但似乎不起作用(echo显示下面引号中的值):

exec("/var/www/vhosts/example.com/httpdocs/tool/scan.php?types=All&order=Newest&email=test@example.com");

那么我想知道命令行是否与浏览器参数不同并尝试了这一点,但那不是它

exec("/var/www/vhosts/example.com/httpdocs/tool/scan.php types=All order=Newest email=test@example.com");

如果有人可以提供指针,我只需要一个正确方向的提示再次滚动。我不太懂PHP,也不会读好书,但我通常可以通过一些有用的提示绕过大多数障碍。感谢...

1 个答案:

答案 0 :(得分:0)

您最好的选择可能是创建一个 Message Queue 。因此,接受表单发布的脚本将数据提交到消息队列。消息队列可以是MySQL数据库中的一个表,用于保存要处理的数据。然后你有一个每隔几分钟左右运行一次的cron服务,它会将所有消息从队列中拉出来并处理它们。

如果你想在带有$ _GET参数的exec()函数中运行PHP,你可以这样做:

exec('php-cgi -f /var/www/vhosts/example.com/httpdocs/tool/scan.php types=All order=Newest email=test@example.com');

或者这样:

exec('wget "http://example.com/tool/scan.php?types=All&order=Newest&email=test@example.com"');