我需要在后台运行第二个php文件。问题是此文件只需在当前文件完成后运行20秒。我已经使用exec(“php test_script.php”)来运行该文件,但我无法让它等待。如果我使用sleep(),如果暂停我当前的脚本。
更具体一点。我正在将文件上传到远程服务器。然后,我需要在完成上传后等待大约20秒,以检查服务器是否有响应。与此同时,我想继续使用当前文件。第二个文件将执行后台所需的操作。目前我必须等待然后运行第二个文件。
答案 0 :(得分:4)
最简单的解决方案是be found here。基本上,像这样执行你的脚本:
exec('test_script.php >/tmp/output.txt &');
注意最后的&符号('&'),这将使命令在后台运行!您可以通过在test_script.php中添加sleep来将脚本延迟20秒。
您的其他选择是通过客户端的Javascript(AJAX)触发第二个脚本;或者让一个进程在后台运行(或定期通过cron作业),该进程正在检查请求的某种公共数据(例如数据库),如果需要处理这样的请求,它将被激活。
如果脚本 要运行,则JavaScript不是一个选项,因为用户可能决定离开您的页面,或者不执行JavaScript,或者是恶意的,并决定不执行该操作特别是JavaScript。
答案 1 :(得分:2)
将sleep()
调用放在test_script.php
文件中(在实际代码之前),然后在调用exec
时,确保将命令的输出重定向到文件。类似的东西:
exec("php test_script.php > /tmp/output.txt");
这可以确保它不会中断第一个(调用)脚本的加载,并且它将是异步的。