文件处理问题

时间:2014-02-25 09:17:53

标签: php linux

file_get_contents()处理文件时file_put_contents()文件怎么办?文件是否会获取文件的过去内容或尚未完成写入的当前内容?

2 个答案:

答案 0 :(得分:0)

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

修改:注意(因为它出现在另一条评论中):

您可以使用LOCK_EX标志来应用锁定。

file_put_contents ( $filename, $content, LOCK_EX );

$content = file_get_contents ( $filename, LOCK_EX );

答案 1 :(得分:-1)

如果一个进程尝试访问某个文件而另一个进程正在写入该文件,那么一个进程将被锁定,直到写入完成为止 - 这就是为什么如果您使用基于文件的会话并拥有如下所示的PHP文件:

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

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

然后,如果您在不同的浏览器标签中加载a后跟b,则b将一直挂起,直到a完成。这是因为a已锁定会话文件,而b正在等待锁定被释放。

这同样适用于file_get_contents / file_put_contents