Ошибки работы с PHP сессиями в Unix/Linux

Обновлял заббикс и после его обновления, перестал корректно работать, посмотрел лог и увидел:

sh
1 lines
 
 
 
 
 
 
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 ===-

Можно увидить следующую ошибку:

sh
1 lines
 
 
 
 
 
 
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 ===-

При работе с апачем, я получил:

sh
3 lines
 
 
 
 
 
 
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 ===-

Получил еще ошибку:

sh
1 lines
 
 
 
 
 
 
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 0while 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: “https://linux-notes.org/wp-admin/post.php?post=5496&action=edit&message=10
 
 
 
 
 

Другие ошибки я буду добавлять по мере их возникновения.

 

Решения ошибок работы с PHP сессиями в Unix/Linux

Ну что, пришли к решению. Первое что необходимо сделать, — так проверить путь куда сохраняются сессии, для этого, выполните:

sh
3 lines
 
 
 
 
 
 
$·php -i |grep save_path
 
session.save_path => /var/lib/php/session => /var/lib/php/session
 
 
 
 

Как видно у меня этот путь рассположен в /var/lib/php/session директории.

Проверим права на данную директорию:

sh
1 lines
 
 
 
 
 
 
#·ls -alh /var/lib/php/session
 
 
 
 

Смотрим от какого юзера идет выполнение php кода:

sh
1 lines
 
 
 
 
 
 
#·ps aux |grep php-fpm
 
 
 
 

PS: Или, можно зайти в ваш пул php-fpm и найти пользователя от которого он запущен!

Решение довольно примитивное. Для начала, стоит создать папку под использующие сессии (если ее нет еще) и выставить права:

sh
2 lines
 
 
 
 
 
 
#·mkdir /var/lib/php/session
#·chmod 1777 /var/lib/php/session
 
 
 
 

И так же, выставляем владельца и группу:

sh
2 lines
 
 
 
 
 
 
# chown root:www /var/lib/php/session
# chown -R www: /var/cache/nginx
 
 
 
 

ИЛИ:

sh
1 lines
 
 
 
 
 
 
# chmod o+rw /var/lib/php/session
 
 
 
 

Потом, открываем ваш php.ini и находим строку:

sh
1 lines
 
 
 
 
 
 
;session.save_path = "/tmp"
 
 
 
 

И нужно выполнить расскоменчивание данной строки.

PS: Возможно, нужно будет выставить права и владельца!

Если вы используете выделенные пулы под свои php- проекты, то стоит поискать данную строку в:

sh
1 lines
 
 
 
 
 
 
# grep -lR 'php_value' /etc/php-fpm.d
 
 
 
 

Если покажет файлы, то стоит посмотреть привести к:

sh
4 lines
 
 
 
 
 
 
[...]
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
[...]
 
 
 
 

Перезапускаем php-fpm службу:

sh
1 lines
 
 
 
 
 
 
# service php-fpm restart
 
 
 
 

Для апача, следуюет указать следующие строки:

sh
2 lines
 
 
 
 
 
 
php_value session.save_handler "files"
php_value session.save_path "/var/lib/php/session"
 
 
 
 

а поиск файла можно сделать так:

sh
1 lines
 
 
 
 
 
 
# grep -lR 'php_value' /etc/
 
 
 
 

И тоже, выполнить перезапуск службы:

sh
1 lines
 
 
 
 
 
 
# service httpd restart
 
 
 
 

Вот и все решение! А у меня на этом статья «Ошибки работы с PHP сессиями в Unix/Linux» завершена.