2011-12-14 65 views
3

我需要在后台运行第二个php文件。问题是这个文件只需要在当前文件完成后运行20秒。我已经使用exec(“php test_script.php”)来运行该文件,但我无法让它等待。如果我使用sleep(),如果暂停我当前的脚本。以20秒的延迟运行第二个php文件

要更具体些。我正在将文件上传到远程服务器。然后,我需要在完成上传后等待大约20秒,以检查服务器的响应。同时我想继续使用当前文件。第二个文件将完成后台需要的功能。此刻我必须等待,然后运行第二个文件。

+1

那么为什么你不使用你当前的解决方案,并在第二个文件的开始添加你的睡眠(20),而不是在第一个文件的末尾使用它? – mishu 2011-12-14 14:32:04

+1

setTimeout()JavaScript函数与ajax调用? – 2011-12-14 14:36:20

回答

4

最简单的解决方案可以是be found here。基本上,执行你的脚本是这样的:在结束

exec('test_script.php >/tmp/output.txt &'); 

通知的符号(“&”),这将使该命令在后台运行!您可以通过在test_script.php中添加睡眠来延迟脚本20秒。

您的其他选项是通过客户端的Javascript(AJAX)触发第二个脚本;或者有一个进程在后台运行(或定期通过cron作业),该进程正在检查某些常见数据(例如数据库)中的请求,并且如果需要处理这样的请求,则该进程将被激活。

如果脚本要运行,那么JavaScript不是一个选项,因为用户可能决定离开您的页面,或者不执行JavaScript,或是恶意并决定不执行该特定的JavaScript。

2

sleep()调用放入您的test_script.php文件中(在实际代码之前),然后在调用exec时,确保将命令的输出重定向到文件。喜欢的东西:

exec("php test_script.php > /tmp/output.txt"); 

此向你保证,它不会中断第一(主叫)脚本的加载,这将是异步的。

+0

如何重定向输出使进程异步执行/在后台执行? – codeling 2011-12-14 14:40:01