Como lidar com esse erro "Sessão falhou em gravar arquivo" no PHP?
-
26-09-2019 - |
Pergunta
Estou usando a estrutura Kohana 3 e estou usando o driver de sessão nativa.
Por alguma razão, ocasionalmente as sessões não conseguem escrever em seu arquivo.
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
Tenho certeza de que o Kohana tem seu próprio manipulador de erros construído, mas não é acionado com esse erro (ou seja, ele aparece como um erro normal de PHP, não o erro Kohana).
(fonte: Alexanderdickson.com)
Qualquer um que já tenha usado Kohana notará que isso parece ter ignorado o manuseio de erros de Kohana (talvez definido com set_error_handler()
).
Existe de alguma forma para impedir que este erro apareça sem Mudando do driver da sessão nativa (ou seja, baseada em arquivo)?
Devo apenas dar uma boa prática a bota e prender um @
supressor de erro para session_start()
No código central de Kohana? Devo relaxar o error_reporting()
?
Obrigado
Solução
Você chama ini_set('session.save_path', APPPATH.'sessions')
(substituir APPPATH.'sessions'
com o diretório que você deseja) no bootstrap.php para forçar as sessões a serem escritas application/sessions
. Isso aumentará a segurança do uso de sessões nativas e deve Resolva seu problema.
Outras dicas
Cabe à diretiva session.save_path do PHP, você pode substituí -la para uma pasta gravável em php.ini, ou pode tentar isso no seu .htaccess;
php_value session.save_path '/path/to/folder/you/can/write'
EDIT: Só para não esquecer, coloque seu nível de pasta de sessão personalizado abaixo dos htdocs/public_html/o que for.
Embora tudo isso seja um pouco exagerado, pois você pode solicitar ao seu servidor que o administrador de verifique qual é o problema das permissões.
Isso significa que seu intérprete PHP não possui permissões de gravação em /TMP. Peça ao administrador do seu servidor para corrigir isso - não está relacionado ao seu aplicativo.
Caso haja colisões com arquivos de sessão de diferentes processos PHP (em execução sob diferentes usuários): dar a eles diferentes diretores de temperatura da sessão ajudaria. Por exemplo, você pode afastá -los de/tmp para/path/to/homedir/phptmp e usar uma estrutura como essa:
/path/to/homedir/
/path/to/homedir/htdocs
/path/to/homedir/phptmp
/path/to/homedir/logs