我有一个名为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
你对此有什么想法吗?
答案 0 :(得分:3)
您需要了解a+
模式。
它打开文件以供阅读和追加(在文件末尾写入)。如果文件不存在,则创建该文件。用于阅读的初始文件位置位于文件的开头,但输出始终附加到文件的结束。
只有一个指针最初位于文件的开头,但是当尝试写入操作时,它会移动到文件的末尾。您可以使用fseek
或rewind
在文件中的任何位置重新定位,以便阅读,但写入操作会将其移回文件末尾。
答案 1 :(得分:0)
我只是想出了别的东西 当我打开一个带有+ b的文件时,可以说一个没有内容的文件
$pointer = fopen("deneme.txt","a+b");
fwrite($pointer, rand(0,9));
echo fgetc($pointer);
echo ftell($pointer);
echo fgetc($pointer);
始终将“1”打印到屏幕上。好的,如果你想要阅读你倒带的文件比没有问题,但如果我不使用倒带,例如ftell说指针的位置是1。 因此,如果+是APPEND模式并将指针放在文件的末尾,那么ftell就在说谎,如果不说谎,为什么fgetc不会返回任何字符? 你的答案是“只是使用倒带()”,但我真的对此感到困惑!