質問 > 管理機能 > [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る |
管理機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
goat |
投稿日時: 2021/1/19 22:21
対応状況: 解決済
|
半人前 登録日: 2020/11/22 居住地: 投稿: 26 |
[3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る ▼テンプレート
[EC-CUBE] 3.0.18 [レンタルサーバ] heteml [OS] Linux [PHP] 5.4.45 [データベース] MySQL 5.6.23 [WEBサーバ] Apache [ブラウザ] Google Chrome [現象] お世話になっております。 EC CUBE 3.0.18で商品登録CSVアップロードを行う際、ファイルサイズが400KB前後を超えるとHTTP500エラーが検出されてしまいます。 なお、アップロードから30秒程度でエラーが出るため、回線等の問題でタイムアウトしていることは考えづらいです。 https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=19049&forum=11 上記スレッドを参考にECCUBEのログも確認してみましたが、エラーは出ていないため原因も皆目見当がつきません。 大変恐れ入りますが、皆様のお知恵をお借りできれば幸いでございます。 |
kishikawa |
投稿日時: 2021/1/20 9:54
対応状況: −−−
|
一人前 登録日: 2018/12/20 居住地: 松戸 投稿: 89 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る メモリのエラーはphpのエラーログやapacheのエラーログに出ていますので、そちらを確認するとわかるかもしれません。
ログの場所はapacheの設定か、php.iniの設定で確認できると思います。
|
goat |
投稿日時: 2021/1/22 20:54
対応状況: −−−
|
半人前 登録日: 2020/11/22 居住地: 投稿: 26 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る kishikawa様
ご返信ありがとうございます。 ご指摘の通り、phpのエラーログを確認してみましたところ、次のようなエラーが出ておりました。 PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 78 bytes) in [ECCUBEインストールディレクト]リ/src/Eccube/Log/Monolog/Processor/IntrospectionProcessor.php on line 44 PHPの割り当てメモリを超えているという意味のエラーだと思うのですが、この際にアップロードしようとしたファイルサイズは約900KBのcsvファイルです。 PHP.iniの割り当てメモリはいじっていないため、デフォルトの128MBになっていると思われますが、恐らく割り当てメモリの問題ではないと考えております。 大変恐れ入りますが、どういった原因が考えられるかお知恵をお借り出来ますでしょうか。 |
468 |
投稿日時: 2021/1/23 9:31
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る PHPのメモリはプログラム実行時の変数やインスタンス化したオブジェクト等を格納している領域を指している為、
アップロードしたファイルサイズとイコールではありません。 その為、Allowed memory sizeのエラーログが出ている事からPHPのメモリー制限(memory_limit)に引っかかっているのだと思われます。 例えば、CSVの商品件数を50件など少ないデータでアップロードを実行すると正常に処理は完了しますか? 件数が増えてエラーとなるようであれば、やはりメモリー制限の上限に達していると思われます。
|
kishikawa |
投稿日時: 2021/1/25 11:24
対応状況: −−−
|
一人前 登録日: 2018/12/20 居住地: 松戸 投稿: 89 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る 確認が遅れてしまいましたm(_ _)m
468様のおっしゃるとおりで、 ファイルサイズだけがメモリを使用するサイズではありません。 特にDoctrineは1エンティティのメモリ使用量が大きく、 Product.phpの数が増える(=商品の件数が増える)ほど、 ファイルサイズ以上にメモリの占有が増えます。 memory_limitに引っかかることを回避するためには、 memory_limitを増やすことですが、 その他にも Doctrineを使用せず、配列によるCSVへの書き込みや、 1エンティティ取得したらメモリをクリアにするDoctrineの手法などを利用するのがよいと思います。 Doctrine\ORMでの巨大なオブジェクトの集合の扱い https://qiita.com/issei-m/items/a2c322eafe6345be00b5 Iterating Large Results for Data-Processing https://https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/batch-processing.html#iterating-large-results-for-data-processing
|
goat |
投稿日時: 2021/1/25 17:35
対応状況: −−−
|
半人前 登録日: 2020/11/22 居住地: 投稿: 26 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る 468様
ご返信ありがとうございます。 なるほどですね。 確かに、商品件数を減らして300KB程度に抑えるとアップロードは問題なく行えます。 私もそうではないかと思っていましたので、確信に変わりました。 契約サーバー会社の方針か、PHP.iniのPHPメモリ割り当て量を増やすことができないので、サーバー会社に相談してみることにします。 助かりました。 ありがとうございます。 |
goat |
投稿日時: 2021/1/25 17:37
対応状況: −−−
|
半人前 登録日: 2020/11/22 居住地: 投稿: 26 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る kishikawa様
ご返信ありがとうございます。 丁寧なご解説ありがとうございます。 それに加え、メモリ割り当て上限を増やす以外の代替案をご教示くださり、ありがとうございます。 ORMに関して全く知識を持ち合わせていないため、すぐに役立てることは難しそうですが、後学のためになりました。 助かりました。 ありがとうございます。 |
kishikawa |
投稿日時: 2021/1/26 9:53
対応状況: −−−
|
一人前 登録日: 2018/12/20 居住地: 松戸 投稿: 89 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る サーバ側のphp.iniの設定以外でも、
コードの中でメモリ割り当てを変更することもできます。 CSVダウンロードのコントローラに以下のコードを入れることで そのリクエストだけメモリ割り当てを変更することができます。
|
goat |
投稿日時: 2021/1/28 21:41
対応状況: −−−
|
半人前 登録日: 2020/11/22 居住地: 投稿: 26 |
Re: [3.0.18]商品登録CSVアップロードでHTTP 500エラーが出る kishikawa様
ご返信ありがとうございます。 そんな技があったんですね。 しかしながら、残念なことにサーバー会社の意向で、128MBを超えてのメモリ割り当てができないと返答がありましたので、当面の間は登録項目数を抑えて登録していこうと思います。 ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |