<< Tilbage

Filsystemet

Inkluder en fil

At inkludere en fil i PHP er utroligt simpelt og kan køres med én linje kode:

Kode:
1.
2.
3.
<?php
include("filnavn.php");
?>

Man kan også bruge require() i stedet for include(), den eneste forskel er den måde de opfører sig på hvis filen ikke kan findes. Ved include fortsætter den med at indlæse resten af siden selvom include filen ikke kan findes, men ved require stopper den.

Læg indholdet af en fil over i variabel

I princippet lige så simpelt som at inkludere en fil, her benytter vi bare funktionen file_get_contents(). Eksempel:

Kode:
1.
2.
3.
4.
<?php
$filindhold 
file_get_contents("filnavn.txt"); //Indholdet af filnavn.txt tildeles variablen $filindhold
echo $filindhold;
?>

Læs en fil linje for linje

Gemmer man ting (diverse lister) i tekstfiler kan det tit være nødvendigt at læse en fil linje for linje. I nedenstående eksempel har jeg gemt en liste med søgemaskiner i en tekstfil (se fil), og indlæser den så i et array.

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
$fil 
file("sogemaskiner.txt"); //$fil bliver et array med én linje i hver position

//Vis indholdet af arrayet
foreach($fil as $linje)
{
    echo 
$linje "<br />";
}

?>
Resultat:
Google
Altavista
Lycos
Yahoo

Skrive til en fil

Når man vil skrive noget indhold til en fil vha. PHP, så benytter man en såkaldt datastrøm. Vi tager udgangspunkt i et eksempel:

Kode:
1.
2.
3.
4.
5.
6.
<?php
$indhold 
"Dette er noget indhold"//Indhold vi gerne vil have ind i filen
$fil fopen("minfil.txt""w"); //Åben filen
fwrite($fil$indhold); //Skriv indholdet af $indhold ind i filen
fclose($fil); //Luk filen
?>

For at åbne en fil til skrivning i php benyttes funktionen fopen(). I det første parameter oplyses der hvilken fil vi gerne vil arbejde med (i dette tilfælde minfil.txt). Det andet parameter fortæller hvordan vi ønsker at åbne filen (skal indholdet slettes i filen først? Skal indholdet smides ind sidst eller først i filen?). Jeg har i eksemplet brugt w, som betyder at filen åbnes kun for skrivning, den skriver i begyndelsen af filen, sletter alt andet indhold og hvis filen ikke eksistere så opretter den en. I tabellen herunder kan du se hvilke muligheder du har:

Metode Betydning
r Åben kun for læsning, start i begyndelsen af filen.
r+ Åben for både læsning og skrivning, start i begyndelsen af filen.
w Åben kun for skrivning, start i begyndelsen af filen, slet alt indhold i filen først og opret filen hvis den ikke eksisterer
w+ Åben for læsning og skrivning, start i begyndelsen af filen, slet alt andet indhold i filen og opret filen hvis den ikke eksisterer
a Åben kun for skrivning, start i slutningen af filen og opret filen hvis den ikke eksisterer
a+ Åben for læsning og skrivning, start i slutningen af filen og opret filen hvis den ikke eksisterer

Når filen er åbnet med det rette formål (i eksemplet w), så benyttes funktionen fwrite() fil at skrive en variabel til filen. Og endeligt afsluttes der med fclose() for at lukke filen (det skal man altid gøre når man er færdig med at arbejde med "datastrømmen".

En datastrøm i php oprettet med fopen() kan ikke kun bruges til at skrive til filer, men også at læse fra den. Dette gøres vha. fgets() funktionen.

Simpel counter i php

I denne lille guide vises hvordan man kan lave en simpel counter, baseret på tekstfiler. Den komplette kode ses i boksen herunder, og bagefter gennemgås den linje for linje.

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
$hits 
file_get_contents("counter.txt"); //Læs indholdet af filen (antallet af hits)
$hits++; //Læg 1 til
echo $hits//Skriv antallat af hits ud på skærmen

//Gem det nye tal i tekstfilen
$fil fopen("counter.txt""w"); //Åben tekstfilen hvor antallet af hits gemmes i
fwrite($fil$hits); //Gem $hits som vi lige har lagt 1 til, i filen
fclose($fil); //Luk filen
?>
Resultat:
2523

2: Her bruger vi funktionen file_get_contents() til at finde indholdet af counter.txt. I denne tekstfil gemmes det samlede antal hits.
3: Her forøger vi antal med 1 (hver gang siden indlæses bliver der lagt 1 til selvfølgelig).
4: Det nye tal skrives ud på skærmen.
7: Nu skal vi have skrevet det nye tal/hits ned i tekstfilen igen, sådan at det bliver gemt til næste gang. Vi bruger fopen() til at åbne filen, med metoden w. Som beskrevet i forrige afsnit, så betyder det at vi åbner filen kun for skrivning (vi behøver ikke læse noget fra den, vi skal bare have gemt et tal heri) og alt andet indhold i filen slettes (så der kun er det nye tal i tekstfilen).
8: fwrite() gemmer tallet i tekstfilen. Det første parameter angiver hvilken fil vi har med at gøre, og det andet parameter fortæller hvad der skal proppes i filen.
9: Sørg for at lukke filen med fclose()

Hvis du modtager en fejl, kan det skyldes at du ikke har rettigheder til at skrive til filen fra php. Derfor kræver det at du chmod'er filen til f.eks. 777.

Lav et upload script i php

Vi vil nu forsøge at lave et uploadscriptet vha. php, hvor brugeren kan vælge hvilken fil der skal uploades. Det første der skal på plads er selve formen, hvor brugeren vælger sin fil. Dette gøres på følgende måde:

Kode:
1.
2.
3.
4.
5.
<form action="eks1.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    Vælg fil: <input name="minfil" type="file">
    <input type="submit" value="Upload fil">
</form>

Der er et par ting at bemærke til koden. I den første linje er der tilføjet attributen enctype, som er nødvendig for at upload-scriptet vil virke. Læg også mærke til det skjulte felt med navnet MAX_FILE_SIZE, der fortæller hvor store filerne maksimalt kan være i bytes (i eksemplet er det 100000 bytes, dvs. 100kb).

Så kommer det interessante, nemlig php delen:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<?php
if ($_FILES['minfil']) //Har brugeren forsøgt at uploade noget?
{
    
//Bestem hvor filen skal smides hen og og hvad den skal hedde
    
$destination "uploadede_filer/" $_FILES['minfil']['name'];

    
//Forsøg at flyttede den uploadede fil har dens midlertidige destination til den nye
    
if (move_uploaded_file($_FILES['minfil']['tmp_name'], $destination))
    {
        echo 
"Filen" $_FILES['minfil']['name'] . " blevet uploadet";
    }
    else
    {
        echo 
"Der er sket en fejl";
    }
}
?>

Forklaring:
2. Her tjekkes der om brugeren har postet formen og der rent faktisk er en fil med. Hvis ja, skal den gå videre og uploade filen.
5. Her bestemmes den uploadede fils destination. Den kommer til at ligge i undermappen "uploadede_filer", med samme navn som den hedder på brugerens computer. Der er brugt $_FILES['minfil']['name'] fil at finde ud af hvad den uploadede fil hedder (se evt. boksen under forklaringen, da man også kan finde andre information om filen).
8. Det her sted er lidt tricky. Når brugeren trykker "send fil", så bliver brugerens fil i virkeligheden uploadet til webserveren hvor den ligger midlertidigt. Det kan vi ikke bruge til noget, derfor bruger vi kommandoen move_uploaded_file() til at flytte filen til den ønskede destination. $_FILES['userfile']['tmp_name'] bruges, som beskrevet i tabellen herunder, til at finde navnet på den midlertidige fil..

Variabel Resultat
$_FILES['minfil']['name'] Giver navnet på den uploadede fil, magen til det den hedder på brugerens computer
$_FILES['userfile']['type'] Hvilken type fil er uploadet? (MIME format). F.eks. "image/jpeg"
$_FILES['userfile']['size'] Filstørrelsen i bytes
$_FILES['userfile']['tmp_name'] Filens midlertidige navn

Det samlede script bliver altså:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
<?php
if ($_FILES['minfil']) //Har brugeren forsøgt at uploade noget?
{
    
//Bestem hvor filen skal smides hen og og hvad den skal hedde
    
$destination "uploadede_filer/" $_FILES['minfil']['name'];

    
//Forsøg at flyttede den uploadede fil har dens midlertidige destination til den nye
    
if (move_uploaded_file($_FILES['minfil']['tmp_name'], $destination))
    {
        echo 
"Filen" $_FILES['minfil']['name'] . " blevet uploadet";
    }
    else
    {
        echo 
"Der er sket en fejl";
    }
}
?>

<form action="eks3.php" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="100000">
    Vælg fil: <input name="minfil" type="file">
    <input type="submit" value="Upload fil">
</form>

Husk at ændre eks3.php til navnet på selve php filen der eksekverer scriptet. Husk også at det kan bliver nødvendigt at chmod'e (til f.eks. 777) mappen hvor de uploadede filer lægges i, så rettighederne er i orden.

Vis alle filer i en mappe

Relativt simpelt, man benytter funktion opendir() til at "åbne" en mappe og derefter readdir() til at loope igennem filerne i mappen. Et eksempel:

Kode:
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?
$dirname 
"testmappe/"//Hvor skal den lede efter filer?
$dirhandle opendir($dirname); //Åben mappen
while($file readdir($dirhandle)) //Loop gennem mappen
{
    if (
$file != "." && $file != ".."//Fjern . og ..
    
{
        if (
is_file($dirname.$file)) //Find ud af om det er en fil eller en mappe
        
{
            echo 
"fil: " $file "<br>";
        }
        else
        {
            echo 
"mappe: " $file "<br>";
        }
    }
}
?>
Resultat:
mappe: mapp123
fil: 123.txt
fil: bongo.txt
fil: test1.txt
mappe: nymappe

Diverse fil-funktioner

Slet fil

I PHP kan man slette filer ved at benytte unlink(). Funktionen tager filnavnet som parameter. Eksempel:

Kode:
1.
2.
3.
<?php
unlink
("mintestfil.txt"); //Slet en fil vha. php
?>

Slet mappe

Det er lige så simpelt at slette en mappe som en fil i php, og man benytter funktionen rmdir(). Et eksempel:

Kode:
1.
2.
3.
<?php
rmdir
("minmappe/mappe1/"); //Slette en mappe i php
?>

Kopier fil

I php kan man kopiere filer vha. funktionen copy($source, $destination). Det første parameter er hvilken fil man ønsker at kopiere, og det næste er filen destination (fuldt filnavn begge steder). Eksempel:

Kode:
1.
2.
3.
<?php
copy
("testdokument.txt""abctest.txt"); //Kopier en fil med php
?>

Tjek om fil og mappe eksisterer

For at tjekke om en given fil eksisterer kan man benytte is_file(). F.eks.:

Kode:
1.
2.
3.
4.
5.
6.
<?php
if (is_file("filnavn.jpg")) //Tjek om filen findes
{
    
//Filen findes
}
?>

Hvis man vil tjekke om en mappe findes kan man gøre følgende:

Kode:
1.
2.
3.
4.
5.
6.
<?php
if (is_dir("testmappe/")) //Test om en mappe findes med php
{
    
//Mappen findes
}
?>

Leder du efter billige usb stik?, så kan du få et Billigt USB stik hos usb.dk

Spørgsmål/forslag/kommentarer rettes til webmaster@phpartikler.dk

Billige USB stik