phpExcel匯出大量資料出現記憶體溢出錯誤解決辦法_PHP教程

來源:互聯網
上載者:User
我們經常會使用phpExcel匯入或匯入xls檔案,但是如果一次匯出資料比較大就會出現記憶體溢出錯誤,下面我來總結解決辦法。

phpExcel將讀取的儲存格資訊儲存在記憶體中,我們可以通過

代碼如下 複製代碼

PHPExcel_Settings::setCacheStorageMethod()

來設定不同的緩衝方式,已達到降低記憶體消耗的目的!

1、將儲存格資料序列化後儲存在記憶體中

代碼如下 複製代碼

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


舉例:

第4中方式:

代碼如下 複製代碼

$cacheMethod = PHPExcel_CachedObjectStorageFactory:: cache_to_phpTemp;
$cacheSettings = array( ' memoryCacheSize ' => '8MB'
);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

第5種:

代碼如下 複製代碼

$cacheMethod = PHPExcel_CachedObjectStorageFactory::cache_to_memcache;
$cacheSettings = array( 'memcacheServer' => 'localhost',
'memcachePort' => 11211,
'cacheTime' => 600
);
PHPExcel_Settings::setCacheStorageMethod($cacheMethod, $cacheSettings);

其它的方法

第一個方法,你可以考慮產生多個sheet的方式,不需要產生多個excel檔案,根據你資料總量計算每個sheet匯出多少行, 下面是PHPExcel產生多個sheet方法:

面是PHPExcel產生多個sheet方法:

代碼如下 複製代碼

$sheet = $objPHPExcel->getActiveSheet();

$sheet->setCellValue('A1',$x);

$sheet->setCellValue('B1',$y);


第二個方法,你可以考慮ajax來分批匯出,不用每次重新整理頁面。

代碼如下 複製代碼

export to Excel

$('#export').click(function() {

$.ajax({

url: "export.php",

data: getData(), //這個地方你也可以在php裡擷取,一般讀資料庫

success: function(response){

window.location.href = response.url;

}

})

});

代碼如下 複製代碼


//export.php

$data = $_POST['data'];

$xls = new PHPExcel();

$xls->loadData($formattedData);

$xls->exportToFile('excel.xls');

$response = array(

'success' => true,

'url' => $url

);


header('Content-type: application/json');

echo json_encode($response);

?>

資料量很大的話,建議採用第二種方法,ajax來匯出資料,上面方法簡單給了個流程,具體你自己補充!

http://www.bkjia.com/PHPjc/630726.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/630726.htmlTechArticle我們經常會使用phpExcel匯入或匯入xls檔案,但是如果一次匯出資料比較大就會出現記憶體溢出錯誤,下面我來總結解決辦法。 phpExcel將讀取的單...

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.