note 108874 deleted from function.session-save-path by thiago
| From: | thiago@php.net | Date: | Thu, 31 May 2012 15:28:03 +0000 |
| Subject: | note 108874 deleted from function.session-save-path by thiago | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-188326@lists.php.net to get a copy of this message | ||
Note Submitter: Fernando Mosquera - MundialSYS.com
----
Error:
Warning: session_write_close() [function.session-write-close]: write failed: No space left on device
(28)
Warning: session_write_close() [function.session-write-close]: Failed to write session data (files).
Solución:
Este problema puede estar dado por falta de espacio en la ubicación donde PHP guarda por defecto
las session's de usuario (/tmp)
Una solución para servidores compartidos (donde no podemos configurar el tamaño de estas
ubicación) es cambiar la ubicación hacia una con espacio.
1) Creamos el directorio /public_html/sessions y le damos permisos (777) <-- será la nueva
ubicación de nuestras session's (por un tema de seguridad podemos ver de afinar los permisos
y ponerle un nombre más criptico).
2) Creamos un archivo .htaccess dentro de /public_html/sessions con el siguiente contenido (para
restringir el acceso a este directorio)
order deny,allow
deny from all
allow from 127.0.0.1
3) Cambiamos la configuración de la directiva "session.save_path" agregando la
siguiente linea en nuestro controlador frontal (antes de ejecutar el session_start()), si no tenemos
controlador frontal, dentro de algún archivo que incluyamos en cada script.
session_save_path(dirname($_SERVER['DOCUMENT_ROOT']) . '/public_html/sessions');
4) Debemos chequear que la directiva "session.gc_probability" este en 1 (activa), si no
esta en 1 podemos configurar agregando la siguiente linea después de setear el session_save_path:
ini_set('session.gc_probability', 1);
Comprobar que realmente se haga el cambio:
Podemos crear un archivo llamado checkconfig.php con el siguiente contenido:
<?php
session_save_path(dirname($_SERVER['DOCUMENT_ROOT']) . '/public_html/session');
ini_set('session.gc_probability', 1);
session_start();
$_SESSION['text'] = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eu
nunc quis tellus adipiscing facilisis ut eget turpis.";
phpinfo();
?>
Ejecutarlo y chequear con un Ctrl + F (buscando) que las directivas session.save_path y
session.gc_probability tengan los valores esperados, y que dentro del directorio
/public_html/sessions se haya creado el archivo de session.
Saludos,
Fernando.