我有一个名为 denem.txt 的文件并包含内容
123456789
123456789
123456789
当我们以“a+b”模式打开文件时,PHP 应该将指针放置到文件末尾,这意味着当我尝试使用 fgetc 函数获取字符时,它应该返回 False,因为 feof 为 true。但是,当我使用类似的代码时
while (false !== ($char = fgetc($file))) {
echo "$char\n";
}
我得到 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9 。 -> 这很奇怪,因为我没有使用 rewind() 并且指针必须位于文件末尾意味着 fgetc 必须返回 False。 ftell 返回 int 0 表示指针位于文件开头。 然而,当我尝试使用 fwrite 使用指针当前位置向文件写入内容时,如果 ftell 没有欺骗我们,它应该将其写入文件的开头。但是当我使用 fwrite 时,猜猜会发生什么,它会将其写入文件末尾,我的文件变成
123456789
123456789
123456789Test
你对此有什么想法吗?
最佳答案
您需要了解a+
模式。
它打开文件进行读取和追加(在文件末尾写入)。如果文件不存在,则创建该文件。读取的初始文件位置位于文件的开头,但输出始终附加到文件的结尾。
只有一个指针,最初位于文件的开头,但当尝试执行写入操作时,它会移至文件的末尾。您可以在文件中的任何位置使用 fseek
或 rewind
重新定位它以进行读取,但写入操作会将其移回文件末尾。
关于php - fopen 有一些奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5276272/