Ошибки работы с PHP сессиями в Unix/Linux
Хочу описать статью с возможными ошибками работы PHP и сессиями в Unix/Linux. Думаю многие сталкиваются и будет полезно знать как решать ту, или иную ошибку.
Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел:
2017/12/08 21:15:48 [error] 40014#40014: *395 FastCGI sent in stderr: "PHP message: PHP Warning: require_once(/etc/zabbix/web/maintenance.inc.php): failed to open stream: Permission denied in /usr/share/zabbix/include/classes/core/ZBase.php on line 269
-=== Ошибка 1 ===-
Можно увидить следующую ошибку:
Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.
Возникла у меня при установке phpmyadmin.
Так же, если имеется cPanel, может возникнуть такая же ошибка, я описывал решение в моей статье:
ошибка в phpMyAdmin «Cannot start session without errors»
-=== Ошибка 2 ===-
При работе с апачем, я получил:
Warning: session_start() [function.session-start]: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in /var/www/vhosts/httpdocs/index.php on line 6 Warning: Unknown: open(/var/lib/php/session/sess_eqbchncji8kj22f0iqa9g3v7u2, O_RDWR) failed: Permission denied (13) in Unknown on line 0 Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0
-=== Ошибка 3 ===-
Получил еще ошибку:
FastCGI sent in stderr: “PHP message: PHP Warning: Unknown: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/var/lib/php/session) in Unknown on line 0” while reading upstream, client: 37.***.***.56, server: rtfm.co.ua, request: “POST /wp-admin/admin-ajax.php HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9009”, host: “rtfm.co.ua”, referrer: “http://linux-notes.org/wp-admin/post.php?post=5496&action=edit&message=10”
Другие ошибки я буду добавлять по мере их возникновения.
Решения ошибок работы с PHP сессиями в Unix/Linux
Ну что, пришли к решению. Первое что необходимо сделать, — так проверить путь куда сохраняются сессии, для этого, выполните:
$ php -i |grep save_path session.save_path => /var/lib/php/session => /var/lib/php/session
Как видно у меня этот путь рассположен в /var/lib/php/session директории.
Проверим права на данную директорию:
# ls -alh /var/lib/php/session
Смотрим от какого юзера идет выполнение php кода:
# ps aux |grep php-fpm
PS: Или, можно зайти в ваш пул php-fpm и найти пользователя от которого он запущен!
Решение довольно примитивное. Для начала, стоит создать папку под использующие сессии (если ее нет еще) и выставить права:
# mkdir /var/lib/php/session # chmod 1777 /var/lib/php/session
И так же, выставляем владельца и группу:
# chown root:www /var/lib/php/session # chown -R www: /var/cache/nginx
ИЛИ:
# chmod o+rw /var/lib/php/session
Потом, открываем ваш php.ini и находим строку:
;session.save_path = "/tmp"
И нужно выполнить расскоменчивание данной строки.
PS: Возможно, нужно будет выставить права и владельца!
Если вы используете выделенные пулы под свои php- проекты, то стоит поискать данную строку в:
# grep -lR 'php_value' /etc/php-fpm.d
Если покажет файлы, то стоит посмотреть привести к:
[...] php_value[session.save_handler] = files php_value[session.save_path] = /var/lib/php/session [...]
Перезапускаем php-fpm службу:
# service php-fpm restart
Для апача, следуюет указать следующие строки:
php_value session.save_handler "files" php_value session.save_path "/var/lib/php/session"
а поиск файла можно сделать так:
# grep -lR 'php_value' /etc/
И тоже, выполнить перезапуск службы:
# service httpd restart
Вот и все решение! А у меня на этом статья «Ошибки работы с PHP сессиями в Unix/Linux» завершена.