CMS 使用時の「セッションの開始に失敗しました: PHP によって既に開始されています」エラー

CMS 使用時の「セッションの開始に失敗しました: PHP によって既に開始されています」エラー

Prestashop という CMS をインストールしました。これは、他の PHP アプリケーション (Wordpress) がインストールされているサーバー上の Apache で、特定のドメインと特定の VirtualHost 構成で実行されます。

管理者ユーザーとしてログインしようとすると、次のエラーが表示されます (これは Apache エラー ログです)。

[Wed Jan 18 00:09:16.059190 2017] [:error] [pid 31253] [client xx.xx.xx.xx:63129] PHP Fatal error: Uncaught exception 'RuntimeException' with message 'Failed to start the session: already started by PHP.' in /opt/wp/apps/prestashop/app/cache/prod/classes.php:108\nStack trace:\n#0 /opt/wp/apps/prestashop/app/cache/prod/classes.php(483): Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage->start()\n#1 /opt/wp/apps/prestashop/vendor/symfony/symfony/src/Symfony/Component/Security/Csrf/TokenStorage/SessionTokenStorage.php(90): Symfony\Component\HttpFoundation\Session\Session->start()\n#2 /opt/wp/apps/prestashop/vendor/symfony/symfony/src/Symfony/Component/Security/Csrf/CsrfTokenManager.php(54): Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage->hasToken('ANONYMOUS_USER')\n#3 /opt/wp/apps/prestashop/app/cache/prod/classes.php(8196): Symfony\Component\Security\Csrf\CsrfTokenManager->getToken('ANONYMOUS_USER')\n#4 /opt/wp/apps/prestashop/classes/Link.php(722): PrestaShopBundle\Service\Routing\Router->generate('admin_product_c...')\n#5 /opt/wordpre in /opt/wp/apps/prestashop/app/bootstrap.php.cache on line 3216, referer: http://www.xxxxx.xx/adminXXX/index.php?controller=AdminLogin&token=181fa270d47386a8d523bdea6213932c&redirect=AdminDashboard'

このエラーは Prestashop の安定版リリースによって取得されるため、コードの問題によるものではないと思います。WordPress が最初にセッションを開き、その後 Symfony (Prestashop) がセッションがすでに開いていることを検出したということでしょうか。メイン ドメインは実際には WP によって提供されています。また、Prestashop VirtualHost の特定のパスを定義しようとしています。https://stackoverflow.com/questions/18262878/how-to-prevent-php-sessions-being-shared-between-different-apache-vhosts 残念ながら動作しません。

PHP セッションの auto_start パラメータは php.ini で 0 に設定されています。

この問題をどう解決すればよいかわかりません。Apache または PHP の設定に依存する可能性がありますか?

どうもありがとう。

答え1

session_start コマンドの前に、PHP の外側に文字がいくつかあります。おそらく、閉じタグ ?> の後のスペースです。

このため、終了タグはファイルの末尾に置かないでください。これは PSR2 標準で規定されています。

すべてのファイルを正しい FTP 設定でアップロードしていることを確認し、誤って変更されていないか確認してください。最悪の場合、エラー メッセージの前に含まれるすべてのファイルに var_dump(headers_sent().__FILE_d); を配置します。

関連情報