我编写了下面的代码来输出文件的内容两次。但它只做了一次。那是为什么?
文本文件内容如下:
My name is Sam. Sam I am.
My name is Chris and Chris I am.
The brown fox jumped over the fence.
代码如下:
<?php
$file = "files/info.txt";
$handle = fopen($file, "rb");
echo fread($handle, filesize($file));
echo fread($handle, filesize($file));
?>
输出:
"My name is Sam. Sam I am. My name is Chris and Chris I am. The brown fox jumped over the fence."
答案 0 :(得分:6)
调用fread()“用完”文件,为了再次fread(),你必须使用rewind($ handle)将读指针移回文件的开头
答案 1 :(得分:1)
对于第一个 fread(),文件指针移动到文件的末尾,因此第二次没有打印。 执行波纹管代码,你就会知道。
<?php
$file = "info.txt";
$handle = fopen($file, "rb");
echo fread($handle, filesize($file)-10);
print "-----";
echo fread($handle, filesize($file));
?>
答案 2 :(得分:0)
这是因为您已经使用该句柄阅读了整个内容。句柄是指向文档的指针。如果你只是读这个文件的第一个字节(比如说前10个字节),就像这样。
fread($handle, 10);
然后下次你调用fread()时,它会从你离开的地方开始。
在您的示例中,第一次调用fread()时,您使用filesize,这会使指针指向文件的末尾。接下来你称之为fread,没有任何东西可以返回,因此你的“回声”回声没有回来。
希望这有帮助,请查看php文档中的fread()和其他文件处理函数,以便在php.net上进行更多解释