Назад | Перейти на главную страницу

AWS EC2 PHP session_start с отказом в разрешении

У меня странная проблема, связанная с 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 по умолчанию. Я могу прокомментировать эту последнюю строку с "#" и перезапустить сервер, и все снова заработает, как ожидалось.

Надеюсь на эту помощь.