浏览器窗体必须启动断开连接并在后台运行的PHP脚本
我有一个PHP例程,可以在浏览器中正确运行查询/获取数据,我想在启动后将其与浏览器断开连接,以便它可以在后台运行。它将文件写入磁盘并通过电子邮件将链接发送给用户,因此不再需要浏览器 浏览器启动的iframe路径如下所示浏览器窗体必须启动断开连接并在后台运行的PHP脚本,php,command-line,exec,background-process,Php,Command Line,Exec,Background Process,我有一个PHP例程,可以在浏览器中正确运行查询/获取数据,我想在启动后将其与浏览器断开连接,以便它可以在后台运行。它将文件写入磁盘并通过电子邮件将链接发送给用户,因此不再需要浏览器 浏览器启动的iframe路径如下所示 src="tool/scan.php?types=All&order=Newest&email=test@example.com" 我将用一个中间人替换iframe目标,该中间人将把所有内容传递到scan.phpworkhorse文件 我知道可以使用exec()
src="tool/scan.php?types=All&order=Newest&email=test@example.com"
我将用一个中间人替换iframe目标,该中间人将把所有内容传递到scan.php
workhorse文件
我知道可以使用exec()
,但显然不知道如何设置命令行的格式,而且我对迄今为止找到的资源感到困惑
我尝试只传递$\u服务器[“DOCUMENT\u ROOT”]。路径/文件名$_服务器['QUERY_STRING']通过逐字记录,但这似乎不起作用(echo在下面的引号中显示了该值):
所以我想知道命令行和浏览器参数是否不同,并尝试了这个,但也不是这样
exec("/var/www/vhosts/example.com/httpdocs/tool/scan.php types=All order=Newest email=test@example.com");
我只需要一个正确方向的提示,如果有人能提供一个指针,我就可以重新开始。我不太懂PHP,也不太会读大部头,但我通常可以通过一些适当的提示绕过大多数障碍。谢谢…您最好的选择可能是创建一个消息队列。因此,接受表单post的脚本将数据提交到消息队列。消息队列可以是MySQL数据库中保存要处理的数据的表。然后,您有一个cron服务,它每隔几分钟左右运行一次,将从队列中取出所有消息并对其进行处理 如果要在
exec()
函数中使用$\u 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"');
或者这样:
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"');
这不是在cli环境中解析参数的方式cli环境意味着“命令行界面”?你看到我的问题了吗?那些exec行,如果你想把参数传递给脚本,你可以把它们放在命令行上,比如
scan.phptest@example.com
并在文件中访问阵列$argv,谢谢!非常有帮助。chrislondon,谢谢你的建议,但是没有MySQL,只有unix。哦,好的@user2507595我添加了一些你可以做的exec()
s。如果脚本等待它们完成,请尝试在末尾添加一个“&”,这样它将是exec('php-cgi…&')好的,我会尝试你的建议。非常感谢。我必须了解“wget”和“phpcgi”在此上下文中的含义。exec运行命令行函数wget
是一个unix命令行函数,可以调用网页PHPCGI
是php的cgi版本“如果脚本等待它们完成”——脚本只做自己的事情并编写一个文件。&
是否用于返回值?如果是这样,那么就不需要了。wget看起来很吸引人。我来探索一下。