2010-06-15 18 views
0

我的PHP脚本使用的ReadFile()和手动添加HTTP头提供文件服务。文件是大约1〜MB大,所以没有部分阅读是必要的。文件服务和安全的替换该文件上即时

什么是更换一个更新的一个文件,但要确保已经开始下载不会被打破的最佳方式?我希望待完成的下载能够以提取的旧文件版本完成。

平台:Linux,PHP 5中,阿帕奇2

回答

1

使用版本编号的文件名:

$candidates=sort(glob($dir . $prefix . '*')); 
$most_recent=array_pop($candidates); 

例如 file0001.pdf file0002.pdf file0003.pdf

C.

+0

简单而伟大的:-) – tomash 2010-06-15 11:52:12

1

你可以使用flock获得的文件句柄锁定 - 这将意味着你写进程将阻塞,直到它能够得到一个排它锁。

所以,你的读者将获得LOCK_SH共享锁,然后简单地使用fpassthru的文件输出,并最终解除锁定。

写会获得LOCK_EX独占锁,安全执行写,然后释放锁,允许任何阻止读者开始获取新的文件。

+0

但在高负荷的网站,你将永远不会得到一个排它锁 – symcbean 2010-06-15 11:23:53

相关问题