No estás registrado (Registrarse)

Vanilla 1.1.10 es un producto de Lussumo. Para más información: Documentación, Soporte.

    • CommentAuthorterrybarna
    • CommentTimeDec 8th 2009 editado
     # 1
    Hola a todos he insertado en cada una de las páginas de una de mis webs y me crear archivos en el servidor cada minuto y yo solo quiero uno cada 24 h para no saturar el servidor. Haber si alguien me puede ayudar.


    <?php
    function crea_cache($contenido) {
    $fichero = @fopen(__FILE__.md5($_SERVER['QUERY_STRING']),'w');
    if (!$fichero or !@flock($fichero,2) or !@fwrite($fichero,$contenido))
    return '<!-- Error al crear la cache -->'.$contenido;
    fclose($fichero);
    return $contenido;
    }
    function muestra_cache() {
    $contenido = @file_get_contents(__FILE__.md5($_SERVER['QUERY_STRING']));
    if (!$contenido) return;
    echo $contenido;
    die();
    }
    if (time() - @filemtime(__FILE__.md5($_SERVER['QUERY_STRING'])) > 86000)
    ob_start('crea_cache');
    else
    muestra_cache();
    ?>



    Si sabéis otra forma de cache fácil de implementar os lo agradeceré. Solo necesito que se cachee cada 24 h pero no que cada minuto me cree infinitos archivos en md5.

    Saludos
    •  
      CommentAuthorJavi
    • CommentTimeDec 8th 2009
     # 2
    Posted By: terrybarname crear archivos en el servidor cada minuto


    86000 milisegundos es 1,44 minutos...
    86 400 segundos (24horas) = 86 400 000 milisegundos
    •  
      CommentAuthorquality
    • CommentTimeDec 8th 2009
     # 3
    Creo que los 86400 son segundos :confuso:Haciendo Cuentas __ Ayuda Familiar _ _ casas rurales
  1.  # 4
    sí son segundos. Haber si alguien que utilize uns sistema de cacheo en sus webs me explica como lo hace. Gracias a todos.
    •  
      CommentAuthorAntonio
    • CommentTimeDec 8th 2009 editado
     # 5
    Fácil :)

    Al principio del código de la página pones:


    define( __DIR_CACHE__, 'cache/' ); // Directorio donde se guarda la cache
    define( __CACHE__, __DIR_CACHE__ . md5( $_SERVER['REQUEST_URI'] ) . '.cache' ); // Fichero de cache
    define( __CACHE_TIME__, 84600 ); // Tiempo de espoera para rehacer la cache
    if( ( file_exists( __CACHE__ ) ) && ( ( filemtime( __CACHE__ ) + __CACHE_TIME__ ) > time() ) ) { // Si el fichero existe y hace menos de 24 horas que se guardó
    readfile( __CACHE__ ); // Muestra el fichero de cache como salida
    exit(); // Finaliza la ejecución pues ya ha mostrado el resultado. Si hay que cerrar bases de datos, delante de esta sentencia sería el momento :)
    }
    ob_start();


    Y esto al final del fichero


    $_tmp_cache = ob_get_clean(); // Obtiene el código de la página del flujo
    if( file_exists( __CACHE__ ) ) unlink( __CACHE__ ); // Elimina el fichero de cache
    file_put_contents( __CACHE__, $_tmp_cache ); // Guarda el nuevo fichero de cache
    echo( $_tmp_cache ); // Muestra la página


    Los defines del principio se pueden omitir si pones directamente los datos.
    Si va en medio de html recuerda ponerle antes de cada código
    <?php
    y después
    ?>

    Saludos.
    • CommentAuthorterrybarna
    • CommentTimeDec 8th 2009 editado
     # 6
    Lo acabo de probar alearis y me sale en blanco la página. No está bien. Creo que falla el exit; Lo he sacado y funciona pero me sigue creando cada minuto los ficheros con md5.html pero yo quiero uno cada 24 horas sino se satura el server.:cry: . Agradezco tu aportación Alearis. Muchas gracias.
    •  
      CommentAuthorAntonio
    • CommentTimeDec 8th 2009 editado
     # 7
    Lo tengo testeando en opendomaining.com/buscador y va bien. Puesto literal de aquí. Tiene que ser algún problema del tipo de página que guarda quizá tenga algún parámetro que va cambiando y por eso el md5 cada vez hace uno.
    Si quitas el exit la caché es inútil, te muestra la página normalmente y vuelve a generar un fichero cada vez que lo ejecutas, minutos, o segundos :D. Si te sale en blanco y puede ser que la config del php no te permita la salida directa al flujo de readfile. así que puedes ponerle un echo antes para que lo imprima tal como -> echo readfile( __CACHE__ );
  2.  # 8
    A ti te crea uno solo si le pones un dia?
  3.  # 9
    son diferentes y muchos en menos de un minuto y segundo tras segundo. Como dices debe de ser na variable que va cambiando. :smash::smash:
    •  
      CommentAuthorcucvalencia
    • CommentTimeDec 9th 2009 editado
     # 10
    Hola Terrybarna, te dejo el codigo para cachear que utilizo yo en mis webs. Funciona muy bien, espero que te sirva a ti a a quien quiera utilizarlo. Saludos (creo que esta bien explicado, de todas maneras si algo no entiendes te lo explico)

    //***************CACHEO DE PAGINAS - Algunos parametros de configuracion*********************
    //***************settings cachetime el tiempo en segundos que durara la pagina cacheada
    //***************creamos la carpeta cachear
    //***************la carpeta cachear tiene que tener permisos 777
    //***************cachedir tiene que ser la ruta absoluta a la carpeta cachear
    //*******************************************************************************************
    $settings_cachedir = '/home/terry/public_html/cachear/';
    $settings_cachetime = 60*60*60; //24 horas
    $thispage = 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $cachelink = $settings_cachedir.md5($thispage).".html";
    if (@file_exists($cachelink)) {
    $cachelink_time = @filemtime($cachelink);
    if ((time() - $settings_cachetime) < $cachelink_time) {
    @readfile($cachelink);
    die();
    }
    }
    ob_start();
    //*******************************************************************************************


    //aqui vendria todo el codigo de la pagina.....


    //**************************y este codigo se insertaria al final*****************************
    $fp = fopen($cachelink, 'w');
    @fwrite($fp, ob_get_contents());
    @fclose($fp);
    ob_end_flush();
    //*******************************************************************************************

    :eyebrows:Juegos de Vestir
  4.  # 11
    Gracias a todos ya me lo solucionaron. :cata2: Gracias cuc por tu aportación :cata3:
    • CommentAuthorEngel
    • CommentTimeDec 9th 2009
     # 12
    Y ya que estan en esas, tienen codigo para cachear solo PARTE de una pagina? O sea no la pagina entera...
    Cuestion de que se pueda cachear paginas para usuarios que esten logueados...
    • CommentAuthormacius
    • CommentTimeDec 10th 2009
     # 13
    Comentaros que la comprobación de la fecha en cada carga de la página es un proceso "lento". Salvo cosas muy especificas, lo que hago es crear un script que borra todas las páginas de la cache cada X horas, con independencia de la creación. Ese script lo corro con un cron. Además cada vez que hago algún cambio me permite borrar toda la cache.

    @engel: El script propuesto por "cucvalencia" permite tanto páginas completas como sólo una pequeña parteEnterate de lo que pasa en España: www.Momut.com
    •  
      CommentAuthorAlfredo
    • CommentTimeDec 10th 2009
     # 14
    Posted By: terrybarnaGracias a todos ya me lo solucionaron


    Cuenta como te lo solucionaron. :tiko:The Best Is Yet To Come |Dominios para principiantes
    • CommentAuthormacius
    • CommentTimeDec 11th 2009 editado
     # 15
    Por petición de terrybarna pongo aquí un ejemplo del código comentado

    Para generar la caché

    <?php

    $cache_dir = $_SERVER['DOCUMENT_ROOT'].'/cache/';
    $file_key = md5($_SERVER['REQUEST_URI']);

    /*

    Si queremos cachear partes de la página comunes

    $file_key = md5('menu_lateral');


    Si la parte de la página cambia en función de la url

    $file_key = md5('menu_lateral_'.$_SERVER['REQUEST_URI']);

    */

    if (file_exists($cache_dir.$file_key)) {

    include($cache_dir.$file_key);

    } else {

    ob_start();

    /* Aqui va tu codigo */

    file_put_contents($cache_dir.$file_key, ob_get_contents());
    ob_end_flush();

    }


    Y para borrarla



    <?php
    // Script para borrar la cache

    $cache_dir = $_SERVER['DOCUMENT_ROOT'].'/cache/';

    foreach (glob(DIR_FS_CATALOG.'cache/*') as $filename) { unlink($filename); }
    Enterate de lo que pasa en España: www.Momut.com
    • CommentAuthorterrybarna
    • CommentTimeDec 11th 2009
     # 16
    Gracias macius. :clap::clap::clap: Da gusto pertenecer a esta comunidad. :cata2::cata2:
    •  
      CommentAuthorClemente
    • CommentTimeDec 11th 2009 editado
     # 17
    •  
      CommentAuthorCorso
    • CommentTimeDec 12th 2009
     # 18
    terry, ¿tiene esto algo que ver con el rollito de Cutts de la velocidad de carga de las páginas? :bro::: el roce hace el dominio ::
    • CommentAuthorterrybarna
    • CommentTimeDec 13th 2009
     # 19
    Posted By: Corsoterry, ¿tiene esto algo que ver con el rollito de Cutts de la velocidad de carga de las páginas? :bro::: el roce hace el dominio ::


    No:silbo::silbo::silbo: