PHP分块读入文件的问题

PHP分块读入文件的问题,第1张

最多只能读取8192个字节,无法读取10240个字节

手册里是这样写的:

fread() 从文件指针 handle 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

<?php

$handle = fopen ("你的文件", "rb")

$contents = ""

while (!feof($handle)) {

$contents .= fread($handle, 8192)

}

fclose($handle)

?>

fp = open(filepath,"rb")

while True:

content = fp.read(10240) #每次读取的10240字节的数据

if not content:

break

fp.close()

大文件可以被一部分一部分地读,这在windows里被以虚拟内存映射文件的方式实现。而不能用其本身的文件流,因为它自己是调用系统API实现的,而又缺少参数,便保险地映射全部文件到内存,而一般系统的虚拟地址空间为用户2G,服务器上才3G。而2G里显然要包括程序文件本身与环境子系统DLL们。所以剩下不足2G了,这下就不够用了,所以不能用C++里的文件流。用windows系统自带的API函数可以实现分块映射读取,当然读完一块要释放掉,不然最后还是不够用,这样就行了,你可以看书去了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11480095.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存