2014-02-25 142 views
2

如果我文件正在被file_put_contents()处理时该怎么办。该文件是否会获取文件的过去内容或尚未完成写入的当前内容?文件处理问题

+0

你是什么意思与“而”?并发进程/线程或...? – DonCallisto

回答

0

file_get_contents()将读取不完整的文件,因为file_put_contents()写入缓冲的文件。特别是对于大文件,您将会产生这种效果。

编辑:注意(因为它在其他评论想出了):

你可以用LOCK_EX标志申请锁定。

file_put_contents ($filename, $content, LOCK_EX); 

$content = file_get_contents ($filename, LOCK_EX); 
+0

是非常小的文件将被原子地写入。但总的来说,这些功能不是原子的。 –

-1

如果一个进程试图访问而另一个写该文件时,一个读数将被锁定,直到写操作完成 - 这是如果你使用基于文件的会话,并有PHP文件,为什么像:

// a.php: 
session_start(); 
sleep(60); 

// b.php: 
session_start(); 
echo "Hi!"; 

然后,如果你加载a,随后在不同的浏览器标签bb将挂起,直到a完成。这是因为a已锁定会话文件,并且b正在等待释放锁。

这同样适用于file_get_contents/file_put_contents

+0

这是错误的。没有适用于file_get_contents/file_put_contents的锁定。 –

+0

@KenyakornKetsombut需要引用 – Yang

+0

@djay检查文档http://au1.php.net/file_put_contents并寻找LOCK_EX –