80 votes

Problèmes avec PHP 5.3, et des séances de dossier

J'ai récemment mis à jour vers PHP 5.3 et depuis lors, je me (sporadique) les messages d'erreur qui indiquent Apache (ou peut-être le plus propre de la session de fichiers) n'a pas les autorisations pour le dossier où les sessions sont stockées.
Cela se produit de façon aléatoire et ne peut pas être reproduit avec des étapes précises, ce qui m'a amené à deviner c'est la session de nettoyage.
Quelqu'un a une expérience avec de telles erreurs?

Le message d'erreur (qui est renvoyé sur-le - session_start() ligne) est:

ps_files_cleanup_dir: fonctions opendir(/var/lib/php5) a échoué: Autorisation refusée.

ls -ltr sur l'annuaire de session donne:

drwx-wx-wt  2 root          root          4096 2010-05-25 12:39 php5

À l'intérieur de ce répertoire, je ne vois session de fichiers détenus par www-data qui est mon Apache, et l'application fonctionne très bien. Ce qui me fait me demander, en vertu de laquelle l'utilisateur ne la session GC fonctionne?

120voto

Diwant Vaidya Points 884

La solution: Dans votre php.ini ensemble session.gc_probability de 0

La cause Je crois que j'ai trouvé la réponse ici http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

Essentiellement, la collecte des déchets est mis en place pour être fait par des tâches cron sur certains systèmes (c'est à dire Ubuntu/Debian). Php ini fichiers exécutables comme php-cli aussi essayer de faire la collecte des ordures et que les résultats dans l'erreur que vous avez obtenu.

22voto

Marie Fischer Points 611

Cela semble être une erreur typique sur Ubuntu serveurs (je suis en utilisant Lucide LTS). Les autorisations par défaut de /var/lib/php5 répertoire il y a drwx-wx-wt 2 root root 4096 2011-11-04 02:09 php5 - de sorte qu'il peut être écrit, mais pas lu que par le serveur web, je suppose que ça explique les erreurs.

Comme Ubuntu dispose de nettoyage des déchets via cron (/etc/cron.d/php5), il est probablement préférable de désactiver php collecte des ordures comme suggéré ci-dessus par Diwant Vaidya.

Il y a effectivement une raison pour la session de dossier ne doit pas être lisible par tout le monde - comme le Manuel PHP , dit:

Si vous laissez cet ensemble pour un monde lisible par répertoire, par exemple /tmp (le valeur par défaut), les autres utilisateurs sur le serveur peut être en mesure de détourner des sessions de obtenir la liste des fichiers dans ce répertoire.

1voto

Itay Moav -Malimovka Points 17977

La solution que j'utilise actuellement (dont je ne suis pas sûr, c'est la bonne) est de donner à la propriété de la session du dossier à l'utilisateur Apache (www-data dans mon cas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X