I denne artikkel vil jeg gennemgå det alt det tekniske bag oprettelsen og brugen af en logfil og så nogle små idéer som inspiration til brugen af logfiler. Dette er min første artikkel så i må endelig komme med ider til rettelser osv. på: bjerregaard_6@msn.com
Oprettelse af logfilen
Logfilen er bare et ganske almindeligt .txt dokument du ligger i din hjemmesides rod. Det eneste du skal huske er at højreklikke på filen og gå ind under Egenskaber. Her sætter du hak i alle 9 felter under Tilladelser. Så kan vi skrive til filen.
Log Scriptet
Scriptet er lavet som en funktion så det er nemt og overskueligt at skrive til logfilen:
$indput = str_replace("#IP", $_SERVER['REMOTE_ADDR'], "$indput");
$indput = str_replace("#REF", $_SERVER['HTTP_REFERER'], "$indput");
$indput = str_replace("#AGENT", $_SERVER['HTTP_USER_AGENT'], "$indput");
$indput = str_replace("#HOST", $_SERVER['REMOTE_HOST'], "$indput");
$indput = str_replace("#PORT", $_SERVER['REMOTE_PORT'], "$indput");
$indput = str_replace("#SELF", $_SERVER['PHP_SELF'], "$indput");
$sidsteLinie = end(file("logfile.txt"));
if(preg_match('/\\[.+?\\]/', $sidsteLinie, $match))
$olddate = str_replace("[", "", "$match[0]");
$olddate = str_replace("]", "", "$olddate");
$handle = fopen("logfile.txt", "a");
if($olddate < date("d-m-Y")) { fwrite($handle, "\n---------------------------------------- ".date("d-m-Y")." ----------------------------------------\n\n"); }
fwrite($handle, "[".date("d-m-Y H:i:s")."] ".$indput." \n");
fclose($handle);
}
Ok... det kan måske nok virke lidt uoverskueligt så lad os bryde funktionen op i et par smådele:
$indput = str_replace("#REF", $_SERVER['HTTP_REFERER'], "$indput");
$indput = str_replace("#AGENT", $_SERVER['HTTP_USER_AGENT'], "$indput");
$indput = str_replace("#HOST", $_SERVER['REMOTE_HOST'], "$indput");
$indput = str_replace("#PORT", $_SERVER['REMOTE_PORT'], "$indput");
$indput = str_replace("#SELF", $_SERVER['PHP_SELF'], "$indput");
Med PHP's indbyggede funktion str_replace() kan vi erstate nogle hjemmelavede forkortelser. Dette gør det hele meget nemmere og mere overskueligt når vi skriver i logfilen. F.eks kan man i øverste linie se at #IP erstattes af $_SERVER['REMOTE_ADDR']. Så hvis vi i scriptet skriver "Min ip adresse er #IP" så vil der i logfilen stå "Min ip adresse er 235.155.10.5" (eller hvad ip adressen nu end er). Som du kan se er der en række funktioner includeret. Denne liste kan forkortes / forlænges efter eget valg husk dog at ikke alle af dem understøttes af alle servere.
if(preg_match('/\\[.+?\\]/', $sidsteLinie, $match))
$olddate = str_replace("[", "", "$match[0]");
$olddate = str_replace("]", "", "$olddate");
I denne del starter vi med at finde den sidste linie i dokumentet så vi altid skriver efter den. Vi udskiller og undersøger også datoen forden sidst skrevne linie så vi er klar til at lave en datolinie hvis det er nødvendigt.
if($olddate < date("d-m-Y")) { fwrite($handle, "\n---------------------------------------- ".date("d-m-Y")." ----------------------------------------\n\n"); }
fwrite($handle, "[".date("d-m-Y H:i:s")."] ".$indput." \n");
fclose($handle);
Her kommer så den centrale del af funktionen, delen hvor vi skriver til logfilen. Først gør vi klar til skrivning ved at åbne filen med fopen(). Så undersøger vi om datoen for den sidste linie er ældre end dags dato og hvis den er det skriver vi en datolinie med dags dato. Så, nu er vi endeligt klar til at skrive i scriptet. Det gør vi med fwrite() læg mærke til at vi skriver en dato i [] klammerne ud for tekstenså vi altid ved hvornår den er skrevet. Efter vi har skrvet lukkes filen med fclose().
Brug af scriptet
Når hele funktionen er sat ind på ens side er det meget nemt at skrive til son logfil. Det gøres (som de fleste nok har gættet) ved at kalde funktionen.
LOGFILE("og en anden tekst og en ip: #IP");
LOGFILE("men så gider vi heller ikke mere");
Giver så følgende resultat i logfilen:
[18-11-2005 17:53:25] en tekst til min logfile
[18-11-2005 17:53:25] og en anden tekst og en ip: 235.155.10.5
[18-11-2005 17:53:25] men så gider vi heller ikke mere
Sikkerhed!
Efter som logfilen liger i roden af dit system er den jo åben for alle der vil læse i den... og det er jo ikke så smart. Men vi er heldigvis så priviligerede at hvis man ligger på en Apache server (hvilket de felste gør) kan man bruge lidt smart kode i en .htaccess -fil. Hvis dette ikke siger dig noget kan jeg kun anbefale to glimrende artikler på webcafe.dk:
www.webcafe.dk/artikler/apache/htaccesspassword/
www.webcafe.dk/artikler/apache/htaccesspassword2/
Men baseret på disse to artikler kan man lynhurtigt lave et glimrende lille script der kun beskytter din logfil.
AuthType Basic
AuthUserFile /et/sted/på/din/server/htpasswd
<Files logfile.txt>
require valid-user
</Files>
Denne kode gemmer du i din .htaccess -fil samme sted som din logfil og vupti, en password bekyttet logfil.
Men hvad skal jeg bruge det til?
Som jeg også skrev i starten af denne artikkel er logfiler klart undervurderet til brug på hjemmesider. Jeg bruger personligt logfiler til rigtigt meget.
På mindre hjemmesider med et begrænset antal besøg om dagen kan man bruge dem til dybte gående analyser af folks vandren på ens sider. Dette gør at du nemt og hurtigt kan se hvad folk laver på din side, hvilke sektioner de besøger og ikke mindst hvilke de IKKE besøger.
Til større sider er logfiler perfekte til at gemme erros i. F.eks hvis du har en side med mange forskellige og vekslende ting i din DB så er logfilen god til at gemme SQL syntaks erros i. Mange af disse erros vil du måske ikke opdage og derofr kan filen hjælpe som ekstra sikkerhed.
Men mulighederne er uendelige. Så god fornøjelse ;)
HKB


