askIT

Tidsberensning

Denne artikkelen forklarer hvordan man begrenser tilgangen til en side i 30 minutter etter den er kjørt. Dette kan brukes til for eksempel SPAM-sperre.

Test tidsbegrensning | Last ned

Først må vi gjette tilgangen til siden. Vi gjetter i starten at denne er lik 0.

<?php
/*- Access to page variables  --------------- */
$access_to_page 0;
?>

Deretter lager vi en mappe hvor vi kan lagre midletidlig filer.

<?php
/*- Temporary directory --------------------- */
$tmp_dir "_cache";
if(!(
is_dir("$tmp_dir"))){
    
mkdir("$tmp_dir");
}
?>

Deretter må vi hente IP adressen fra en bruker. Dette gjøres med REMOTE_ADDR.

<?php
/*- Write ip-block -------------------------- */
$remote_addr $_SERVER['REMOTE_ADDR'];
$remote_addr htmlspecialchars($remote_addr);
$remote_addr trim($remote_addr);
?>

Deretter kan vi kjøre en sjekk på om filen eksisterer eller ikke. Det vi ser etter er om en fil som er IP adressen til brukeren. Denne kan f.eks. være "_cache/182.29.392.123.dat". Hvis filen eksisterer må vi lese innholdet i filen. Hvis den ikke eksisterer må vi lage en ny fil med dette navnet. Inne i filen lagrer vi et tidsstempel med kommandoen time();.

<?php

// Check if IP file exists
if(file_exists("$tmp_dir/$remote_addr.dat")){
}
else{
}
?>

Hvis filen ikke eksisterer (altså ELSE) ser du under. Vi henter først ut tidsstempel også lagrer vi IP adressen i midletidlig mappe. Så setter vi access_to_page til 1, som betyr at brukeren har tilgang.

<?php

// Check if IP file exists
if(file_exists("$tmp_dir/$remote_addr.dat")){
}
else{
    
// File doesnt exist, write one
    
$time time();
    
$fh fopen("$tmp_dir/$remote_addr.dat""w+") or die("can not open file");
    
fwrite($fh$time);
    
fclose($fh);

    
// Set access to 1
    
$access_to_page 1;
}
?>

Under skriver vi hva som skjer HVIS filen eksister. Da må vi lese innholdet av filen, og sjekke differansen mellom innholdet i filen og nå. Hvis differansen er mindre en 180 sekunder gir vi ikke tilgang. Hvis differansen er mer en 180 sekunder gir vi tilgang, og skriver en ny time(); til filen.

<?php

// Check if IP file exists
if(file_exists("$tmp_dir/$remote_addr.dat")){
    
// File exists
    // Read time from file
    
$fh fopen("$tmp_dir/$remote_addr.dat""r");
    
$read_time fread($fhfilesize("$tmp_dir/$remote_addr.dat"));
    
fclose($fh);

    
// Calculate if time is over 3 minutes
    
$time time();
    
$difference_in_seconds =  $time-$read_time;
    
$time_left 180-$difference_in_seconds;

    if(
$time_left 0){
        echo
"
        <h2>Tilgang nektet</h2>

        <p>
        Du må vente 
$time_left sekunder før du får tilgang.
        </p>
        "
;
    }
    else{
        
// Set access to 1
        
$access_to_page 1;

        
// Write new file
        
$fh fopen("$tmp_dir/$remote_addr.dat""w+") or die("can not open file");
        
fwrite($fh$time);
        
fclose($fh);
    }
}
else{
    
// File doesnt exist, write one
    
$time time();
    
$fh fopen("$tmp_dir/$remote_addr.dat""w+") or die("can not open file");
    
fwrite($fh$time);
    
fclose($fh);

    
// Set access to 1
    
$access_to_page 1;
}
?>

Helt til slutt kan vi skrive ut siden.

<?php


/*- Print page ------------------------- */
if($access_to_page == 1){
    echo
"
    <h2>Velkomment til siden</h2>

    <p>
    Din IP adresse og tiden nå ble lagret i en fil, og
    blir lagret der i 3 minutter. Hvis du oppdaterer denne
    siden får du ikke tilgang før etter disse 3 minuttene
    er gått.
    </p>
    "
;
}
?>

mark_down.png Annonse

Akuratt nå: Ask IT bruker og anbefaler one.com for domener, e-post og webhotell!
hva-er-ditt-nye-domene.com
Besøk oss på one.com