PHPExcel讀取Excel文件出現內存不足 各種情況處理辦法

情況一:一般大多都是使用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);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章