web-dev-qa-db-fra.com

Problèmes avec PHP 5.3 et dossier sessions

J'ai récemment mis à niveau vers PHP 5.3 et depuis lors, je reçois des messages d'erreur (sporadiques) qui indiquent qu'Apache (ou peut-être le nettoyeur des fichiers de session) n'a aucune autorisation sur le dossier où les sessions sont stockées .
Cela se produit au hasard et ne peut pas être reproduit avec des étapes exactes, ce qui m'a amené à deviner qu'il s'agit du nettoyeur de session.
Quelqu'un a-t-il une expérience avec de telles erreurs?

Le message d'erreur (qui est déclenché sur la ligne session_start()) est:

ps_files_cleanup_dir: échec d'opendir (/ var/lib/php5): autorisation refusée.

ls -ltr sur le répertoire de session donne:

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

Dans ce répertoire, je vois des fichiers de session appartenant à www-data qui est mon Apache, et l'application fonctionne bien. Ce qui me fait me demander sous quel utilisateur le GC de session s'exécute?

80

Le correctif: Dans votre php.ini ensemble session.gc_probability à 0

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

Essentiellement, la récupération de place est configurée pour être effectuée par des tâches cron sur certains systèmes (c'est-à-dire Ubuntu/Debian). Certains exécutables php ini comme php-cli essaient également de faire le ramasse-miettes et cela se traduit par l'erreur que vous avez obtenue.

120
Diwant Vaidya

Cela semble être une erreur typique sur les serveurs Ubuntu (j'utilise Lucid LTS). Les autorisations par défaut du répertoire/var/lib/php5 sont

drwx-wx-wt  2 root     root     4096 2011-11-04 02:09 php5

donc il peut être écrit mais pas lu par le serveur web, je suppose que cela explique les erreurs.

Comme Ubuntu a son propre nettoyage des ordures via cron (/etc/cron.d/php5), il est probablement préférable de désactiver la récupération de place de php comme suggéré ci-dessus par Diwant Vaidya.

session.gc_probability = 0

Il y a en fait une raison pour laquelle le dossier de session ne devrait pas être lisible par tout le monde - comme le dit PHP Manual :

Si vous laissez cet ensemble à un répertoire lisible par le monde, tel que/tmp (par défaut), les autres utilisateurs du serveur pourront peut-être détourner des sessions en obtenant la liste des fichiers dans ce répertoire.

22
Marie Fischer

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

1

Ce problème me dérange depuis un moment. J'ai changé la valeur comme suggéré dans php.ini et le problème ne cessait de se produire. J'ai trouvé la même valeur de configuration dans mon index.php et également dans private/Zend/session.php. Il vaut donc la peine de chercher un peu plus profondément si le problème persiste. J'espère que c'est utile pour quelqu'un.

0
ChrisFNZ