¿cómo puedo almacenar en caché una página web en php para que si una página no se ha actualizado, los espectadores deberían obtener una copia en caché?¿Cómo guardo en caché una página web en PHP?
Gracias por su ayuda. PD: Soy principiante en php.
¿cómo puedo almacenar en caché una página web en php para que si una página no se ha actualizado, los espectadores deberían obtener una copia en caché?¿Cómo guardo en caché una página web en PHP?
Gracias por su ayuda. PD: Soy principiante en php.
En realidad, puede guardar el resultado de la página antes de finalizar el script, y luego cargar el caché al inicio del script.
código de ejemplo:
<?php
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds
if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
$c = @file_get_contents($cf);
echo $c;
exit;
}else{
unlink($cachefile);
}
ob_start();
// all the coding goes here
$c = ob_get_contents();
file_put_contents($cachefile);
?>
Si usted tiene un montón de páginas que necesitan este almacenamiento en caché se puede hacer esto:
en cachestart.php
:
<?php
$cachefile = 'cache/'.basename($_SERVER['PHP_SELF']).'.cache'; // e.g. cache/index.php.cache
$cachetime = 3600; // time to cache in seconds
if(file_exists($cachefile) && time()-$cachetime <= filemtime($cachefile)){
$c = @file_get_contents($cf);
echo $c;
exit;
}else{
unlink($cachefile);
}
ob_start();
?>
en cacheend.php
:
<?php
$c = ob_get_contents();
file_put_contents($cachefile);
?>
Luego simplemente agregue
include('cachestart.php');
al inicio de sus scripts. y agregue
include('cacheend.php');
al final de sus scripts. Recuerde tener una carpeta llamada caché y permitir que PHP acceda a ella.
Recuerde también que si está haciendo una caché de página completa, su página no debe tener una visualización específica de SESSION (por ejemplo, la barra de miembros de la pantalla o qué) porque también se almacenarán en caché. Mire un marco para el almacenamiento en caché específico (variable o parte de la página).
¿dónde pongo este código? index.php? – user187580
notó la parte donde escribí '// toda la codificación va aquí'? puedes poner tu código principal allí. – mauris
ahh ya veo. Lo probaré y verificaré. Gracias. – user187580
Use memcached. Hay una explicación de cómo hacerlo en ese sitio.
Utilice Squid o actualice los encabezados HTTP correctamente para realizar el almacenamiento en caché del navegador. No veo la necesidad de girar su propia versión del almacenamiento en caché según la pregunta.
Adicionalmente a la respuesta mauris me gustaría señalar esto:
Hay que tener cuidado cuando se utiliza el almacenamiento en caché. Cuando tiene datos dinámicos (que debería ser el caso cuando usa php en lugar de html estático), debe invalidar la caché cuando cambian los datos correspondientes.
Esto puede ser bastante fácil o extremadamente complicado, dependiendo de su tipo de datos dinámicos.
actualización
Cómo se invalida la memoria caché depende del tipo concreto de almacenamiento en caché. Debe saber qué archivos de caché pertenecen a qué página (y tal vez con la entrada del usuario). Cuando los datos cambian, debe eliminar el archivo en caché o eliminar el resultado de la página de la estructura de datos de caché.
No puedo darle ninguna información más detallada sobre eso sin saber qué implementación utiliza para el almacenamiento en caché.
Otras personas sugirieron, por ejemplo, el paquete Pear o memcached. Estos tienen las funciones necesarias para invalidar toda la memoria caché o partes de ella cuando los datos cambian.
por favor arroje algunas ideas más sobre la invalidación de la memoria caché ... gracias. – user187580
@Patrick, En realidad, el almacenamiento en caché requiere acceso al disco duro. ¿No sería más lento entonces? – Pacerier
Bueno, generalmente el sistema operativo tiene su propio caché de archivos, por lo que incluso si usa archivos, puede que se sirva desde la memoria. pero aunque no lo es, la mayoría de las veces es más eficiente leer el resultado en caché del disco y devolverlo que volver a calcular la página. Si es más rápido calcularlo, entonces no caché. –
PERA tiene un paquete de almacenamiento en caché (en realidad dos):
http://pear.php.net/package/Cache y
http://pear.php.net/package/Cache_Lite para aplicaciones más pequeñas
vez utilicé el paquete de caché (primera) para el almacenamiento en caché de consulta y en ese momento lo hizo su trabajo por lo que recuerdo.
$c = ob_get_contents();
file_put_contents($cachefile);
correcta es
$c = ob_get_contents();
file_put_contents($cachefile,$c);
de lo contrario el script no funcionará.
¿Está utilizando algún marco como Zend Framework? Danos más detalles! – Thomaschaaf
No estoy usando ningún marco. – user187580
es posible que desee considerar moverlo a un marco. http://code.google.com/p/samstyle-php-framework: marco completo que incluye caché de archivos y admite memcache – mauris