Когда пользователь входит в приложение Symfony, информация о сеансе сохраняется на веб-сервере.По умолчанию Symfony использует собственный механизм сессий PHP, хранящий информацию о сессиях в файле в / var / lib / php / session / в системах Linux.Ваше сообщение об ошибке выводится PHP и означает, что он получил ошибку разрешений при создании или повторном открытии файла сеанса.
Ошибка появляется только периодически, поскольку PHP удаляет старые файлы сеанса случайным образом примерно каждые 1/100 или 1/1000загрузка страницы.(В некоторых вариантах Linux вместо старых файлов сеанса вместо этого используется задание cron.)
https://symfony.com/doc/current/session.html говорит: «некоторые параметры, связанные с истечением срока действия сеанса, могут работать не так, как ожидается, если другие приложения, которые пишут вдля одного и того же каталога заданы короткие настройки максимального времени жизни. "
Старайтесь избегать записи нескольких процессов в один каталог сеансов.Я думаю, что получил сообщение об ошибке, потому что веб-сервер Apache и php bin/console server:start
работали одновременно.Один процесс мог удалить файл сеанса другого процесса.
См. Руководство по PHP и Руководство по Symfony , чтобы узнать, как настроить запись в отдельные каталоги.Например, я изменил {Symfony directory}/config/packages/framework.yaml
:
# Enables session support. Note that the session will ONLY be started if you read or write from it.
# Remove or comment this section to explicitly disable session support.
session:
# handler_id: ~
cookie_secure: auto
cookie_samesite: lax
handler_id: 'session.handler.native_file'
save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
gc_probability: 100 # Run garbage collection always for
gc_divisor: 100 # investigating this problem only.
Другая возможность - проблема в вашем коде Symfony, которая может вызвать сообщение об ошибке.В документации Symfony говорится, что нельзя вызывать функции сеанса PHP, такие как session_start()
напрямую, так как классы Symfony вызывают их.Ошибка в моем коде вызвала исключение, которое, как я предполагаю, вызвало сообщение об ошибке.
Вопросы, связанные с переполнением стека: cleanup-php-session-files и how-do-php-знать, когда нужно удалить сеанс
Для тех, кто знаком с кодом C, см. строку исходного кода интерпретатора PHP, которая печатает ошибку здесь
Надеюсь, это поможет!