大きなファイルを処理するときにphpexcelがメモリを大量に消費する問題の解決策を探しています
phpexcelのメモリ処理メカニズムにより、Excelファイル内の行または列が多すぎると、占有されるメモリが数百になります。サーバーのメモリの問題により、それ以上のMBを申請することはできません。たとえば、Excelファイルまたはシートページの1つを処理した後、メモリを解放するなど、根本的な解決を試みるしかありません。次のプロセスをインターネットで調べましたが、誰も詳しく書いておらず、マスターの助けを本当に楽しみにしています。 。
追記:
1. 私が使用しているバージョンは 1.76 で、ファイルの使用などのパラメータを設定しましたが、まったく機能しません
2. 小さなファイルが調整されました。 🎜>3. 上 メモリ制限の増加については説明する必要はありません
Excel コードは次のとおりです: 実行エラー
致命的なエラー: E:wampwwwuploadifyPHPExcel.php の 796 行目でオブジェクト コンテキストにないときに $this を使用します
function parse_excel_file($filename)
{
$php_reader = new PHPExcel_Reader_Excel2007();
$php_reader = PHPExcel_IOFactory::creat eReaderForFile( $filename);
$php_excel = $php_reader->load($filename);
$current_sheet = $php_excel->getSheet(0);
$all_column = $current_sheet->getHighestColumn( );
$all_row = $current_sheet->getHighestRow();
$list = array();
for ($row_index = 2; $ row_index {
$row_val = '';
for ($col_index = 'A'; $col_index {
$addr = $col_index . $row_index;
$cell = $current_sheet->getCell($addr)->getValue();
if ($cell instanceof PHPExcel_RichText)
{
$cell = $cell->__toString( );
$row_val = $row_val . ',' . $cell;
}
array_push($list, $row_val);
}
PHPExcel:: Destroy(); return $list;
}
次のコードを phpexcel.php に追加します:
public function Destroy() {
foreach($this-> ;_workSheetCollection as $index => $dummy) {
$this->_workSheetCollection[$index]->Destroy();
$this ->_workSheetCollection[$index] = null;
}
}
次のコードを worksheet.php に追加します。
public function Destroy() {
foreach($this) ->_cellCollection as $index => $dummy) {
$this->_cellCollection[$index] = null;
}
}
--- ---ソリューションのアイデア--------- -------------一度にエクスポートできるアイテムの数はいくつですか?
------解決策----------------------呼び出しメソッドは次のようにする必要があります: $php_excel - >Destroy();
phpexcel ライブラリはメモリを大量に消費するため、すべての計算はメモリにキャッシュされます
ini_set('memory_limit','1024M') は 1W 個のデータしかエクスポートできませんでした ついにCSVストリーミングファイルを使用して、世界はずっと静かになりました