2010-05-12 9 views
0

J'utilise le framework Kohana 3 et j'utilise le pilote de session natif.Comment gérer cette erreur "session n'a pas réussi à écrire le fichier" en PHP?

Pour une raison quelconque, il arrive que les sessions n'écrivent pas dans leur fichier.

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 

Je suis assez sûr Kohana possède son propre gestionnaire d'erreurs construit, mais il ne se déclenche pas avec cette erreur (par exemple, il apparaît comme une erreur PHP normale, pas l'erreur Kohana).

PHP error http://alexanderdickson.com/hosted/stackoverflow.com/php-session-error.png

Toute personne qui a utilisé Kohana remarquerez cela semble avoir oublié l'erreur de manipulation Kohana (peut-être ensemble avec set_error_handler()). Y a-t-il un moyen d'empêcher que cette erreur apparaisse sans basculant du pilote de session native (c'est-à-dire basé sur un fichier)? Dois-je juste donner une bonne pratique du démarrage et préfixer un suppresseur d'erreur @ à session_start() dans le code de base de Kohana? Devrais-je me détendre le error_reporting()?

Merci

+0

J'ai parfois ce problème en utilisant ma session normale. Parfois, les fichiers de session perdent des autorisations au hasard et doivent être effacés. Je ne sais pas pourquoi ça arrive. – animuson

+0

ne pas supprimer les erreurs, s'il vous plaît :) – Kemo

+0

@animuson Je sais, c'est la chose la plus étrange! Ça arrive * très * de temps en temps, mais je préfère que ça n'arrive pas du tout. – alex

Répondre

5

Vous appelez (remplacez APPPATH.'sessions' par le répertoire de votre choix) dans bootstrap.php pour forcer l'écriture des sessions sur application/sessions. Cela augmentera la sécurité de l'utilisation des sessions natives et devrait résoudre votre problème.

+0

Merci Shadowhand, toujours bon d'avoir une réponse de votre part +1 – alex

0

Cela signifie que votre interpréteur PHP n'a pas les permissions d'écriture dans/tmp. Demandez à votre administrateur de serveur de corriger cela - il n'est pas lié à votre application.

Dans le cas où il y a des collisions avec des fichiers de session provenant de différents processus php (s'exécutant sous différents utilisateurs): Leur donner des répertoires de session différents aiderait. Par exemple, vous pouvez les déplacer loin de/tmp/chemin/vers/homedir/phptmp et utiliser une structure telle que:

/path/to/homedir/ 
/path/to/homedir/htdocs 
/path/to/homedir/phptmp 
/path/to/homedir/logs 
+0

Il a dit * occasionnellement * ... – animuson

+0

Voir ma deuxième partie de la réponse;) – ThiefMaster

1

Il est à la directive session.save_path de php, vous pouvez passer outre à certains dossier inscriptible dans php.ini, ou vous pouvez essayer ceci dans votre .htaccess;

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

Edit: juste pour que je n'oublie pas, mettez votre niveau de dossier de session personnalisé en dessous du htdocs/public_html/whatever. Cependant, tout cela est un peu exagéré puisque vous pouvez demander poliment à votre administrateur de serveur de vérifier quel est le problème avec les autorisations.