phpexcel 读取 excel 数据、保存图片 提示内存溢出错误?

scz467 发布于 2013/09/13 18:19
阅读 1K+
收藏 0
本帖最后由 scz467 于 2013-9-13 17:31 编辑
问题参考: http://www.excelpx.com/thread-309564-1-1.html
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 9216 bytes) inD:\AppServ\ankh\isrc\class\PHPExcel\Reader\Excel5.php on line1009

我想把 excel 中的数据以及图片都保存下来,图片保存到 mysql 数据库,图片保存到指定目录中 
我现在的程序是 数据量小的时候(图片少的时候)可以操作成功,但是一旦数据量变大(图片变多了) 就会报上面的错了加载 excel 都没有加载成功,

我在网上看了好多帖子 说设置 phpexcel 缓存,我操作了 没成功,本人对 phpexcel 不熟,哪位大神遇见过类似的问题,我这里面的图片都是高清大图 一张图4、5Mb 




我代码在附近里面 哪位大神给指点指点吧  郁闷两三天了 网上资料也看了不少(execl图片如下图 没有截全)




                

以下是问题补充:

@scz467:php.ini 我已经设置了,涉及到全部是没有限制,但是还是报内存溢出啊 (2013/09/13 19:03)
加载中
0
南湖船老大
南湖船老大

看代码没用的,修改PHP.INI里的内存配置才是王道。

解析EXCEL,是个非常耗内存的事情。

scz467
scz467
回复 @南湖船老大 : 这些都设置了 现在我不认为是 php.ini 的问题了 memory_limit 1024M 了
南湖船老大
南湖船老大
回复 @scz467 : memory_limit ?这个呢?
scz467
scz467
php.ini 涉及到的几个选项我都没有限制了上传无限大,执行时间无限大
0
scz467
scz467
这里面不能上传附近吗?? 本来想把 php.ini 上传的
0
hylent
hylent

我没看错吧,1G的内存都用完了啊?你的excel是有多大啊?

看看改改代码吧,读取的时候边读取边回收资源试试。

scz467
scz467
怎么个边读取边回收资源啊 ,现在是加载都加载不了,excel数据量不大,但是excel中的图片比较多 图片大
0
我吃烤地瓜
我吃烤地瓜
您访问的页面发生错误!
我们已经将此错误信息记录下来,并将尽快处理,为此造成您的不便请多见谅
0
WesleyWu
WesleyWu
如果不怕跑死机就设置ini_set('memory_limit', '-1');
scz467
scz467
已经解决了,试用excel2007以后的版本就没问题了
0
xmosnewone
xmosnewone

看到这个问题,我还是要留言一下吧,用2003导出xls会省内存,和导出多图也不会有坏图的!不信可试试

                            if(file_exists( '.'.$value [$field [$k]])){
                            // 图片生成
                            $objDrawing[$k] = new \PHPExcel_Worksheet_Drawing();
                            $objDrawing[$k]->setPath( '.'.$value [$field [$k]]);
                            // 设置宽度高度
                            $objDrawing[$k]->setHeight(80);//照片高度
                            $objDrawing[$k]->setWidth(80); //照片宽度
                            /*设置图片要插入的单元格*/
                            $objDrawing[$k]->setCoordinates($Excel_letter [$k] . $line);
                            // 图片偏移距离
                            $objDrawing[$k]->setOffsetX(12);
                            $objDrawing[$k]->setOffsetY(12);
                            $objExcel->getActiveSheet()->getRowDimension($line)->setRowHeight(70);
                            $objDrawing[$k]->setWorksheet($objExcel->getActiveSheet());
                            }

导出图之前要判断文件是否存在,不然报错!

返回顶部
顶部