PHP中fopen()与'a'选项的效率

时间:2011-03-13 18:59:02

标签: php performance fopen fwrite

如果我写fopen($myfile, 'a')$myfile是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件的末尾?或者它是否快速找到指向文件末尾的指针然后返回?

在相关的说明中,当我使用fwrite()时,我认为它不会覆盖整个文件,对吧?它只是附加东西?

我基本上试图弄清楚fopen()是否'a'选项,fwrite()是O(1)还是O(n),其中n是现有文件。

3 个答案:

答案 0 :(得分:4)

实际的复杂性取决于底层文件系统的复杂性,但PHP本身不会循环或读取整个文件,它将寻求最终并从那里开始编写。当打开一个附加更多的文件时,它不会被fwrite删除(你可以很容易地尝试这个以查看它是如何工作的。)

答案 1 :(得分:2)

(相关的)
请注意,您还可以使用file_put_contents代替fopen/fwrite/fclose附加到文件 - 如果您非常关注速度:

file_put_contents($filename, $data, FILE_APPEND);

这有点原子,并不需要锁定。

答案 2 :(得分:1)

不,fopen不需要读取整个文件只是为了跳到最后。只需要一个简单的搜索。