2012-03-20 24 views
0

我工作的一个简单的基于PHP的网站PHP:如何等待通过外部脚本编写的文件存在

的基本结构是:

  • 这需要一些数据作为输入通过网络的形式,将它交给一些 外壳脚本处理(通过系统()函数)

  • 的处理的结果被写入到文本文件里

  • 该文件,然后由脚本读取并在浏览器

大约需要2-3秒完成切换

后产生的.txt文件显示是否有任何正确的方法使PHP等待文件生成?

目前我把PHP脚本休眠5秒钟然后读取文件存在。这显然不是一个好主意,因为每次执行PHP脚本时,无论实际需要多少时间,都需要5秒。

在Apache运行在Ubuntu如果多数民众赞成有关

+1

我以为'system()'_does_等待子进程完成。 – Izkata 2012-03-20 18:24:18

+0

来自PHP手册的@Izkata'如果一个程序以这个函数启动,为了继续在后台运行,程序的输出必须被重定向到一个文件或另一个输出流。否则会导致PHP挂起,直到程序执行结束。在我的情况下,输出被重定向到一个文件 – Akash 2012-03-20 18:28:21

+0

那么为什么你不能让PHP挂起直到文件被创建?对脚本进行外壳处理,当它们沙丘时,PHP脚本将恢复。 – GrandmasterB 2012-03-20 18:32:19

回答

3

答案很简单:不要使用system(),使用exec()没有重定向到一个文件:

$foo = array(); 
exec('ls', $foo); 
$output = implode("\n", $foo); 
1

我认为最好的办法是抛出一个Javascript ajax在每秒钟运行的页面上调用以查找更新的文件。一旦发现循环停止并刷新页面。

+0

这需要额外的某种存储空间,所以你不会开始轮询其他用户的数据,在JavaScript和PHP之间传递某种唯一的ID(或使用PHP会话),这与输出文件相关联。剧本只能持续几秒钟,所以我会称之为矫枉过正。 – Izkata 2012-03-20 20:05:13