simplexlsx クラスを使用して 38879 行のデータ (1 シート) を読み取っていますが、メモリに問題がありました (メモリ不足)。私のサーバーのメモリサイズは 48 GIGS で、memory_limit (php.ini) を 9000MB に設定しましたが、問題はまだあります! 私が何をすべきか教えてもらえますか?
2 に答える
SimpleXLSX と PHPExcel は、多くの点で非常に優れていますが、大きなスプレッドシートを読み取るのはどちらも苦手です (すべてが得意というわけではありません!)。
私は同じ問題に直面し、PHPExcel の最適化 (キャッシュ、データのチャンクの読み取りなど) を使用しても、うまくいきませんでした。メモリ不足のエラーは修正されましたが、大きなファイルではない読み込みに永遠に時間がかかりました。
そのため、このスケールの問題を解決するためにライブラリを作成することになりました。試してみて、それが役立つかどうかお知らせください: https://github.com/box/spout
特定の理由がない限り、制限を増やすことは、数千行のデータを実行しているものを処理する方法ではありません。これは、コード内のメモリのひどい浪費が原因です。状況に応じて、スクリプトが行の巨大な配列(またはオブジェクト)を作成している可能性があります。メモリ制限を増やすのではなく、コードを変更してメモリ効率を高めることをお勧めします。
SimpleXLSXのことは聞いたことがありませんが、問題が発生したことのないPHPExcelを使用しました。PHPExcelを使用して改良するのがそれほど手間がかからない場合は、それを使用することをお勧めします。