Как справиться с этой ошибкой «не удалось записать файл в сеансе» в PHP?
-
26-09-2019 - |
Вопрос
Я использую платформу 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, а не как ошибка Коханы).
(источник: alexanderdickson.com)
Любой, кто когда-либо использовал Kohana, заметит, что это, похоже, обходит обработку ошибок Kohana (возможно, установленную с помощью set_error_handler()
).
Можно ли как-нибудь остановить появление этой ошибки без переключение с собственного сеанса (т.е.файловый) драйвер?
Должен ли я просто попрактиковаться в загрузке и добавить @
подавитель ошибок session_start()
в основном коде Коханы?Должен ли я расслабиться error_reporting()
?
Спасибо
Решение
Ты звонишь ini_set('session.save_path', APPPATH.'sessions')
(заменять APPPATH.'sessions'
С помощью каталога, который вы хотите) в Bootstrap.php, чтобы заставить сеансы быть записаны на application/sessions
. Отказ Это повысит безопасность использования местных сессий и должен решить вашу проблему.
Другие советы
Это зависит от SESSION SESSIC.SAVE_PATH Директивы, вы можете переопределить его до некоторой записи папки в PHP.INI, или вы можете попробовать это в своем .htaccess;
php_value session.save_path '/path/to/folder/you/can/write'
Редактировать: Только так я не забываю, поставьте свой уровень папки настраиваемой сессии под HTDOCS / Pubject_html / что угодно.
Хотя все это немного сверхугольника, так как вы можете просить своего сервера администратора вежливо, чтобы проверить, в чем проблема с разрешениями.
Это означает, что ваш интерпретатор PHP не имеет прав на запись в /tmp.Попросите администратора сервера исправить это — это не имеет отношения к вашему приложению.
В случае коллизий с файлами сессий разных процессов php (работающих под разными пользователями):Предоставление им разных временных каталогов сеансов могло бы помочь.Например, вы можете переместить их из /tmp в /path/to/homedir/phptmp и использовать такую структуру:
/path/to/homedir/
/path/to/homedir/htdocs
/path/to/homedir/phptmp
/path/to/homedir/logs