这是我的代码:
结果如下:
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函数的操作.
fgets的长度参数表示最大长度.该PHP文件中指出:
读取长度 - 读取1个字节,或换行(包含在返回值中)或EOF(以先到者为准)时读取结束.如果没有指定长度,它将继续从流中读取,直到它到达行尾.
在你的情况下,第一行包含,它解释了由16给出的结果
ftell
.
根据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.