儘管分配了1024MB RAM,PHPExcel 在載入3MB XSLX 檔案時仍然會遇到記憶體耗盡的情況。根本原因在於表示大型電子表格所涉及的記憶體密集型過程。
要解決此問題,可以採用多種最佳化技術:
如果只需要載入特定工作表,請使用setLoadSheetsOnly() 限制讀者讀取的工作表數量。
$objReader->setLoadSheetsOnly([ 'Data Sheet #1', 'Data Sheet #3' ]);
要僅檢索特定的單元格或行,可以使用讀取過濾器。
class MyReadFilter implements PHPExcel_Reader_IReadFilter { // ... implementation } $objReader->setReadFilter(new MyReadFilter());
分塊讀取大型電子表格可以透過僅載入部分資料來最大限度地減少記憶體佔用
$chunkSize = 20; $chunkFilter = new chunkReadFilter(); for ($startRow = 2; $startRow < 65536; $startRow += $chunkSize) { $chunkFilter->setRows($startRow, $chunkSize); $objPHPExcel = $objReader->load($inputFileName); }
將readDataOnly 設為true 只載入單元格值而不格式化數據,減少記憶體使用。
$objReader->setReadDataOnly(true);
單元格快取以壓縮格式儲存單元格對象,顯著減少記憶體消耗,但會犧牲速度。
不要使用迭代器和手動建立數組,請考慮使用 PHPExcel 的 toArray () 或 rangeToArray() 方法可有效產生數組。
以上是如何優化 PHPExcel 以防止載入大型 XLSX 檔案時記憶體耗盡?的詳細內容。更多資訊請關注PHP中文網其他相關文章!