У меня странная проблема, связанная с PHP и путем сохранения сеанса. Я настроил в своем php.ini файл session.save_path = "/ tmp", и я знаю, что он настроен правильно, поскольку на сервере я мог ввести следующую команду, и результат команды кажется нормальным.
$ php -i | grep session.save_path
session.save_path => /tmp => /tmp
Однако, когда я пытаюсь запустить сеанс из PHP-кода, я получаю следующую ошибку:
Warning: session_start(): open(/var/lib/php/session/sess_7ktfe84jqca3ga6ftk6fsrurv6, O_RDWR) failed: Permission denied (13)
Таким образом, путь здесь полностью отличается от / tmp, настроенного в php.ini.
Есть ли причина для такого поведения? Я проверил, что в моем коде нет вызова session_save_path для изменения пути сохранения по умолчанию.
Сервер с этой проблемой - это экземпляр AWS EC2.
Вы также можете добавить это в свой эластичный файл beanstalk project.config:
"/etc/httpd/conf.d/php.conf": content: | php_value session.save_path "/ tmp"
который просто установит для вас путь сохранения сеанса
Быстрое решение для этого - поместить следующее перед вашим session_start ();
<?php
$dir = sys_get_temp_dir();
session_save_path($dir);
?>
Вы также можете подключиться через ssh (если вы изначально настроили ключ / пару) и изменить разрешение папки, чтобы она принадлежала пользователю webpp
Я обнаружил проблему и, похоже, проблема с конфигурацией. Я открыл phpinfo на сервере и вижу следующее:
Directive Local Value Master value
session.save_path /var/lib/php/session /tmp
Локальное значение, указывающее / var / lib / php / session, кажется проблемой, поскольку этот каталог не доступен для записи пользователем сервера. Я ничего не знал о локальном и главном значении, и, покопавшись в Google, я прочитал следующее:
«Основное значение» (из php.ini) можно переопределить на «Локальное значение» в httpd.conf, .htaccess или другой конфигурации Apache с помощью директивы php_value.
Итак, после просмотра файлов сервера я нашел /etc/httpd/conf.d/php.conf, который содержит:
#
Apache specific PHP configuration options
those can be override in each configured vhost
#
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
Итак, проблема заключается в том, что этот php.conf перезаписывает конфигурацию php.ini по умолчанию. Я могу прокомментировать эту последнюю строку с "#" и перезапустить сервер, и все снова заработает, как ожидалось.
Надеюсь на эту помощь.