我需要在后台运行第二个php文件。问题是这个文件只需要在当前文件完成后运行20秒。我已经使用exec(“php test_script.php”)来运行该文件,但我无法让它等待。如果我使用sleep(),如果暂停我当前的脚本。以20秒的延迟运行第二个php文件
要更具体些。我正在将文件上传到远程服务器。然后,我需要在完成上传后等待大约20秒,以检查服务器的响应。同时我想继续使用当前文件。第二个文件将完成后台需要的功能。此刻我必须等待,然后运行第二个文件。
我需要在后台运行第二个php文件。问题是这个文件只需要在当前文件完成后运行20秒。我已经使用exec(“php test_script.php”)来运行该文件,但我无法让它等待。如果我使用sleep(),如果暂停我当前的脚本。以20秒的延迟运行第二个php文件
要更具体些。我正在将文件上传到远程服务器。然后,我需要在完成上传后等待大约20秒,以检查服务器的响应。同时我想继续使用当前文件。第二个文件将完成后台需要的功能。此刻我必须等待,然后运行第二个文件。
最简单的解决方案可以是be found here。基本上,执行你的脚本是这样的:在结束
exec('test_script.php >/tmp/output.txt &');
通知的符号(“&”),这将使该命令在后台运行!您可以通过在test_script.php中添加睡眠来延迟脚本20秒。
您的其他选项是通过客户端的Javascript(AJAX)触发第二个脚本;或者有一个进程在后台运行(或定期通过cron作业),该进程正在检查某些常见数据(例如数据库)中的请求,并且如果需要处理这样的请求,则该进程将被激活。
如果脚本有要运行,那么JavaScript不是一个选项,因为用户可能决定离开您的页面,或者不执行JavaScript,或是恶意并决定不执行该特定的JavaScript。
将sleep()
调用放入您的test_script.php
文件中(在实际代码之前),然后在调用exec
时,确保将命令的输出重定向到文件。喜欢的东西:
exec("php test_script.php > /tmp/output.txt");
此向你保证,它不会中断第一(主叫)脚本的加载,这将是异步的。
如何重定向输出使进程异步执行/在后台执行? – codeling 2011-12-14 14:40:01
那么为什么你不使用你当前的解决方案,并在第二个文件的开始添加你的睡眠(20),而不是在第一个文件的末尾使用它? – mishu 2011-12-14 14:32:04
setTimeout()JavaScript函数与ajax调用? – 2011-12-14 14:36:20