160 likes | 254 Views
Webprogrammering. Filbehandling i PHP. I dag. Bruk av filer i PHP Kodegjennomgang Oppgaveløsning på lab. Bruk av filer. For å lagre data permanent. I motsetning til Superglobals (Sessions) Lagres på server (i motsetning til Cookies). Brukes for enkel lagring av data.
E N D
Webprogrammering Filbehandling i PHP
I dag • Bruk av filer i PHP • Kodegjennomgang • Oppgaveløsning på lab
Bruk av filer • For å lagre data permanent. • I motsetning til Superglobals (Sessions) • Lagres på server (i motsetning til Cookies). • Brukes for enkel lagring av data. • Mer komplekse data -> Databaser
Filhåndtering • Lage filen • Åpne filen • Operere mot filen (lese eller skrive) • Lukke filen
Lage filen • For at PHP skal kunne skrive til filen må denne lages på serveres først: • Først må det lages en katalog på serveren som har alle rettigheter (777). • Så må filen lages med alle rettigheter (777 ,slik at PHP kan skrive til den). • Dette må gjøres på serveren via f.eks WinSCP • Holder med 666, (incl. others write).
Lage katalog/fil i WinSCP • Opprett ny katalog under www (høyrekikk og velg new folder eller F7). • Velg ”more” under Create-folder og velg set permission. Kryss av alle muligheter (til du får 777). • Evt. etter at ny katalog er opprettet høyreklikk på katalogen og velg ”Properties”. Velg så alle ”Permissions” (777). • Gjør tilsvarende med filen du ønsker opprettet
Fil-funksjoner • fopen(”filnavn”,”modus”); • Modus r : read, r+ : read/write, w bare write • Returnerer filreferanse som brukes videre • fwrite(filreferanse, ”streng til filen”); • Bruk \n for å få ny linje i strengen • $streng = fgets(filreferanse); • Leser en linje inn i strengen • fclose(filreferanse)
<?php $filref=fopen("temp/testfil.txt","w"); // fra lokal root dvs. www fwrite($filref,"Nå skriver jeg noe til filen \n Dette er andre linje i filen"); fclose($filref); $filref=fopen("temp/testfil.txt","r"); $filstring=fgets($filref); echo "Her er innholdet av filen : <br/>".$filstring; echo "<br/> Her er andre linje : <br/>"; $filstring=fgets($filref); echo $filstring; fclose($filref); // dette er ikke nødvendig men en god vane. ?> Her er innholdet av filen : Nå skriver jeg noe til filen Her er andre linje : Dette er andre linje i filen
Teller for antall besøkende Her ligger php filen i en annen katalog på samme nivå som temp <?php $filref=fopen("../temp/teller.txt","r"); $teller=fgets($filref); fclose($filref); $teller++; $filref=fopen("../temp/teller.txt","w"); fwrite($filref,$teller); fclose($filref); echo "Telleren er nå ".$teller; ?> Telleren er nå 1 Telleren er nå 2 Telleren er nå 3 Merk for at dette skal fungere må filen eksistere med riktige rettigheter og inneholde en initial verdi (0)
Andre fil-funksjoner • fread(filreferanse,antall tegn) • Leser et antall tegn fra filen • feof(filreferanse) • Sjekker om filen er lest til slutten (end of file) • file(”filnavn”) • Leser hele filen inn i et array, linje for linje • Behøver ikke å bruke open/close • Merk: ikke filpekeren
Andre fil-funksjoner forts. • filemtime(”filnavn”) • Returnerer dato/tid for fil sist endret (innhold) • file_get_contents(”filnavn”) • Returnerer hele filen til en string • fgetc(filreferanse) • Leser et og et tegn fra filen • readfile(”filnavn”) • Leser hele filen og echo’er den ut på skjerm
Opplasting av filer til server • For å lagre tekst-filer (f.eks opplasting i Fronter) • For å lagre bilde-filer (f.eks til et fotoalbum) • En ny type i HTML skjema : ”file” • Filen lastes opp i et temp område på server • Henter filinformasjon via $_FILES[ ][ ] (to dim) • Må flyttes til ditt sted : move_uploaded_file • Bruke HTML <img src=filnavn..> for å vise
Skjema for å laste opp en fil NB! <form action="fil2.php" method="post" enctype="multipart/form-data"> Skriv inn filnavnet som du ønsker å laste opp:<br/> <input type="file" size="20" name="filstreng" /> <input type="submit" name="knapp" value ="Last opp"/> </form> Skriv inn filnavnet som du ønsker å laste opp: Browse… Last opp
Kode for å flytte filen og vise den <?php // www/kode/fil2.php $temp_fil = $_FILES["filstreng"]["tmp_name"]; // array med to dimensjoner $filnavn = $_FILES["filstreng"]["name"]; // Må ta utgangspunkt i www som topp-node. // Denne PHP filen ligger under www/kode/, derfor trenger vi å gå opp .. og ned $helt_filnavn = "../temp/".$filnavn; // Katalogen /temp/ må ha riktige rettigheter (777 eller 666 i Unix). move_uploaded_file($temp_fil,$helt_filnavn); // Må ta utgangspunkt i www som topp-node. echo "<img src='../temp/$filnavn' height = '200' align = 'left'>"; ?>
Katalogfunksjoner • For å vise alle bildene i en katalog: • opendir(”katalognavn”); • Returnerer en katalogreferanse • readdir(katalogreferanse); • Returnerer en og en katalog/filnavn • Kan bruke while ($neste = readdir(ref)) • For å returnere alle katalog/filnavnene • Legge inn katalog/filnavn inn i <img src=…>
trim • Når data fra en fil skal testes på • For å unngå ”whitespaces ” etter tegnet • $tegn = fgets(fil); • $tegn1 = trim($tegn); • If $tegn1 = ”a” • { • echo ”a er lest inn”; • } • $tegn = fgets(fil); • If $tegn = ”a” • { • echo ”a er lest inn”; • } Ikke denne Men denne!