Как обработать эту ошибку «сессия не удалось записать файл» в PHP? - PullRequest
0 голосов
/ 13 мая 2010

Я использую платформу Kohana 3 и использую собственный драйвер сеанса.

По какой-то причине сеансы иногда не могут записать в свой файл.

Warning: session_start() [function.session-start]: open(/tmp/sess_*****, O_RDWR) failed: Permission denied (13) in /home/site/public_html/system/classes/kohana/session/native.php  on line 27

Я почти уверен, что у Kohana есть свой встроенный обработчик ошибок, но он не запускается с этой ошибкой (то есть он появляется как обычная ошибка PHP, а не ошибка Kohana).

Ошибка PHP http://alexanderdickson.com/hosted/stackoverflow.com/php-session-error.png

Любой, кто когда-либо использовал Kohana, заметит, что, похоже, обошел обработку ошибок Kohana (возможно, установленную с помощью set_error_handler()).

Есть ли способ остановить появление этой ошибки без переключения с собственного драйвера сеанса (т.е. на основе файла)?

Должен ли я просто дать хорошую практику загрузки и добавить @ подавитель ошибок к session_start() в коде ядра Kohana? Должен ли я расслабиться error_reporting()?

Спасибо

Ответы [ 3 ]

5 голосов
/ 14 мая 2010

Вы вызываете ini_set('session.save_path', APPPATH.'sessions') (замените APPPATH.'sessions' на нужный каталог) в bootstrap.php, чтобы принудительно записывать сеансы в application/sessions. Это повысит безопасность использования собственных сеансов, и должен решить вашу проблему.

1 голос
/ 13 мая 2010

Это зависит от директивы php session.save_path, вы можете переопределить ее в какой-либо доступной для записи папке в php.ini или попробовать в своем .htaccess;

 php_value session.save_path '/path/to/folder/you/can/write'

Редактировать: просто, чтобы я не забыл, поместите уровень вашей пользовательской папки сеанса ниже htdocs / public_html / любой другой.

Хотя все это немного излишне, поскольку вы можете вежливо попросить администратора сервера проверить, в чем проблема с разрешениями.

0 голосов
/ 13 мая 2010

Это означает, что ваш интерпретатор php не имеет прав на запись в / tmp. Попросите администратора сервера это исправить - это не имеет отношения к вашему приложению.

В случае коллизий с файлами сеансов из разных процессов php (работающих под разными пользователями): предоставление им разных временных директорий сеансов поможет Например, вы можете переместить их из / tmp в / path / to / homedir / phptmp и использовать такую ​​структуру:

/path/to/homedir/
/path/to/homedir/htdocs
/path/to/homedir/phptmp
/path/to/homedir/logs
...