提问人:Richard 提问时间:2/13/2019 最后编辑:Richard 更新时间:2/13/2019 访问量:219
重新阐明 php 的 feof() 是如何工作的
Reclarification of how feof() of php work
问:
我已经阅读了 PHP 手册上关于 feof()
的评论,这里的答案是 StackOverflow 上,另一个答案是 StackOverflow。
所以我明白了,使用并不意味着使用“水晶球”来神奇地知道流中是否有更多的字符或行,如上面提到的第二个链接。相反,它是一个测试,用于指示输入操作是否失败(在这种情况下,我只关心PHP的输入操作)。所以读到的最后一个字符还是可以的。然后,of 仍然是假的,因为最后一个仍然成功,并且在另一个尝试读取和失败的循环之后,只有这样才会设置为 true。我说得对吗?我是不是误会了什么?feof()
fgetc()
feof()
while(!feof($file_you_read_from))
fgetc()
fgetc()
feof()
答:
1赞
shingo
2/13/2019
#1
feof
在 PHP 中的工作方式与 C 相同。
如果是,则它会检查最后一个操作,否则返回缓存的值。false
检查与流关联的文件结束指示器是否为 set,如果是,则返回一个与零不同的值。
此指示器通常由流上的先前操作设置 试图在文件末尾或文件末尾读取。
请注意,流的内部位置指示器可能指向 下一个操作的文件末尾,但仍然是文件末尾 在操作尝试读取该指标之前,不得设置指示器 点。
此指标通过调用 clearerr、rewind、fseek、 fsetpos 或 freopen。虽然如果位置指示器不是 通过这样的调用重新定位,下一个 I/O 操作可能会设置 再次指示器。
评论
0赞
Richard
2/13/2019
明白了。所以我的假设是正确的:的值是由 read 的最新操作设置的,即我提到的,对吧?feof()
fgetc()
0赞
shingo
2/13/2019
有点不对劲,它受最新操作的影响,但由 设置,您可以查看源代码。feof
0赞
Richard
2/13/2019
你是说这个:github.com/php/php-src/blob/PHP-7.4/main/streams/streams.c#L727?诚然,我在理解这一部分时遇到了一些困难。
0赞
Richard
2/13/2019
所以这意味着,它由 设置,并且通过获取读取的最后一个操作的状态来知道要设置哪个值,对吧?feof()
feof()
评论