Loading:


Cache strony, optymalizacja i poprawienie wydajności serwisu
Teraz utworzymy katalog naszcach w głownym katalogu witryny i nadmy mu prawa zapisu 777

Kiedy katalog jest już gotowy możemy przejść do kodu php który będzie sprawdzał czy istnieje cache tej strony jeśli tak to zaciągnie dane z pliku, jeśli nie to wygeneruje to normalnie poprzez kod  zapytanie do bazy.

Listing poniżej pokazuje gotowy przykładowy kod, można go dowolnie rozwinąć i rozbudować wszystko zależy od was.



Dalsza czê¶æ: 1 2
Napisz Artyku³

Listing


<?php
// pobieramy adres podstrony i kodujemy w md5 wygenerowany hash będzie nazwą pliku cache dla tej podstrony
$hashCache = $_SERVER['REQUEST_URI'];
$hashCache = hash("md5",$hashCache);

//Sprawdzamy czy istnieje plik cache dla tej podstrony
if(file_exists('naszcache/'.$hashCache.'.txt')){
//jeśli istnieje sprawdzamy czy nie jest zbyt stary nasz cache bedzie sie aktualizował co 1h
$utworzony = getdate(filemtime('naszcache/'.$hashCache.'.txt'));//pobranie tablicy z  datą utworzenia pliku
$utworzony = $utworzony['year'].'-'.$utworzony['mon'].'-'.$utworzony['mday'].' '.$utworzony['hours'].':'.$utworzony['minutes'].':'.$utworzony['seconds']; // tutal tworzymy date w formie rok-miesiac-dzien godzina:minuta:sekunda
$dzisiaj = date("Y-m-d H:i:s"); // pobieramy aktulany czas
$start = strtotime($dzisiaj); // czas obecny w mikro sekundach
$koniec = strtotime($utworzony); // czas utworzonego pliku w sekundach
$roznica=  $start-$koniec;
        if($roznica<3600){ // jeśli różniaca między datą utworzenia a datą obecną jest mniejsza niż 3600 sekund (1h) to zaciągamy dane    z pliku cache
        $fp = fopen('naszcache/'.$hashCache.'.txt', 'r');  // otwieramy plik
        $dane = fread($fp, filesize('naszcache/'.$hashCache.'.txt')); // odczytujemy dane
        echo $dane;     // wyświetlamy je
        fclose($fp); //zamekamy plik
        exit(); // przerywamy wykonywanie kodu
        }
}else{ // jeśli plik jest stary lub nie istnieje zostanie wykonan ta częśc kodu
function lacz_bd()
{  
  $db = new mysqli('localhost', 'uzytkownik', 'haslo', 'nazwa_bazy');  
  if (! $db)
          return false;
  $db->autocommit(TRUE);
  return $db;
}
//teraz pobierzemy nasze fikcyjne dane z bazy i zapiszemy kod wynikowy do zmiennej $zawartosc

//połaczenie z bazą
$db = lacz_bd();
//zapytanie sql do bazy określające jakie dane mają zostać pobrane
$zapytanie = "select imie, nazwisko from pracownicy";
//pobranie wyniku zapytania
$wynik = $db->query($zapytanie);
//obliczanie ilości rekordów
$ile_znalezionych = $wynik->num_rows;
//rozpoczynamy budowanie tabeli dla naszych danych
$zawartosc ='<table>';
$zawartosc .='<tr><td>Imie</td><td>Nazwisko</td></tr>';
//pętla po rekordach z bazy
for ($i=0; $i <$ile_znalezionych; $i++)
        {
                $wiersz = $wynik->fetch_assoc();
                $zawartosc .='<tr>';
                $zawartosc .='<td>'.$wiersz['imie'].'</td>';
                $zawartosc .='<td>'.$wiersz['nazwisko'].'</td>';
                $zawartosc .='</tr>';
        }
$zawartosc .='</table>';

// teraz kiedy zmienna $zawartosc zawiera HTML z danymi z bazy możemy je wyświetlić użytkownikowi<br>
echo $zawartosc;
//teraz czas na zapis pliku cache bo po co następny user ma generować to samo zapytanie i przetwarzać ten sam kod :)
if(!file_exists('naszcache/'.$hashCache.'.txt')){ //sprawdzamy czy plik nie istnieje jeśli tak to zapisujemy nowy
        $fp = fopen('naszcache/'.$hashCache.'.txt', 'x+');
        fwrite($fp, $zawartosc);
        fclose($fp);
}
if(file_exists('naszcache/'.$hashCache.'.txt')){
        if($roznica>3600){
        unlink('naszcache/'.$hashCache.'.txt'); // usuwam stary plik
        }
}
?>




Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
W tym kodzie jest malutki błąd, przed ?> powinno być jeszcze jedno } :)
autor: :) | 429 | 2009-08-22 12:07:48


Wcale, że nie. Kod jest napisany poprawnie i żadnych nawiasów klamrowych nie brakuje. Sprawdź jeszcze raz.
autor: Divix | 430 | 2009-08-22 13:05:02


    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors