如果我写fopen($myfile, 'a')
, 并且$myfile
是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件末尾?还是它会快速找到指向文件末尾的指针然后返回?
在相关说明中,当我使用时,fwrite()
我假设它不会覆盖整个文件,对吗?它只是附加东西?
我基本上是想弄清楚是否fopen()
使用该'a'
选项,并且fwrite()
是 O(1) 或 O(n),其中 n 是现有文件的长度。
如果我写fopen($myfile, 'a')
, 并且$myfile
是一个非常大的文件,服务器是否必须读取整个文件才能将指针返回到文件末尾?还是它会快速找到指向文件末尾的指针然后返回?
在相关说明中,当我使用时,fwrite()
我假设它不会覆盖整个文件,对吗?它只是附加东西?
我基本上是想弄清楚是否fopen()
使用该'a'
选项,并且fwrite()
是 O(1) 或 O(n),其中 n 是现有文件的长度。
实际的复杂度取决于底层文件系统的复杂度,但 PHP 本身不会循环或读取整个文件,它会寻找到最后并从那里开始写入。当在 append more 中打开一个文件时,它不会被 fwrite 擦除(你可以很容易地尝试这个来看看它是如何工作的)。
(相关)
请注意,您也可以使用file_put_contents
而不是fopen/fwrite/fclose
附加到文件 - 如果您非常关心速度:
file_put_contents($filename, $data, FILE_APPEND);
这有点原子性,并且不需要锁定。
不,fopen
不需要阅读整个文件就可以跳到最后。只需要一个简单的查找。