25. Tæller med PHP

Du er her: StartIndholdsfortegnelse → Tæller med PHP
Indhold

Introduktion

Resultatet af dit arbejde er en tæller, der viser, hvor mange gange din hjemmeside er blevet besøgt. (OBS: Det er en lidt upræcis tæller, da den også tæller hver gang man reloader siden, men alligevel). Tallene bliver vist med grafik. Du kan se det færdige resultat her: taeller_ex.php.

Det vil sige, du skal bruge 10 grafik-filer med tallene fra 0 til 9. Desuden skal du bruge en tekst-fil, der gemmer antallet af besøg. Tallet i tekst-filen starter på 0.

Opret mappe og download filer

  1. Opret en ny mappe og giv den navnet taeller
  2. Download derefter følgende filer til mappen taeller:
    1. tal.txt
    2. 0.gif
    3. 1.gif
    4. 2.gif
    5. 3.gif
    6. 4.gif
    7. 5.gif
    8. 6.gif
    9. 7.gif
    10. 8.gif
    11. 9.gif

Indtast kode

  1. Opret et nyt dokument og gem det som index.php
  2. Indtast derefter nedenstående kode (forklaring følger):
<? 

$plustal = 1;
$gif_tal = 0;

$fil = fopen("tal.txt", "r");
$antal = fgets($fil, 1096);
fclose($fil);

$nyt_tal = $antal + $plustal;

$fil = fopen("tal.txt", "w");
fwrite($fil, $nyt_tal);
fclose($fil);

$laengde = strlen($nyt_tal);

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><title>Side med tæller </title>
<meta name="Generator" content="Stone's WebWriter 4">
</head>
<body>
<h1>Min hjemmeside</h1>
<p>Her kommer din normale side, med din egen tekst 
og dine egne billeder.</p>

<p>Så mange gange er hjemmesiden blevet hentet: 
<?

for($i = 0; $i<$laengde; $i++) 
{
 $gif_tal = substr($nyt_tal, $i, 1);
 echo "<img src=\"$gif_tal.gif\" border=\"0\">";
}

?>
</p>
</body>
</html>

Forklaring til koden

Her følger forklaringen på PHP-scriptet. Jeg tager dem et par linier af gangen:
  1. <? 
    
    $plustal = 1;
    $gif_tal = 0;
    
    Tegnet <? viser, at nu starter noget PHP-kode (tilsvarende: ?> slutter PHP-koden.
  2. $fil = fopen("tal.txt", "r");
    $antal = fgets($fil, 1096);
    fclose($fil);
    
    Kommandoen fopen() bruges til at åbne en fil. Her åbnes tal.txt og "r" betyder at der kun læses fra filen ("read"). Resultatet gemmes i variablen $fil.
    Kommandoen fgets() bruges til at læse en linie (eller 1096 tegn) fra den fil, der lige er blevet åbnet. Resultatet gemmes i variablen $antal.
    Kommandoen fclose() lukker filen igen.
  3. $nyt_tal = $antal + $plustal;
    
    Her lægger vi værdien af det tal, der blev gemt i variablen $antal sammen med værdien, der er gemt i variablen $plustal. Resultatet gemmes i variablen $nyt_tal. (Dette kunne godt gøres mere elegant, men på denne måde har du mulighed for at lægge f.eks. 1234 til hver gang, for at checke hvordan tælleren ser ud med store tal).
  4. $fil = fopen("tal.txt", "w");
    fwrite($fil, $nyt_tal);
    fclose($fil);
    
    Her åbner vi filen tal.txt for at kunne skrive i den ("w" = "write").
    Kommandoen fwrite() skriver værdien fra $nyt_tal ind i $fil (som er variablen, hvor filen tal.txt er gemt).
    Den gamle værdi bliver slettet. Derefter lukkes filen igen.
  5. $laengde = strlen($nyt_tal);
    
    ?>
    
    Kommandoen strlen() tæller, hvor mange tegn (i dette tilfælde cifre), der er i variablen $nyt_tal. Dette skal vi bruge senere, når vi skal bruge en .gif-fil for hvert ciffer i tallet.
    ?> slutter PHP-koden i første omgang og derefter følger almindelig HTML-kode.
  6. <html>
    <head><title>Side med tæller </title>
    <meta name="Generator" content="Stone's WebWriter 4">
    </head>
    <body>
    <h1>Min hjemmeside</h1>
    <p>Her kommer din normale side, med din egen tekst 
    og dine egne billeder.</p>
    
    <p>Så mange gange er hjemmesiden blevet hentet: 
    
    Bare almindelige HTML-koder og tekst. Her kan du selvfølgelig skrive, hvad du har lyst.
  7. <?
    
    for($i = 0; $i<$laengde; $i++) 
    {
     $gif_tal = substr($nyt_tal, $i, 1);
     echo "<img src=\"$gif_tal.gif\" border=\"0\">";
    }
    

    <? = her starter PHP igen. Derefter kører vi en løkke: for()-kommandoen. En løkke bliver gentaget så mange gange, som det angives i parentesen.
    Vi starter løkken ved 0 ($i = 0), og den bliver ved så længe tallet $i er mindre end antallet af cifre i variablen $laengde ($i<$laengde), hver gang løkken er kørt igennem én gang bliver der lagt 1 til ($i++)

    Mellem de to tuborg-parenteser { og }, kører løkken så.
    Kommandoen substr() læser en del af en tekst. I dette tilfælde læser den ét tegn (tallet 1 tilsidst i parentesen), den læser fra vores variabel $nyt_tal og den starter ved positionen $i. (Dvs. første gang ved position 0 og læser 1 tegn, anden gang ved position 1 og læser 2 tegn osv. indtil hele tallet er læst et ciffer af gangen).

    For hvert tal bruges kommandoen echo til at skrive noget på skærmen (dvs. i browseren). I dette tilfælde er det HTML-koden til et billede (skrevet med PHP-koder, så HUSK backslash og gåseøjne de rigtige steder). Hver gang løkken køres igennem hentes et gif-billede, der svarer til tallet.

  8. ?>
    </p>
    </body>
    </html>
    
    Derefter sluttes PHP (med ?>) og HTML-siden sluttes som sædvanlig med </body> og </html>

Upload filer til serveren

Du skal nu smide det hele over på serveren.

  1. Log på serveren
  2. Opret en ny mappe og kald den taeller
  3. Upload index.php, grafikfilerne og tal.txt til mappen taeller

Skift rettigheder til filen tal.txt

For at det kan lade sig gøre at skrive til filen tal.txt skal du ændre rettighederne til filen. Hvad det vil sige kommer jeg ikke ind på her, men sådan gør du:

Jeg går stadig ud fra at vores "eksempelbruger" har koder, der ser sådan ud:

Dennegang skal du prøve at bruge Internet Explorer til FTP-program:

  1. Start Internet Explorer
  2. Skriv i adresselinien:
    ftp://solen:1234@solen.her
    
    Dvs:
  3. Tast Enter Du får nu en oversigt, der minder meget om Windows Stifinder.
  4. Åbn mappen taeller
  5. Højreklik på filen tal.txt
  6. Vælg: Egenskaber
    Du får nu en dialog-boks, der viser de egenskaber filen har på serveren.
  7. Udfyld således:
  8. Afprøv til sidst siden i din browser. Den burde nu tælle én op, hver gang du henter siden (eller hver gang du reloader siden).