3

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

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

我基本上是想弄清楚是否fopen()使用该'a'选项,并且fwrite()是 O(1) 或 O(n),其中 n 是现有文件的长度。

4

3 回答 3

4

实际的复杂度取决于底层文件系统的复杂度,但 PHP 本身不会循环或读取整个文件,它会寻找到最后并从那里开始写入。当在 append more 中打开一个文件时,它不会被 fwrite 擦除(你可以很容易地尝试这个来看看它是如何工作的)。

于 2011-03-13T19:02:11.983 回答
3

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

file_put_contents($filename, $data, FILE_APPEND);

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

于 2011-03-13T19:04:30.243 回答
1

不,fopen不需要阅读整个文件就可以跳到最后。只需要一个简单的查找。

于 2011-03-13T19:01:08.200 回答