Recientemente actualicé a PHP 5.3 y desde entonces recibo mensajes de error (esporádicos) que indican que Apache (o puede ser el limpiador de los archivos de sesión) no tiene permisos para la carpeta donde se almacenan las sesiones.
Esto sucede al azar y no se puede reproducir con pasos exactos, lo que me llevó a suponer que es el limpiador de sesiones.
¿Alguien tiene alguna experiencia con tales errores?
El mensaje de error (que se dispara en la session_start()
línea) es:
ps_files_cleanup_dir: opendir (/ var / lib / php5) falló: Permiso denegado.
ls -ltr en el directorio de la sesión da:
drwx-wx-wt 2 root root 4096 2010-05-25 12:39 php5
Dentro de este directorio, veo archivos de sesión propiedad de www-data, que es mi Apache, y la aplicación funciona bien. Lo que me hace preguntarme, ¿bajo qué usuario se ejecuta la sesión GC?
Respuestas:
La solución: en tu
php.ini
conjuntosession.gc_probability
para0
La causa creo que encontré la respuesta aquí http://somethingemporium.com/2007/06/obscure-error-with-php5-on-debian-ubuntu-session-phpini-garbage
Esencialmente, la recolección de basura está configurada para ser realizada por trabajos cron en algunos sistemas (es decir, Ubuntu / Debian). Algunos ejecutables de php ini como php-cli también intentan recolectar basura y eso da como resultado el error que tienes.
fuente
session.gc_probability
ya configurado0
.session.gc_probability
activa el 1. ¡Esto sucedió incluso cuando no hay ninguna configuración en el archivo php.ini en absoluto ! Estoy ejecutando suphp en Ubuntu, Apache 2.2. Me pregunto si eso es algún tipo de error. De todos modos, agregarsession.gc_probability = 0
a mi archivo php.ini personalizado y específico del sitio parece resolver el problema.Este parece ser un error típico en los servidores de Ubuntu (estoy usando Lucid LTS). Los permisos predeterminados del directorio / var / lib / php5 existen
drwx-wx-wt 2 root root 4096 2011-11-04 02:09 php5
por lo que el servidor web puede escribirlo pero no leerlo, supongo que eso explica los errores.
Como Ubuntu tiene su propia limpieza de basura a través de cron (
/etc/cron.d/php5
), probablemente sea mejor deshabilitar la recolección de basura de php como sugirió Diwant Vaidya.session.gc_probability = 0
En realidad, hay una razón por la que la carpeta de sesión no debería ser legible para todo el mundo, como dice el Manual de PHP :
fuente
La solución que uso actualmente (que no estoy seguro de que sea la correcta) es ceder la propiedad de la carpeta de sesión al usuario de Apache (www-data en mi caso).
fuente
Este problema me ha estado molestando por un tiempo. Cambié el valor como se sugiere en php.ini y el problema siguió ocurriendo. Encontré el mismo valor de configuración en mi index.php y también en private / Zend / session.php. Por lo tanto, vale la pena investigar un poco más si el problema persiste. Espero que esto sea útil para alguien.
fuente