0

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

浏览器启动的 iframe 路径是这样的

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

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

我知道exec()可以使用,但显然不明白如何格式化命令行,并且被我迄今为止找到的资源弄糊涂了。

我尝试只传递 $_SERVER["DOCUMENT_ROOT"]。路径/文件名。$_SERVER['QUERY_STRING'] 逐字逐句,但这似乎不起作用(回声显示下面引号中的值):

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,也没有很好地阅读书籍,但我通常可以通过一些适当的提示绕过大多数障碍。谢谢...

4

1 回答 1

0

您最好的选择可能是创建一个Message Queue。所以接受表单 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"');
于 2013-06-21T05:09:46.060 回答