Caching web site php

Vreau sa fac cache la un site, nu este o platforma populara sau ceva de genul… Este un script facut de mine, nu am o baza de date continutul este actualizat prin api…
Dupa ce am cautat cateva informatii am gasit acest cod :

<?php
    //settings
    $cache_ext  = '.html'; //file extension
    $cache_time     = 3600;  //Cache file expires afere these seconds (1 hour = 3600 sec)
    $cache_folder   = 'cache/'; //folder to store Cache files
    $ignore_pages   = array('', '');

    $dynamic_url    = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
    $cache_file     = $cache_folder.md5($dynamic_url).$cache_ext; // construct a cache file
    $ignore = (in_array($dynamic_url,$ignore_pages))?true:false; //check if url is in ignore list

    if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) { //check Cache exist and it's not expired.
        ob_start('ob_gzhandler'); //Turn on output buffering, "ob_gzhandler" for the compressed page with gzip.
        readfile($cache_file); //read Cache file
        echo '<!-- cached page - '.date('l jS \of F Y h:i:s A', filemtime($cache_file)).', Page : '.$dynamic_url.' -->';
        ob_end_flush(); //Flush and turn off output buffering
        exit(); //no need to proceed further, exit the flow.
    }
    //Turn on output buffering with gzip compression.
    ob_start('ob_gzhandler');
    ######## Your Website Content Starts Below #########
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Page to Cache</title>
        </head>
            <body>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut tellus libero.
            </body>
    </html>
    <?php
    ######## Your Website Content Ends here #########

    if (!is_dir($cache_folder)) { //create a new folder if we need to
        mkdir($cache_folder);
    }
    if(!$ignore){
        $fp = fopen($cache_file, 'w');  //open file for writing
        fwrite($fp, ob_get_contents()); //write contents of the output buffer in Cache file
        fclose($fp); //Close file pointer
    }
    ob_end_flush(); //Flush and turn off output buffering

    ?>

Ce parere aveti ? Puteti sa-mi dati o idee mai buna ?
Datorita api-ului care este solicitat la fiecare vizita site-ul se misca mai greoi si am nevoie de acest cache

In cele din urma am folosit

<?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();

//Aici vine tot ce am eu in index.php ca de exemplu

$c = ob_get_contents();
file_put_contents($cachefile, $c);

?>

problema este ca imi da pagina alba , in schimb in cache este fisierul…

Am pus prima versiune , se pare ca este mai buna…
Totutsi as vrea o parere a celor care au mai folosit asta… o sugestie ceva…

Mai am o intrebare stupida…

Cache care a fost facut la accesarea mea pe site este afisat tuturor ? sau pentru fiecare utilizator al site-ului este un alt cache care ii este afisat lui ?

De ce?

De ce?

Ca astea le-am gasit pe net… si pare sa functioneze prima… Mi se incarca mult mai repede site-ul acum…

Păi uite aici problema și motivul pentru:

:slight_smile:

Eu îți recomand să o iei foarte băbește și să faci varianta ta de caching. Câteva idei:

  • Caching presupune să nu regenerezi toată pagina. Asta înseamnă că după ce generezi toată pagina o dată, stochezi undeva rezultatul;
  • Cea mai la îndemână chestie este ca acel undeva să fie într-un fișier;
  • Dacă nu faci caching cum trebuie la vizitatorii autentificați s-ar putea să ai o problemă ca unii utilizatori să vadă paginile destinate altor utilizatori;
  • ob_start & co sunt prietenii tăi;

PS: preferăm să te ajutăm când nu înțelegi sau nu îți iese ceva, nu când „nu merge” ceva găsit online…

M-am gandit la chestia cu logarea ideea este ca nu exista logare pe acel site…
Cum as putea sa ma incurc in ceva in ce n-am facut , cand eu nu stiu de unde sa incep :slight_smile:

La care din pașii ăștia te-ai încurcat?

2 Likes

Apreciez efortul, dar nu la asta m-am incurcat ! Aveam nevoie de o sugestie daca este bun sau nu acest cod
:slight_smile:

<?php
    //settings
    $cache_ext  = '.html'; //file extension
    $cache_time     = 3600;  //Cache file expires afere these seconds (1 hour = 3600 sec)
    $cache_folder   = 'cache/'; //folder to store Cache files
    $ignore_pages   = array('', '');

    $dynamic_url    = 'http://'.$_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . $_SERVER['QUERY_STRING']; // requested dynamic page (full url)
    $cache_file     = $cache_folder.md5($dynamic_url).$cache_ext; // construct a cache file
    $ignore = (in_array($dynamic_url,$ignore_pages))?true:false; //check if url is in ignore list

    if (!$ignore && file_exists($cache_file) && time() - $cache_time < filemtime($cache_file)) { //check Cache exist and it's not expired.
        ob_start('ob_gzhandler'); //Turn on output buffering, "ob_gzhandler" for the compressed page with gzip.
        readfile($cache_file); //read Cache file
        echo '<!-- cached page - '.date('l jS \of F Y h:i:s A', filemtime($cache_file)).', Page : '.$dynamic_url.' -->';
        ob_end_flush(); //Flush and turn off output buffering
        exit(); //no need to proceed further, exit the flow.
    }
    //Turn on output buffering with gzip compression.
    ob_start('ob_gzhandler');
    ######## Your Website Content Starts Below #########
    ?>
    <!DOCTYPE html>
    <html>
        <head>
            <title>Page to Cache</title>
        </head>
            <body>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer ut tellus libero.
            </body>
    </html>
    <?php
    ######## Your Website Content Ends here #########

    if (!is_dir($cache_folder)) { //create a new folder if we need to
        mkdir($cache_folder);
    }
    if(!$ignore){
        $fp = fopen($cache_file, 'w');  //open file for writing
        fwrite($fp, ob_get_contents()); //write contents of the output buffer in Cache file
        fclose($fp); //Close file pointer
    }
    ob_end_flush(); //Flush and turn off output buffering

    ?> 

Unde trebuie pus si sa evite incarcarea celor logati si alte chestii dinastea le stiu si eu… Pe mine ma interesa daca codul isi face treaba bine sau mai trebuiesc aduse adjustari… nu voiam sa-mi dai cod direct nici alte chestii… Nu stiu ce tot intelegi tu aici de imi spui ca ai prefera sa ma ajuti daca m-am incurcat la vreun pas…
Se presupunem ca acel cod este facut de mine, ce sfaturi imi poti da pentru inbunatatirea lui…asta voiam sa aud , nu aberatiile tale ca la fiecare post…

Uite, ca să nu te mai deranjez cu toate aberațiile mele, îți pun la dispoziție trei zile să citești regulamentul, în special această secțiune:

Sunt descurajate discuțiile în care se cere o soluție, nu o explicație. Cu toții suntem aici să învățăm, prin urmare este important - în primul rând - să înțelegem o problemă și abia apoi să primim o soluție. Nu invers.

Edit: m-am răzgândit, ești banat permanent (pentru cont duplicat)

5 Likes