A la hora de tratar fichero de una fuente de datos online, se puede dar la situación que necesitemos cachear la fuente de datos original, para no saturarlo a peticiones.
Para solucionar esto, voy a explicarlos como hacer un sistemas de cacheo que hace una copia local durante 15 minutos, o los minutos que prefirais.
Lo haremos en dos pasos:
En el primero crearemos una función que recibe la url del fichero a cachear y el nombre de como se va a llamar en nuestro sistema de fichero de forma local.
//nombre del fichero cacheado $filename = 'file.xml'; //url del fichero a cachear a cachear $file_to_cache = 'http://datos.gijon.es/doc/turismo/playas.xml'; //funcion que graba el fichero function write_data_to_file( $filename, $file_to_cache ) { $file = file_get_contents( $file_to_cache ); file_put_contents( $filename, $file ); }
En el segundo paso lo que haremos sera mediante una condición crear el fichero si no existe, y una vez creado comprobar la fecha de creación y si tiene mas de 15 minutos de antigüedad, volver a guardarlo.
//cacheamos cada 15 minutos if ( file_exists( $filename ) ) { $file_time = filemtime( $filename ); $expire = 900; // 900 seg. 15min. if ( $file_time < ( time() - $expire ) ) { // si a caducado sobreescribimos write_data_to_file( $filename, $file_to_cache ); } } else { // si no existe el ficehro lo creamos write_data_to_file( $filename, $file_to_cache ); }
Finalmente creamos una variable que sera la que se pasara con el nombre del fichero
//creamos varaible con el fichero $file_data_cache = $filename;
Para poder visualizar el fichero hemos utilizado de ejemplo la entrada leer un xml desde php y en este caso lo que haremos es en el index.php importar el fichero cacheador cache.php y llamar a la variable con el contenido del fichero $file_data_cache
//importamos progama cacheador include('cache.php'); // leer XML validamos si el fichero online e accesible y si no abrimos el XML local $data = simplexml_load_file($file_data_cache);
El codigo utilizado es el siguiente:
<?php // index.php //importamos progama cacheador include('cache.php'); // leer XML validamos si el fichero online e accesible y si no abrimos el XML local $data = simplexml_load_file($file_data_cache); ?> <html> <h1>Playas de Gijón</h1> <?php //bucle para recorrer los elementos del array foreach($data as $item){ ?> <table border="1"> <tr> <td>Nombre: </td> <td> <?php echo $item->nombre; ?> </td> </tr> <tr> <td>URL: </td> <td> <?php echo $item->url; ?> </td> </tr> <tr> <td>Descripcion: </td> <td> <?php echo $item->descripcion; ?> </td> </tr> </table><br /> <?php } //cerramos bucle ?> </html>
<?php //nombre del fichero cacheado $filename = 'file.xml'; //url del fichero a cachear a cachear $file_to_cache = 'http://datos.gijon.es/doc/turismo/playas.xml'; //funcion que graba el fichero function write_data_to_file( $filename, $file_to_cache ) { $file = file_get_contents( $file_to_cache ); file_put_contents( $filename, $file ); } //cacheamos cada 15 minutos if ( file_exists( $filename ) ) { $file_time = filemtime( $filename ); $expire = 900; // 900 seg. 15min. if ( $file_time < ( time() - $expire ) ) { // si a caducado sobreescribimos write_data_to_file( $filename, $file_to_cache ); } } else { // si no existe el ficehro lo creamos write_data_to_file( $filename, $file_to_cache ); } //creamos varaible con el fichero $file_data_cache = $filename; ?>
Aqui podeis ver el ejemplo en funcionamiento -> ejemplo
Y el codigo lo podeis descargar desde aqui -> codigo