Prestashop이라는 CMS를 설치했습니다. 이 CMS는 특정 도메인에서 실행되며 Apache의 특정 VirtualHost 구성, 다른 PHP 애플리케이션(Wordpress)이 있는 서버에서 실행됩니다.
관리자로 로그인하려고 하면 다음 오류가 표시됩니다(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); 오류 메시지 앞에 포함된 모든 파일에 있습니다.