Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CSVを出力するとシステムエラーになる #5754

Closed
ghost opened this issue Aug 31, 2022 · 14 comments
Closed

CSVを出力するとシステムエラーになる #5754

ghost opened this issue Aug 31, 2022 · 14 comments
Milestone

Comments

@ghost
Copy link

ghost commented Aug 31, 2022

概要(Overview)

EC-CUBEインストール初期状態のCSV出力機能でシステムエラーが発生する。

期待する内容(Expect) or 要望 (Requirement)

再現手順(Procedure)

商品一覧画面の「CSVダウンロード」ボタンを押す。
出力されたCSVの中身を見るとエラー画面のHTMLが書き込まれている。
※他のCSV出力でも同様

環境 (environment)

  • さくらのレンタルサーバー
  • EC-CUBE: 4.2.0-beta2
  • PHP: 7.4.30
  • DB:
    • MySQL 5.7.37

関連情報 (Ref)

エラーログ内容

[Eccube\Log\Logger:log:64] - システムエラーが発生しました。 ["Failed to start the session because headers have already been sent by \"/home/test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php\" at line 387.","/home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php",145,"#0 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php(352): Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage->start()\n#1 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(261): Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage->getBag('attributes')\n#2 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(283): Symfony\\Component\\HttpFoundation\\Session\\Session->getBag('attributes')\n#3 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(77): Symfony\\Component\\HttpFoundation\\Session\\Session->getAttributeBag()\n#4 /home/test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php(460): Symfony\\Component\\HttpFoundation\\Session\\Session->get('eccube.admin.pr...', Array)\n#5 /home/test/www/eccube-4.2.0-beta2/src/Eccube/Controller/Admin/Product/ProductController.php(972): Eccube\\Service\\CsvExportService->getProductQueryBuilder(Object(Symfony\\Component\\HttpFoundation\\Request))\n#6 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/StreamedResponse.php(109): Eccube\\Controller\\Admin\\Product\\ProductController->Eccube\\Controller\\Admin\\Product\\{closure}()\n#7 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Response.php(394): Symfony\\Component\\HttpFoundation\\StreamedResponse->sendContent()\n#8 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php(41): Symfony\\Component\\HttpFoundation\\Response->send()\n#9 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(270): Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener->onKernelResponse(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\EventDispatcher\\EventDispatcher))\n#10 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(230): Symfony\\Component\\EventDispatcher\\EventDispatcher::Symfony\\Component\\EventDispatcher\\{closure}(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\EventDispatcher\\EventDispatcher))\n#11 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(59): Symfony\\Component\\EventDispatcher\\EventDispatcher->callListeners(Array, 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent))\n#12 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(186): Symfony\\Component\\EventDispatcher\\EventDispatcher->dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response')\n#13 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(174): Symfony\\Component\\HttpKernel\\HttpKernel->filterResponse(Object(Symfony\\Component\\HttpFoundation\\StreamedResponse), Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#14 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#15 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#16 /home/test/www/eccube-4.2.0-beta2/index.php(83): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#17 {main}"]
@chihiro-adachi chihiro-adachi added this to the 4.2.0 milestone Aug 31, 2022
@nanasess
Copy link
Contributor

nanasess commented Sep 1, 2022

何らかの原因で、セッションが正常に開始されていないようです。
環境変数(.env)を以下のように設定して、どうなるか試していただくことは可能でしょうか?

APP_ENV=dev
APP_DEBUG=1

@chihiro-adachi
Copy link
Contributor

手元の環境では再現しませんでした。

EC-CUBE: 4.2.0-beta2-20220829をコマンドラインからインストール
PHP: 7.4.27
DB:PostgreSQL 10

APP_ENV: prod / dev いずれも再現せず

@chihiro-adachi
Copy link
Contributor

@sw-shigeyoshi-koyama
上記ご確認お願いいたします。

@ghost
Copy link
Author

ghost commented Sep 1, 2022

APP_ENV=dev
APP_DEBUG=1

環境変数を上記に変更してキャッシュクリア後にそれぞれ試しました。

  • 商品一覧 > CSVダウンロードを実行
  • ChromeでCookieを削除してから管理画面へ再ログイン。もう一度CSVダウンロード

結果:どちらも挙動は変わらず出力されたファイルに同様のエラーが書き込まれました。

/var/log/dev/site.logより抜粋

___ *** CRITICAL ERROR *** ==> REQUEST _____________________________________________________________
Uncaught PHP Exception RuntimeException: "Failed to start the session because headers have already
  been sent by "/home/test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php" at
  line 387." at
  /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
  line 145
--> exception:
      class: RuntimeException
      message: 'Failed to start the session because headers have already been sent by "/home/test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php" at line 387.'
      code: 0
      file: /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php
      line: 145
      trace: "#0 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php(352): Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage->start()\n#1 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(261): Symfony\\Component\\HttpFoundation\\Session\\Storage\\NativeSessionStorage->getBag('attributes')\n#2 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(283): Symfony\\Component\\HttpFoundation\\Session\\Session->getBag('attributes')\n#3 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/Session.php(77): Symfony\\Component\\HttpFoundation\\Session\\Session->getAttributeBag()\n#4 /home/test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php(460): Symfony\\Component\\HttpFoundation\\Session\\Session->get('eccube.admin.pr...', Array)\n#5 /home/test/www/eccube-4.2.0-beta2/src/Eccube/Controller/Admin/Product/ProductController.php(972): Eccube\\Service\\CsvExportService->getProductQueryBuilder(Object(Symfony\\Component\\HttpFoundation\\Request))\n#6 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/StreamedResponse.php(109): Eccube\\Controller\\Admin\\Product\\ProductController->Eccube\\Controller\\Admin\\Product\\{closure}()\n#7 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Response.php(394): Symfony\\Component\\HttpFoundation\\StreamedResponse->sendContent()\n#8 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/EventListener/StreamedResponseListener.php(41): Symfony\\Component\\HttpFoundation\\Response->send()\n#9 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/Debug/WrappedListener.php(117): Symfony\\Component\\HttpKernel\\EventListener\\StreamedResponseListener->onKernelResponse(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher))\n#10 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(230): Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener->__invoke(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher))\n#11 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(59): Symfony\\Component\\EventDispatcher\\EventDispatcher->callListeners(Array, 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent))\n#12 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php(154): Symfony\\Component\\EventDispatcher\\EventDispatcher->dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response')\n#13 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(186): Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher->dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response')\n#14 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(174): Symfony\\Component\\HttpKernel\\HttpKernel->filterResponse(Object(Symfony\\Component\\HttpFoundation\\StreamedResponse), Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#15 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#16 /home/test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#17 /home/test/www/eccube-4.2.0-beta2/index.php(83): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#18 {main}"
      previous: null

補足になるのですが、Dockerでのローカル環境構築時にこのエラーは発生せず
この商用環境だと各種バージョンのコマンドラインインストールやパッケージ版でのWebインストールなども試しましたが全てエラーになっているような感じです。私の何かしら操作ミスでしたら申し訳ないのですが...。

@nanasess
Copy link
Contributor

nanasess commented Sep 6, 2022

@sw-shigeyoshi-koyama
https://github.com/EC-CUBE/ec-cube/releases/tag/4.2.0-beta2-20220905 をさくらのレンタルサーバー(スタンダードプラン)にインストールしてみましたが、正常に CSV ダウンロードできました。
何日のバージョンの beta2 をお使いでしたでしょうか?

@ghost
Copy link
Author

ghost commented Sep 6, 2022

@nanasess
Copy link
Contributor

nanasess commented Sep 6, 2022

@sw-shigeyoshi-koyama phpinfo() の情報をいただけますでしょうか。PHPがCGIモードで動作してませんでしょうか?

@ghost
Copy link
Author

ghost commented Sep 7, 2022

@nanasess phpinfoで確認したところモジュールモードになっています。

image
image
image

@nanasess
Copy link
Contributor

nanasess commented Sep 7, 2022

@sw-shigeyoshi-koyama ありがとうございます。 phpinfo() の session の項目を見せていただけますでしょうか。
また、 php.ini の設定は何か変更されていませんでしょうか?

@ghost
Copy link
Author

ghost commented Sep 8, 2022

@nanasess
sessionの項目です。
※4.1.2はこれと同じ設定で正常にcsv出力されました。
image

php.ini(一部意味のない項目もあり)

memory_limit = 512M
max_execution_time = 180
date.timezone = Asia/Tokyo
extension = sodium
extension = apcu
extension = mcrypt
extension = opcache

@nanasess
Copy link
Contributor

@sw-shigeyoshi-koyama php.ini の設定は問題なさそうですね。
以下の修正を元に戻してみるとどうなりますでしょうか?
1ff28cc

@ghost
Copy link
Author

ghost commented Sep 13, 2022

@nanasess
修正箇所を元に戻して動作確認しました。
相変わらず同じ個所でエラーが発生しますが、例外が発生する場所が変わりますね。

/var/log/dev/site.logより抜粋

___ *** CRITICAL ERROR *** ==> REQUEST _____________________________________________________________
Uncaught PHP Exception ErrorException: "Warning: Cannot modify header information - headers
  already sent by (output started at
  /home/sw-test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php:387)" at
  /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/SessionUtils.php line
  52
--> exception:
      class: ErrorException
      message: 'Warning: Cannot modify header information - headers already sent by (output started at /home/sw-test/www/eccube-4.2.0-beta2/src/Eccube/Service/CsvExportService.php:387)'
      code: 0
      file: /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-foundation/Session/SessionUtils.php
      line: 52
      trace: "#0 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php(153): Symfony\\Component\\HttpFoundation\\Session\\SessionUtils::popSessionCookie('eccube', '6e6ee0c76c42679...')\n#1 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/Debug/WrappedListener.php(117): Symfony\\Component\\HttpKernel\\EventListener\\AbstractSessionListener->onKernelResponse(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher))\n#2 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(230): Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener->__invoke(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Debug\\TraceableEventDispatcher))\n#3 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/EventDispatcher.php(59): Symfony\\Component\\EventDispatcher\\EventDispatcher->callListeners(Array, 'kernel.response', Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent))\n#4 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php(154): Symfony\\Component\\EventDispatcher\\EventDispatcher->dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response')\n#5 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(186): Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher->dispatch(Object(Symfony\\Component\\HttpKernel\\Event\\ResponseEvent), 'kernel.response')\n#6 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(174): Symfony\\Component\\HttpKernel\\HttpKernel->filterResponse(Object(Symfony\\Component\\HttpFoundation\\StreamedResponse), Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#7 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/HttpKernel.php(75): Symfony\\Component\\HttpKernel\\HttpKernel->handleRaw(Object(Symfony\\Component\\HttpFoundation\\Request), 1)\n#8 /home/sw-test/www/eccube-4.2.0-beta2/vendor/symfony/http-kernel/Kernel.php(202): Symfony\\Component\\HttpKernel\\HttpKernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request), 1, true)\n#9 /home/sw-test/www/eccube-4.2.0-beta2/index.php(83): Symfony\\Component\\HttpKernel\\Kernel->handle(Object(Symfony\\Component\\HttpFoundation\\Request))\n#10 {main}"
      previous: null

@nanasess
Copy link
Contributor

@sw-shigeyoshi-koyama mcrypt extension は PHP7.2 以降削除されています。
phpinfo() の情報をみると、 mcrypt.ini が読み込まれているようです。
こちらを削除してみていただくことは可能でしょうか?

@chihiro-adachi
Copy link
Contributor

再現を確認できましたので、#5892 で修正しています。
検索条件構築時にセッションにアクセスしており、その際に session already been sentのエラーが発生していたようです。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants