如果我写fopen($myfile, 'a')
,$myfile
是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件的末尾?或者它是否快速找到指向文件末尾的指针然后返回?
在相关的说明中,当我使用fwrite()
时,我认为它不会覆盖整个文件,对吧?它只是附加东西?
我基本上试图弄清楚fopen()
是否'a'
选项,fwrite()
是O(1)还是O(n),其中n是现有文件。
答案 0 :(得分:4)
实际的复杂性取决于底层文件系统的复杂性,但PHP本身不会循环或读取整个文件,它将寻求最终并从那里开始编写。当打开一个附加更多的文件时,它不会被fwrite删除(你可以很容易地尝试这个以查看它是如何工作的。)
答案 1 :(得分:2)
(相关的)
请注意,您还可以使用file_put_contents
代替fopen/fwrite/fclose
附加到文件 - 如果您非常关注速度:
file_put_contents($filename, $data, FILE_APPEND);
这有点原子,并不需要锁定。
答案 2 :(得分:1)
不,fopen
不需要读取整个文件只是为了跳到最后。只需要一个简单的搜索。