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


browser form must launch PHP script that disconnects and runs in background

我有一个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,也不太会读大部头的书,但我通常可以通过一些适当的提示绕过大多数障碍。谢谢…

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

如果你想在exec()函数中使用$_GET参数运行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"');