ホームページ >バックエンド開発 >PHPチュートリアル >大きなファイルを処理するときにphpexcelがメモリを大量に消費する問題の解決策を探しています

大きなファイルを処理するときにphpexcelがメモリを大量に消費する問題の解決策を探しています

WBOY
WBOYオリジナル
2016-06-23 13:48:391762ブラウズ

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 ストリーミング ファイルを使用しました。


呼び出しメソッドは次のようになります。

phpexcel ライブラリは消費量が多すぎます。すべての計算はメモリにキャッシュされます

ini_set('memory_limit','1024M'); は 1W 個のデータしかエクスポートできません

最終的には CSV ストリーミング ファイルを使用することで、世界はより静かになりました



ヒント、書き込み方法を使用した後、エラーは発生しませんでしたが、メモリが正常に破壊されませんでした。プラグインなしで直接エクスポートできる種類の CSV について話していますか。 phpexcelでCSVエクスポート?ここ読んでます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。