sessions sessionhandler ps_files_cleanup_dir php70 php56 permission failed php zend-framework zend-auth zend-session

sessionhandler - opendir(/ var cpanel php sessions ea php70 failed permission denied 13



Zend_Session/Zend_Auth arroja al azar el mensaje de error ps_files_cleanup_dir: opendir(/ var/lib/php5) falló: Permiso denegado(13) (6)

Aparentemente, este problema afecta principalmente (¿solo?) A los sistemas basados ​​en Debian / Ubuntu y tiene que ver con la recolección automática de basura de la sesión.

La variable session.gc_probability se estableció en 1 en php.ini lo que significa que hay un 1% de probabilidad de que el recolector de elementos no utilizados se ejecute y limpie el directorio / var / lib / php5 donde se almacenan las sesiones de php.

Aparentemente, esta carpeta no puede escribirse mediante www-data, lo que da como resultado el error mencionado y arroja la excepción Zend. Establecer session.gc_probability en 0 resolvió el problema. La carpeta de sesión es limpiada por un trabajo cron de todos modos, por lo que no es necesario ejecutar el recolector de basura php.

De http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage

Actualmente estoy trabajando en una nueva Aplicación usando (entre otras cosas) Zend_Auth pero, por la razón que sea, este Mensaje de Error se muestra en cualquier ubicación de forma totalmente aleatoria (o por lo menos).

Zend_Session::start() - /home/hannes/workspace/develop/library/Zend/Session.php(Line:480): Error # 8 session_start() [function.session-start]: ps_files_cleanup_dir: opendir (/ var / lib / php5) failed: Permiso denegado (13) Array

  • # 0 /home/hannes/workspace/develop/library/Zend/Session/Namespace.php(143): Zend_Session :: start (true)
  • # 1 /home/hannes/workspace/develop/library/Zend/Auth/Storage/Session.php(87): Zend_Session_Namespace -> __ construct (''Zend_Auth'')
  • # 2 /home/hannes/workspace/develop/library/Zend/Auth.php(91): Zend_Auth_Storage_Session -> __ construct ()
  • # 3 /home/hannes/workspace/develop/library/Zend/Auth.php(141): Zend_Auth-> getStorage ()
  • # 4 /home/hannes/workspace/develop/xxxxxxx/application/controllers/AdminController.php(10): Zend_Auth-> hasIdentity ()
  • # 5 /home/hannes/workspace/develop/library/Zend/Controller/Action.php(133): AdminController-> init ()
  • # 6 /home/hannes/workspace/develop/library/Zend/Controller/Dispatcher/Standard.php(262): Zend_Controller_Action -> __ construct (Object (Zend_Controller_Request_Http), Object (Zend_Controller_Response_Http), Array)
  • # 7 /home/hannes/workspace/develop/library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard-> dispatch (Object (Zend_Controller_Request_Http), Object (Zend_Controller_Response_Http))
  • # 8 /home/hannes/workspace/develop/library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front-> dispatch ()
  • # 9 /home/hannes/workspace/develop/library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap-> run ()
  • # 10 /home/hannes/workspace/develop/xxxxxxx/public/index.php(26): Zend_Application-> run ()
  • # 11 {main}

En realidad, cambiar el directorio de la sesión. Save_path desactiva la recolección de elementos no utilizados. Es por eso que ahora funciona para ti. Si quieres recolección de basura, puedes cambiar el propietario del directorio original al usuario de php "www-data"

chown www-data / var / lib / php5

Como alternativa, puede escribir un script de recolección de basura para el nuevo directorio.


He tenido este problema en OS X 10.8.4 con MAMP, usando el primer Zend Framework. El directorio configurado para session.save_path en php.ini por defecto es /Applications/MAMP/tmp/php . Pude resolverlo solo borrando todo en ese directorio.


Si está utilizando PHP 7.0

sudo chown www-data:www-data /var/lib/php/sessions


También tuve este problema con el framework de Symfony, el problema es que php no tiene permiso para el directorio de almacenamiento de la sesión. Simplemente cambie el directorio para guardar la sesión a un lugar escribible. En Zend Framework Bootstrap config ini:

resources.session.save_path = APPLICATION_PATH "/../data/session"


Una solución es establecer session.save_path en el archivo php.ini en un directorio grabable. por ejemplo: session.save_path = "/ tmp". Cambiar la recolección de basura de la sesión en el primer ejemplo no es una buena idea. El segundo ejemplo no funciona en Ubuntu 10.04