ewayfly 发表于 2013-07-02 14:16

php在有限的内存中读取大文件的方法

本帖最后由 ewayfly 于 2013-07-02 14:19 编辑

遇到了一个要读取超过80M文件的需求,很悲剧的,不管是file_get_content还是file什么的,都会将读取的文件一次性加载到内存中
-
正常情况下,可以使用fseek来读取,好处就是不会一次性读取,以下代码只适合边取边处理的情况,不适合一次性读取一次性处理。
可以用以下办法生成测试文件
$file_handle = fopen("./csdn.txt", "rb+");
for ($index1 = 1; $index1 <= 2000000; $index1++) {
fwrite($file_handle, 'http://jb15.net'.$index1."\r");
}
fclose($file_handle);读取处理代码如下:$i = 0;
$now = '';
while ($i >= 0) {
if ($i>10) {
break;
} //by www.jbxue.com
fseek($file_handle, 0, SEEK_CUR);
$now = fgetc($file_handle);//可以自己写个判断false表示文件到头
if ($now == "\r") {
echo '找到断点';
}
echo $now;
$i++;
}
fclose($file_handle);

357749340 发表于 2013-07-02 22:37

本帖最后由 xinglu1983 于 2013-07-03 09:07 编辑

在编程当中PHP文件操作经学会用到的,对于大文件的操作本来是不适合用这种web脚 本来进行操作的。

maochanglu 发表于 2013-07-03 09:55

stream 方式读取

ewayfly 发表于 2013-07-30 16:35

恩,stream是目前相对不错的方式 。:victory::victory:

bacy001 发表于 2013-08-01 10:24

学习了!好文!
页: [1]
查看完整版本: php在有限的内存中读取大文件的方法