Kapitel 15. Filer och filhantering

Innehållsförteckning
Filer
Arbetsmetod vid arbete med filer
Funktionen fopen
Funktionen fwrite
Readfile
Sammanhängande exempel
Mer läsning

När man skriver datorprogram vill man ofta spara information mellan olika körningar program. Ett sätt att göra detta är att lagra informationen i en eller flera filer. I detta kapitel behandlas hur man gör.

Filer

Innan vi börjar använda oss av filer i programmeringen skall vi titta lite kort på vad en fil är. En fil är en samling sammanhängande information på ett medium, oftast en hårddisk, som man namngett.

För att läsa eller skriva i filen använder man ett filhandtag (eng. file handle). När man programmerar kan man inte hoppa runt i filen hur som helst lika enkelt som man gör i till exempel ett ordbehandlingsprogram.

Arbetsmetod vid arbete med filer

När man jobbar med filer i PHP använder man följande metodik.

Man öppnar en fil med ett anrop till funktionen fopen . Den funktionen returnerar ett filhandtag. Detta filhandtag kan man sedan använda för att skriva till eller läsa från filen. Slutligen skall man stänga sin fil med funktionen fclose. När man har en fil öppen finns det också, även om man inte märker det så ofta, en så kallad filpekare som håller reda på var i filen man är.

Funktionen fopen

Funktionen fopen tar två argument och returnerar ett filhandtag. Så här kan ett anrop till fopen se ut:

Exempel 15-1. Funktionen fopen


<?php
$filhandtag = fopen("/home/rejas/data/testfil", "a");
?>

				
Vad som sker är att $filhandtag tilldelas ett handtag till filen testfil i katalogen /home/rejas/data/. Observera att detta är sökvägen till filen på servern och att den användare som kör webservern måsta ha rätt att läsa och eventuellt skriva till filen. Det första argumentet är således filnamnet, men vad är det andra? Jo det andra talar om på vilket sätt filen skall öppnas. Följande är de vanligaste värdena på det andra argumentet och deras innebörder:

Tabell 15-1. Andra argumentet till fopen

VärdeInnebörd
r Öppnar en fil endast för läsning, filpekaren placeras först i filen.
r+ Öppnar en fil för läsning och skrivning, filpekaren placeras i början av filen.
w Öppnar en fil endast för skrivning, filpekaren ställs ställs först i filen. Om filen inte finns skapas den och om den finns så blir den överskriven.
w+Samma som w men öppnar även för läsning
a Öppnar endast för skrivning. Skapar filen om den inte finns. Ställer filpekaren i slutet av filen.
a+Samma som a men även för läsning.
x Öppnar en fil för skrivning och placerar filpekaren i början av filen. Om filen redan existerar returnerar funktionen FALSE och ett varnings meddelande kan komma att skrivas ut. Annars skapas filen.
x+ Samma som x men tillåter även läsning av filen.
Argumenten med + till fopen verkar bra att använda men används faktiskt inte så ofta som man kan tro.

Funktionen fwrite

Funktionen fwrite använda för att skriva till en fil. Den tar två argument, ett filhandtag och så det som skall skrivas till filen.

Ett exmpel:

Exempel 15-2. Funktionen fwrite


<?php
$fh = fopen("/home/rejas/data/testfil", "a");
fwrite($fh, "Hej på dig\n");
fclose($fh);
?>

				
Funktionen fwrite returnerar false om det skulle vara så att den inte kan skriva till filen så det kan vara bra att kolla att det går bra.

Exempel 15-3. Funktionen fwrite med felkontrol


<?php
$fh = fopen("/home/rejas/data/testfil", "a");
if (! fwrite($fh, "Hej på dig\n")) {
   echo "Ooops, fel vid skrivning till fil";
   exit; // Avbryter körningen
}

fclose($fh);
?>

				
Även fopen returnerar false om den inte kan öppna filen, att kolla detta lämnas som övning till läsaren :).

Readfile

Readfile är en av många funktioner som kan användas för att läsa från en fil. Den läser en hel fil och skriver ut den på utskiftsbufferten.

Se följande exempel:

Exempel 15-4. Exempel med readfile


<?php
readfile("/home/rejas/data/testfil");
?>

				

Sammanhängande exempel

Nu kan vi skriva ett litet program som varje gång det körs lägger till en rad i en fil och skriver ut filen.

Exempel 15-5. Sammanhängande exempel på filanvändning


<?php
$filename = "/home/rejas/data/testfil";

$fh = fopen($filename, "a");

if (! fwrite($fh, "Hej på dig\n")) {
   echo "Ooops, fel vid skrivning till fil";
   exit; // Avbryter körningen
}

fclose($fh);

readfile($filename);
?>

				

Mer läsning

Mer information om funktioner för att hantera filer och filsystem finns här: http://www.php.net/manual/en/ref.filesystem.php