当前位置:  开发笔记 > 编程语言 > 正文

php函数中ftell的输出

如何解决《php函数中ftell的输出》经验,为你挑选了2个好方法。

这是我的代码:


结果如下:

    Array
(
    [0] => HTTP/1.1 200 OK
    [Content-Type] => text/html
    [Vary] => Accept-Encoding
    [X-Powered-By] => shci_v1.03
    [Server] => nginx
    [Date] => Thu, 24 Dec 2015 04:03:39 GMT
    [Last-Modified] => Thu, 24 Dec 2015 04:01:28 GMT
    [Expires] => Thu, 24 Dec 2015 04:04:39 GMT
    [Cache-Control] => max-age=60
    [Age] => 32
    [Content-Length] => 518264
    [X-Cache] => HIT from xidan33-99.sina.com.cn
    [Connection] => close
)
518264
16
200016
200058
400058
400065
518264

Content-Length可能与我的不同 - 518264,它会在您执行代码时动态更改,无论讨论如何都是如此.为什么结果不是以下?

518264
1024
201024
202048
402048
403072

请解释文件指针对fgets和ftell和fseek函数的操作.



1> 小智..:

fgets的长度参数表示最大长度.该PHP文件中指出:

读取长度 - 读取1个字节,或换行(包含在返回值中)或EOF(以先到者为准)时读取结束.如果没有指定长度,它将继续从流中读取,直到它到达行尾.

在你的情况下,第一行包含,它解释了由16给出的结果ftell.



2> Tᴀʀᴇǫ Mᴀʜᴍᴏᴏ..:

根据fgets()的PHP文档,

读取长度 - 读取1个字节,或换行(包含在返回值中)或EOF(以先到者为准)时读取结束.

这里length是调用时使用的第二个参数fgets(),即1024.因此,fgets()当发生以下任何情况时,您的呼叫将结束阅读:

    它从同一行读取了1023个字节.

    它已达到当前行的末尾.

    它已经到了文件的末尾.

因此,在您的情况下,当fgets()读取第一行时,它在读取16个字节后到达第一行的末尾,这将是文件指针在ftell()其旁边调用时的位置.ftell() 返回文件中文件指针的当前位置.

当你在下一行fgets()再次调用时(while循环迭代),你在文件中的起始位置现在是16(特别是1024),你可以读取最多(16 + 1024)1040字节(不高达2048).再次,如果你的下一行只有42个字节,这fgets()将以58个字节结束读取,这将是ftell()再次调用时文件指针的位置.

你将再次fgets()58字节开始,读取(58 + 1024 =)1082字节.它将继续这种方式.

效果fseek()
fseek()用于将文件指针移动到文件中由$ offset(第二个参数)设置的特定位置.根据fseek()的PHP文档,第3个参数值可以是 -

SEEK_SET- 设置位置等于偏移字节.
SEEK_CUR- 将位置设置为当前位置加偏移量.
SEEK_END- 将位置设置为文件结束加偏移量.

因此,fseek($handle,200000,SEEK_CUR);您将文件指针设置为200000 +当前位置.例如,它将在16岁时移至200016.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有