ホームページ >バックエンド開発 >PHPチュートリアル >大きなファイルを処理するときにphpexcelがメモリを大量に消費する問題の解決策を探しています
phpexcel はメモリ処理機構であるため、Excel ファイル内の行または列が多すぎると、占有されるメモリが瞬時に数百 M になります。サーバーの都合により、追加のメモリを申請することができないため、これしかできません。根本的に問題を解決するか回避してみてください。たとえば、Excel ファイルまたはシートの 1 ページを処理した後、メモリが解放され、次の処理が可能になると言われています。インターネットで調べましたが、そうではありません。専門家に詳しく書いてもらい、楽しみにしています。 。
PS:
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::createReaderForFile($filename);
$current_sheet = $php_excel->getSheet (0);
$all_column = $current_sheet->getHighestColumn();
$list = array(); = $all_row; $row_index++)
{
$row_val = '';
for ($col_index = 'A'; $col_index $addr = $col_index
$cell = $current_sheet->getCell ($addr)->getValue();
if (PHPExcel_RichText の $cell インスタンス)
$cell = $cell->toString();
$row_val = $row_val . ',' . $cell;
array_push($list, $row_val);
return $list;
public function Destroy() {
foreach($this ->_workSheetCollection as $index => $dummy) {
$this->_workSheetCollection[$index]->Destroy(); $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 ストリーミング ファイルを使用しました。
ini_set('memory_limit','1024M'); は 1W 個のデータしかエクスポートできません
最終的には CSV ストリーミング ファイルを使用することで、世界はより静かになりました
ヒント、書き込み方法を使用した後、エラーは発生しませんでしたが、メモリが正常に破壊されませんでした。プラグインなしで直接エクスポートできる種類の CSV について話していますか。 phpexcelでCSVエクスポート?ここ読んでます