martes, 6 de noviembre de 2007

__destruct , fopen() , problema y solución.

Ayer estuve jugueteando un poco con el método predefinido __destruct (PHP5) y descubrí algo interesante. Eso si, la explicación estaba en la ayuda oficial de PHP en esas notas que casi siempre se olvidan.
El código era el siguiente:


function __destruct()
{
//Serializamo el vector.
$Serializacion = serialize( $this->Vector );

//Grabamos la serialización en un fichero
$Fichero = fopen('Datos.txt', 'a');
fwrite($Fichero, $Serializacion);
fclose($Fichero);
}


El fichero en concreto estaba grabado en el directorio /var/www/Ajax/ y tenía todos los permisos correctos para que la operación fuese llevada a cabo con éxito pero cada vez que se ejecuta el script se interrumpía por un error en la instrucción fopen debido a que no encontraba el fichero en la ruta especificada.
La causa es la implementación del método __destruct que no garantiza el funcionamiento de ninguna ruta relativa que se especifique por lo tanto las rutas deben ser absolutas.
De esta manera el código queda como:

function __destruct()
{
//Serializamo el vector.
$Serializacion = serialize( $this->Vector );

//Grabamos la serialización en un fichero
$Fichero = fopen('/var/www/Ajax/Datos.txt', 'a');
fwrite($Fichero, $Serializacion);
fclose($Fichero);
}

1 comentario:

Manuel dijo...

Pues, con un rato de investigacion y experimentacion descubri que solo acepta url relativas que partan del mismo archivo php que esta realizando la lectura/escritura/creacion del archivo con el que trabajamos...
Gracias, me diste la pista que me faltaba para poder usar fopen() correctamente y sin el error de falta de privilegios...