Entre los inconvenientes de las aplicaciones dinámicas que hacen uso extensivo de una base de datos, destaca el incremento del uso de la memoria y CPU del sistema.
Cuando pedimos al servidor web que nos muestre una página estática, una página HTML normal, este nos devuelve su contenido tal cual. En cambio, cuando le pedimos que nos muestre un script de PHP, el servidor llama al motor de PHP el cual se encarga de interpretar el código del script y devolver el resultado de la ejecución de la misma. Obviamente, este segundo proceso de interpretación del código, es mucho más laborioso y por lo tanto consume más recursos del sistema.
Ante este problema, existen varias soluciones como el PHP Accelerator o el Zend Optimizer, que mediante diferentes métodos son capaces de reducir el tiempo de ejecución de los scripts o de incrementar la capacidad del servidor para mostrar páginas dinámicas. La mayoría de servidores tiene instalado alguna de estas soluciones, pero esto no significa que nosotros no debamos implementar un método alternativo para reducir el tiempo de ejecución de nuestros programas, así como reducir el consumo de recursos del sistema. Y de esto precisamente trata este artículo, te vamos a mostrar una forma sumamente sencilla de cachear tus scripts de PHP.
El método de cachear scripts que te mostramos a continuación guarda el resultado de la ejecución de un script en un fichero HTML. Posteriormente, cada vez que llamamos a este script, en vez de ejecutarse completamente, nos muestra el fichero guardado previamente, el cual contiene el resultado de la ejecución del propio script.
Este sistema tiene un problema, que el script no muestra el resultado actual, sino el de cuando el resultado se guardo por ultima vez. Supongamos que nuestro script muestra una lista de usuarios, esta lista se obtiene de base de datos. Si añadiésemos 5 nuevos usuarios a la base de datos, el script no mostraría estos 5 nuevos registros hasta que le indicáramos que volviera a ejecutarse completamente y a guardar el resultado de su ejecución en el fichero HTML. Este problema, se puede solucionar estableciendo un tiempo de caducidad al fichero HTML que sirve de caché.
Script originalUna vez explicado el funcionamiento del sistema pasemos a ver su implementación. Supongamos que tenemos un script, al cual llamaremos "mostrar.php", cuyo código podemos ver a continuación:
<html>
<head>
<title>Mi script</title>
</head>
<body>
<?php
include('conexion.php');
$get = mysql_query('select * from mitabla where id=''.$_GET['id'].''',$db);
while($row = mysql_fetch_row($get)) {
echo $row[0].' => '.$row[1].'<br>';
}
?>
</body>
</html>
Nuestro script simplemente hace una llamada a una base de datos MySQL del cual obtiene ciertos datos dependiendo del valor de la variable id que le pasemos mediante el método GET, es decir, desde la dirección o URL. Por ejemplo, un petición válida a nuestro script podría ser:
http://dominio.com/mostrar.php?id=444
Si llamamos a nuestro script con esa dirección, le estamos pidiendo que muestre todos los registros de la tabla mitabla que tengan un valor de 444 en su campo id. El valor de la variable id, la obtendremos de $_GET['id'].
Funciones de cachéCon el objetivo de cachear el resultado del script debemos incluir en él, un script que llamaremos "cache.php" y cuyo código podemos ver a continuación:
<?php
// tiempo tras el cual se "caducan" los fichero HTML
$TIEMPO = 86400;
// directorio donde guardar los ficheros HTML o cachés
$DIR = '/home/midirectorio/cache/mostrar';
function cache_abrir() {
global $TIEMPO,$DIR;
// comprobar la existencia del fichero cache y si aun es valido
if(file_exists($DIR.'/'.$_GET['id'].'.html') &&
time()-filemtime($DIR.'/'.$_GET['id'].'.html')<$TIEMPO) {
// mostrar cache
include($DIR.'/'.$_GET['id'].'.html');
// terminar ejecución del script
exit();
}
}
function cache_guardar($html) {
// abrir en modo escritura el fichero cache
$file = @fopen($DIR.'/'.$_GET['id'].'.html','w');
// escribir el contenido de $html en el fichero cache
@fwrite($file,$html);
// cerrar fichero
@fclose($file);
}
?>
Usuarios que han visto este tema también han visto...
- Manejo de cadenas en PHP
- Evitar la inyección SQL
- Funciones Relacionadas con el protocolo FTP
- Mostrar contenido segun el pais en PHP
- Formatear números decimales con PHP
Información legal | Política de Privacidad | Contacte con nosotros
Otro proyecto de Factoría de Internet. Copyright© 2003-2011 Factoría de Internet S.L.. Todos los derechos reservados.