情况一:
一般大多都是使用PHPExcel 读取时, 以 xlsx后缀的excel表数据量过大而导致内存溢出,那么大部分采取的办法就那几种
1.修改
php.ini
中 memory_limit的值,重启apache服务
2.在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 (前提:
版本:1.7.6+
)
PHPExcel_Settings::setCacheStorageMethod()
来设置不同的缓存方式,已达到降低内存消耗的目的!
、将单元格数据序列化后保存在内存中
PHPExcel_CachedObjectStorageFactory::cache_in_memory_serialized;
2、将单元格序列化后再进行Gzip压缩,然后保存在内存中
PHPExcel_CachedObjectStorageFactory::cache_in_memory_gzip;
3、缓存在临时的磁盘文件中,速度可能会慢一些
PHPExcel_CachedObjectStorageFactory::cache_to_discISAM;
4、保存在php://temp
PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
5、保存在memcache中
PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheSettings = array( 'memcacheServer' => 'localhost',
'memcachePort' => 11211,
'cacheTime' => 600
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
注意是加在new PHPExcel() 前面:如下
require_once APPPATH .'third_party/PHPExcel/PHPExcel.php';
$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_phpTemp;
$cacheSettings = array('memoryCacheSize'=>'16MB');
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);
$objPHPExcel = new PHPExcel();
情况二:
表格数据量不大,还是提示内存溢出,则可以考虑因为特殊字符引起。
// 如果是因为特殊字符引起的,可以在load方法之前加上setReadDataOnly(意思是忽略任何格式的信息)方法,就可以避免
$objReader->setReadDataOnly(true);//只需要添加这个方法
$objPHPExcel = $objReader->load($uploadFilePath);
情况一:一般大多都是使用PHPExcel 读取时,以 xlsx后缀的excel表数据量过大而导致内存溢出,那么大部分采取的办法就那几种1.修改php.ini中 memory_limit的值,重启apache服务2.在不进行特殊设置的情况下,phpExcel将读取的单元格信息保存在内存中,我们可以通过 (前提:版本:1.7.6+)PHPExcel_Settings::setCache...
*
读取
Excel
文件
* @param string $filePath 要
读取
的路径
* @param integer $sheet 要
读取
的工作列表
* @return array
* @author lianggc 2016-09-06
今天一个线上项目反应导入
excel
文件
时,网页直接卡死,导入
excel
文件
时失败,经过一步一步的验证发现是在
读取
excel
文件
时卡死,此项目使用的是
php
office/
phpexcel
拓展,最后发现是在执行load方法加载
excel
文件
时
出现
卡死,之前在导入
excel
文件
一直是正常的,而且
excel
中的数据也不是很多,到底是由于什么原因造成的呢?
最后在查找
php
office/
phpexcel
官方文档中发现,这是由于
excel
文件
中存在了某些特殊字符导致了加载
excel
文件
时崩溃,既然找到了原因,就一定有
因为之前的一个系统在使用
PHPEXCEL
导入的时候,
出现
了系统崩溃的问题,后面经过一步步的分析,在load()里面中断,系统无法响应。
解决这个问题其实很简单。
一般影响这个问题的原因,是你的
excel
里面的内容有
出现
特殊的字符。
解决方法:
try {
$inputFileType =
PHPExcel
_IOFactory::identify($uploadfile)
// 如果是因为特殊字符引起的,可以在load方法之前加上setReadDataOnly(意思是忽略任何格式的信息)方法,就可以避免
$objReader->setReadDataOnly(true);//只需要添加这个方法
$obj
PHPExcel
= $objReader->load($uploadFilePath);
场景和痛点
今天因为一个老同学找我,说自己公司的物流业务都是现在用
excel
处理
,按月因为数据量大,一个
excel
差不多有百万数据,
文件
有接近100M,打开和搜索就相当的
慢
联想到场景:要导入数据,可能
excel
数据量很大,这里利用常用的一些方法比如
phpexcel
会常有时间和内存限制问题
下面我们就利用一个利用流
处理
的类库Sprea...
PHP
导出
excel
相对很多童鞋都碰到了,使用
phpexcel
类也确实方便,但导出大数据的时候就没那么简单了,常常会伴随一些超时或内存溢出的问题,下面就给大家介绍一些方法,共同学习,共同进步。。。
PHPExcel
是一个很强大的
处理
Excel
的
PHP
开源类,但是很大的一个问题就是它占用内存太大,从1.7.3开始,它支持设置cell的缓存方式,但是推荐使用目前稳定的版本1.7.6,因为之前的版...
function exportTo
Excel
($filename, $tileArray=[], $dataArray=[]){
ini_set('memory_limit','512M');
ini_set('max_execution_time',0);
ob_end_clean();
ob_start();
header("Cont...
// 创建一个
读取
Excel
文件
的对象
$objReader =
PHPExcel
_IOFactory::createReader('
Excel
2007');
$objReader->setReadDataOnly(true);
//
读取
Excel
文件
$obj
PHPExcel
= $objReader->load('example.xlsx');
// 获取第一个工作表
$sheet = $obj
PHPExcel
->getSheet();
// 获取行数和列数
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
// 循环
读取
每一行数据
for ($row = 1; $row <= $highestRow; $row++) {
// 循环
读取
每一列数据
for ($col = 'A'; $col <= $highestColumn; $col++) {
// 获取单元格的值
$value = $sheet->getCell($col.$row)->getValue();
echo $value . "\t";
echo "\n";
以上代码可以
读取
名为 `example.xlsx` 的
Excel
文件
,并输出每个单元格的值。