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

问题描述:

如果我编写fopen($myfile, 'a'),$myfile是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件末尾?还是它很快找到指向文件结尾的指针,然后返回?PHP中'a'选项的fopen()效率

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

我基本上想知道fopen()'a'选项和fwrite()是O(1)还是O(n),其中n是预存文件的长度。

+0

操作系统将文件指针定位在最后。它不需要读取现有内容。 – mario 2011-03-13 19:01:02

+0

谢谢mario! – Tim 2011-03-13 20:29:07

不,fopen不需要读取整个文件只是为了跳到最后。简单的寻求就是所需要的。

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

+0

谢谢马蒂。当我问到fwrite()时,我真的打算询问它是否重写整个文件,而不是仅仅在与文件末尾对应的存储器中写入内容。我再次试图了解fwrite()的效率如何。但我认为现在很清楚它不会重写所有内容。再次感谢您的帮助和快速响应! – Tim 2011-03-13 20:32:00

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

file_put_contents($filename, $data, FILE_APPEND); 

这是多个原子一点,不需要锁定。

+0

哇,谢谢你的提示!我会尝试这个的确。 – Tim 2011-03-13 20:32:22