Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    dove sbaglio nello script?

    Ciao

    Qualche giorno fa avevo gią aperto una discussione simile postando uno script che generava cache file compressi in gzip di tutte le pagine del sito salvandoli in una cartella del server ma io stesso non capivo il problema. Adesso ho isolato il problema.

    In breve visiti index.php e nella cartella "cache" viene salvato l'output utilizzando la funzione ob_start(). Quando si torna sulla pagina, se questa non č scaduta, viene mostrato il file in cache senza interrogare nč apache nč il database. Se invece č scaduta la pagina viene rigenerata e la cache aggiornata (sovrascritta). Questo č lo script che viene incluso in cima a tutte le pagine prima di tutto (e in fondo a tutto c'č ob_end_flush()

    Codice PHP:
    // stabilisco la cartella dove salvare i cache file
    define('CACHE_PATH'"./cache/");

    // stabilisco dopo quanti secondi la cache scade
    define('CACHE_TIME'10);

    // stabilisco come deve essere nominato il file di cache. sostituisco gli "/" con "-" ed elimino
    // l'estensione php. in altre parole "cartella/index.php" diventa "cartella-index"
    $clear_slash str_replace("/","-",$_SERVER['REQUEST_URI']);
    $clear_path str_replace(".php","",$clear_slash);
    define ('CLEAR_PATH'"$clear_path");

    // questa funzione in effetti č inutile comunque sia mi converto "cartella-index" sopra 
    // ricavato in md5 e lo antepongo a sč stesso in chiaro. praticamente diventa
    // "a427b6889a89100fd6a4b9f0f7641b73-cartella-index"
    function cache_file()
    {
      return 
    CACHE_PATH md5($_SERVER['REQUEST_URI']) . CLEAR_PATH;
    }

    // visualizzo il file in cache se questo esiste e non č scaduto 
    function cache_display()
    {
      
    $file cache_file();

    // controllo che il file in cache esiste e non č scaduto
    if(!file_exists($file)) return;
    if(
    filemtime($file) < time() - CACHE_TIME 1) return;

    // se non č scaduto lo visualizzo e fermo il processo
    echo gzuncompress(file_get_contents($file));
    exit;
    }

    // altrimenti continuo e scrivo il file in cache
    function cache_page($content)
    {
    if(
    false !== ($f = @fopen(cache_file(), 'w'))) {
    fwrite($fgzcompress($content));
    fclose($f);
    }
    return 
    $content;
    }

    // se un cache file valido viene trovato l'esecuzione dello script si ferma qui
    cache_display();

    // altrimenti abilito il buffering dell'output e creo il file cache
    ob_start('cache_page'); 
    Il problema č che quando la cache deve essere aggiornata perchč č scadura questo non avviene o meglio la cache si aggiorna solo se aggiorno pagina (F5), se chiudo il tab e torno a visitare la pagina o infine se nella barra degli indirizzi posiziono il cursore e premo invio (che poi bene o male sono tutti e 3 dei refresh).

  2. #2
    Utente di HTML.it L'avatar di Luke70
    Registrato dal
    Jul 1999
    Messaggi
    767
    Credo dipenda dal fatto che č il browser a mantenere la tua pagina nella sua cache e quindi, in realtą, non richiama il tuo script, ma ricarica la pagina che lui ha salvato.

  3. #3
    Mi confermi il dubbio che avevo. Con il CacheViewer di firefox vedo infatti che ci sono i file in cache. A questo punto io non capisco a che cavolo serve lo script. Dovrebbe fare una cosa semplicissima.

    1) Richiedo index.php
    2) Pur restando in index.php mi fa vedere cache/index

    Invece, per un motivo ancora ignoto, al posto di usare SEMPRE il file in cache/index lo usa solo la prima volta (dopo un refresh, con una nuova visita ecc.) e poi se lo memorizza il browser quando non l'ho specificato da nessuna parte. Ma perchč?

    edit: trovato il problema e la soluzione

    <filesmatch "\.(html|htm|php)$">
    Header set Cache-Control "max-age=259200, must-revalidate"
    </filesmatch>

    Questo nell'htaccess va in conflitto col caching. Praticamente lo faceva 2 volte prima con la regola e poi col buffering. Ti ringrazio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.