php 读取excel大文件,php 如何读大excel

phper需要处理excel的时候基本上都会考虑PhpSpreadsheet,但是用过这个库的人都知道,这个库所需要的内存很大,关键是随着文件的增大,所需要的内存不断增大。测试过,导入2M的文excel文件,get_memory_usage显示消耗了128M。那么对于较大文件的excel该如何处理呢,本文试着给出一个解决方案(前提:你的业务允许你分行处理文件,如果不允许,可以不用往下看了)。

为什么PhpSpreadsheet耗内存

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($filename);

跟过库代码的人都知道,在第一句load的时候就将整个文件的内容都load了内存,后面拿数据的时候就直接从内存中取了,这就是为什么随着文件增大,库所耗内存不断增大。但是对于很多业务,其实都允许读一行处理一行,完全没必要把数据一下子放到内存里面。

库文档里面提到了几个topic来解决这个问题的。

将数据的内存放入redis/memcache之类的,而不用本机的内存。

这个方法从stackoverflow几个帖子上看,速度会非常慢,实际几乎不可用。

本人没有测试过,主要是穷,买不起大内存的机器,也买不起云redis,所需要的内存还是会随着文件变大而不断增加,所以就算速度不慢,也不会是我考虑的解决方法。

这里提供了一个思路,重写 readCell 这个函数,可以控制我们只保存其中的某些行和列。

$inputFileType = 'Xls';

$inputFile

你可能感兴趣的:(php,读取excel大文件)