Раздел вопрос-ответ PHP Fatal error: You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1

На shared хостинге все страницы symfony сайта начали падать с ошибкой:

PHP Fatal error:  Uncaught Doctrine\\Common\\Annotations\\AnnotationException: You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1 

Прикладываю полный трейс:

[Mon Apr 24 19:51:44 201] [error] [client 93.84.26.140] PHP Fatal error: 
Uncaught Doctrine\\Common\\Annotations\\AnnotationException: 
You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1. 
in /public_html/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php:183
Stack trace:
#0 /public_html/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationReader.php(162): Doctrine\\Common\\Annotations\\AnnotationException::optimizerPlusSaveComments()
#1 /public_html/var/cache/prod/appProdProjectContainer.php(3199): Doctrine\\Common\\Annotations\\AnnotationReader->__construct()
#2 /public_html/var/cache/prod/appProdProjectContainer.php(282): appProdProjectContainer->getAnnotations_ReaderService()
#3 /public_html/var/cache/prod/classes.php(3513): appProdProjectContainer->getAnnotationReaderService()
#4 /public_html/var/cache/prod/appProdProjectContainer.php(2168): Symfony\\Component\\DependencyInjection\\Container->get('annotation_read...') in /public_html/vendor/doctrine/annotations/lib/Doctrine/Common/Annotations/AnnotationException.php on line 183

Почему ошибка возникла? Как исправить?

share

1 ответ

Хостер в какой то момент выключил opcache.save_comments.

-bash-4.1$ less /etc/php.d/10-opcache.ini | grep save_comment
;opcache.save_comments=1

Можно открыть phpinfo() и увидеть подключен ли opcache (акселератор, кэширующий байт-код) и его параметры.

Если opcache.enabled=1, а опция opcache.save_comments установлена в 0, doctrine не будет работать как ожидается, т.к. использует комментарии для своей работы (В entitiy). Также в symfony роуты можно делать через комментарии.

Выключенный save_comments говорит о том, что комментарии в коде перед кэшированием нужно удалить. А, как мы выяснили, обработка комментариев необходима для корректной работы symfony.

Проверить opcache.save_comments значение в php.ini

Так же можно проверить на php значение:

ini_get('opcache.save_comments')

Имейте в виду, что для cli скриптов может быть другое значение и скорее всего opcache для cli вообще не используется.

Решением проблемы:

You have to enable opcache.save_comments=1 or zend_optimizerplus.save_comments=1

является включение директивы opcache.save_comments.

В случае shared хостинга, скорее всего, придётся писать хостеру с просьбой включить opcache.save_comments.

Т.к.:

ini_set('opcache.save_comments', '1');

не сработает.

 

Добавить комментарий
    как минимум 5 символов

    icon Вход в систему

    зарегистрироваться
    НОВЫЕ ПОЛЬЗОВАТЕЛИ