РЕШЕНО! Ошибка session_start() opendir(/var/lib/php5) failed в шапке сайта

Подскажите плз, периодически над хедером вылазит ошибка

Шаблон synio, ОС — Debian 6

<b>Notice</b>:  session_start() [function.session-start]: ps_files_cleanup_dir: opendir(/var/lib/php5) failed: Отказано в доступе (13) in <b>/var/www/***/data/www/***/engine/modules/session/Session.class.php</b> on line <b>88</b>


поиском пользовался, решения не найдено. Подскажите что исправить в настройках сервера/сайта? где какие права может поменять?

РЕШЕНИЕ

Особую благодарность выражаю rsmike

Действительно, необходимо изменить параметр session.gc_probability с 1 на 0.

Проверять значения нужно с помощью функции phpinfo(), ведь глобальная настройка php.ini отличается для каждого пользователя. У меня необходимый параметр находился в файле:

/etc/php5/cgi/conf.d/gc.ini

Меняем session.gc_probability, перезапускаем апач

sudo /etc/init.d/apache2 reload


Радуемся.

Однако, должен заметить, что данные изменения могут вызывать накопление файлов сессий и заполнение диска сервера по адресу /var/lib/php5/

Так что не забывайте самостоятельно следить за степенью его заполнения, главное чтобы дебиановский сборщик старых сессий работал и стирал ненужные сессии.

29 комментариев

avatar
У меня есть для вас ответ. Но сначала приведите вопрос к нормальному виду.
avatar
хелп ми плиз, разве никто с такой проблемой не сталкивался?
avatar
Покажите
stat /var/lib/php5
для приличия хоть и скажите, от какого юзера у вас работает вебсервер.
avatar
Там Debian, так что скорее всего www-data
avatar
Во первых, в инете есть куча бредовых мануалов, указывающих, что запускать не от стандартного юзера и группы вебсервер более безопасней.
Во вторых, умнип, по умолчанию права на директорию там выставлялись root:root.
avatar
*емнпип
avatar
по умолчанию права на директорию там выставлялись root:root
Так оно и есть. Поэтому и вылетает ошибка, поскольку процесс в-сервиса пытается почистить старые сессии.
Но его можно спокойно отключать, поскольку у Deb/Ubu свой сборщик запускается по крону.
avatar
не разбираюсь как посмотреть от какого пользователя у меня работает сервер. Подскажите что необходимо посмотреть
avatar
avatar
Упс, например, так:
echo $(ps axho user,comm|grep -E "httpd|nginx|lighttpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')

Можно и проще, ну ладно.
avatar
ваш код не работает — дает ошибку. порылся в сети нашел
$user_info=posix_getpwuid(posix_getuid());
echo $user_info['name'];


Выводит пользователя v002028
avatar
А показать ошибку? Я вот щас отсюда копирую себе в терминал, и всё показывает. Что интересно я делаю не так.
Ну ладно, теперь покажите, какие права стоят на /var/lib/php5.
Выше я вам писал как сделать.
avatar
спасибо, код работает, я в прошлый раз скобку не написал)

root@site:~# echo $(ps axho user,comm|grep -E "httpd|nginx|lighttpd|apache"|uniq|grep -v "root"|awk 'END {if ($1) print $1}')
www-data

root@site:~# stat /var/lib/php5
File: `/var/lib/php5'
Size: 212992          Blocks: 424        IO Block: 4096   directory
Device: 9031h/36913d    Inode: 20329777    Links: 2
Access: (1733/drwx-wx-wt)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2013-02-18 11:39:01.000000000 +0400
Modify: 2013-02-18 11:42:05.000000000 +0400
Change: 2013-02-18 11:42:05.000000000 +0400
avatar
в папке /var/lib/php5 лежит куча файлов с именем вроде такого «sess_fff228133643a52ee40d091784c01788», а содержимое файлов одинаково:
message_notice_session|a:0:{}message_error_session|a:0:{}
avatar
Это популярная ошибка на Debian/Ubuntu

Решение 1: Откройте ваш php.ini, найдите параметр session.gc_probability и установите его в 0
Решение 2: Установите полный доступ (0777) на папку /var/lib/php5

Решение 1 является более правильным.
avatar
понятно, что мы тут гаданием занимаемся, но всё же чуток разверну правильный ответ выше

в дебиане убийца просроченных сессий запускается по крону собственным скриптом /etc/cron.d/php5, и по умолчанию session.gc_probability и так установлен в ноль.

Если он ненулевой — значит или сознательно используется штатный сборщик и кронтаск-удалятель отключен, или вообще используется нестандартное хранилище сессий (session.save_handler НЕ files), или что-то просто ошибочно включило этот параметр. В первых двух случаях нужно понять, что происходит, чтобы отключив штатный gc не нарваться на несколько гигабайт древних сессий, которые быстро забьют иноды и место на диске.
avatar
текст /etc/cron.d/php5:
# /etc/cron.d/php5: crontab fragment for php5
#  This purges session files older than X, where X is defined in seconds
#  as the largest value of session.gc_maxlifetime from all your php.ini
#  files, or 24 minutes if not defined.  See /usr/lib/php5/maxlifetime

# Look for and purge old sessions every 30 minutes
09,39 * * * * root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete

Может нужен
avatar
— какой самый древний и самый недавний файл в /var/lib/php5/
— что выдает команда /usr/lib/php5/maxlifetime

еще есть вариант, что вы смотрите не тот php.ini — лучше всего посмотреть результат вывода phpinfo(). Потому что по всем симптомам выходит, что session.gc_probability всё-таки не ноль
avatar
maxlifetime выдает 720
я смотрю пхп.ини по адресу etc/php5/apache2

из 300-т файлов в /var/lib/php5/ самый древний 17.02.2013 23:40, самый новый 18.02.2013 11:42
avatar
самый древний 17.02.2013 23:40, самый новый 18.02.2013 11:42

это означает, что кронтаск работает правильно
avatar
да, после выполнения phpinfo() видно, что session.gc_probability равен 1.

avatar
подскажите пожалуйста, где найти необходимый мне php.ini
avatar
в том же phpinfo нужно найти строку Loaded Configuration File
avatar
спасибо огромное! так мне стоит менять session.gc_probability с 1 на 0?
avatar
блин, ну че за сервер!

по адресу указаному в phpinfo есть файл пхп.ини, но абсолютно пустой!!!

и еще с ним файл по названию «php», он без расширения с содержимым:

#!/usr/bin/php5-cgi


Как тогда изменить этот session.gc_probability и стоит ли его с 1 на 0 менять?

Спасибо!
avatar
и еще с ним файл по названию «php», он без расширения с содержимым:

это скрипт, запускающий бинарник, не надо его трогать

по адресу указаному в phpinfo есть файл пхп.ини, но абсолютно пустой!!!

попробуем в него записать session.gc_probability=0, перезапустить апач (или под чем там php крутится) и посмотреть phpinfo еще раз
avatar
к сожалению не помогло, так и осталась единица
avatar
в пхп.ини session.gc_probability и так равен 0, может какие-то дополнительные сведения необходимы для устранения ошибки?
avatar
решено
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.