PHP中'a'选项的fopen()效率
如果我编写fopen($myfile, 'a')
,$myfile
是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件末尾?还是它很快找到指向文件结尾的指针,然后返回?PHP中'a'选项的fopen()效率
在相关说明中,当我使用fwrite()
时,我认为它不覆盖整个文件,对吧?它只是附加的东西?
我基本上想知道fopen()
'a'
选项和fwrite()
是O(1)还是O(n),其中n是预存文件的长度。
不,fopen
不需要读取整个文件只是为了跳到最后。简单的寻求就是所需要的。
实际的复杂性取决于底层文件系统的复杂性,但PHP本身不会循环或读取整个文件,它会寻求最终的结果并从那里开始写入。当添加更多文件时打开一个文件,它不会被fwrite擦除(你可以轻松地尝试这个来看看它是如何工作的)。
谢谢马蒂。当我问到fwrite()时,我真的打算询问它是否重写整个文件,而不是仅仅在与文件末尾对应的存储器中写入内容。我再次试图了解fwrite()的效率如何。但我认为现在很清楚它不会重写所有内容。再次感谢您的帮助和快速响应! – Tim 2011-03-13 20:32:00
(相关)
请注意,您还可以附加到文件使用file_put_contents
代替fopen/fwrite/fclose
- 如果你是非常关心速度:
file_put_contents($filename, $data, FILE_APPEND);
这是多个原子一点,不需要锁定。
哇,谢谢你的提示!我会尝试这个的确。 – Tim 2011-03-13 20:32:22
操作系统将文件指针定位在最后。它不需要读取现有内容。 – mario 2011-03-13 19:01:02
谢谢mario! – Tim 2011-03-13 20:29:07