Fil upload

Tags:    php upload filer billeder
Skrevet af Bruger #5620 @ 02.04.2011

Denne side viser, hvordan Uploader-klassen bruges, Det antages at denne klasse er lagt i en fil kaldet "uploader.php".

Et fuldt eksempel på brug af klassen:
Fold kodeboks ind/udKode 


HTML-formen



Fold kodeboks ind/udHTML kode 


For at kunne uploade filer til serveren fra en HTML side, er det nødvendigt at oprette en form, hvis enctype attribut er sat til "multipart/form-data", linje 3.

Dette ændrer, hvordan data blive indkodet fra browseren, før den sendes til serveren. Sættes dette attribut ikke vil data blive indkodet som i en url "field1=value1&field2=value2", men dette kan ikke bruges til at sende fildata, der består af bytes sat til alle de mulige værdier.

Derfor ændres indkodningen til at være data delt op i datablokke adskilt af en unik datalinje. Dataen i filen, der uploades, bliver da en af disse blokke. Se eksempel.

For at brugeren skal kunne vælge en fil, der skal uploades til serveren, skal formen have et input-tag, hvis type er sat til "file", linje 5.


PHP delen



Fold kodeboks ind/udPHP kode 


Som altid lægger PHP delen foran HTML i en side. Det første som PHP-koden tester er om forman faktisk er blevet submitted, dette gøres ved at teste om "submit" er sat i det super globale array $_POST, linje 2.

Da HTML-formens method attribut er sat til "post" vil data fra formen være tilgængelig i det før omtalte array og da submit knappens name attribut er sat til "submit" vil der altså være et indeks kaldet "submit" i $_POST arrayet.

Hvis formen er blevet postet indlæses "uploader.php" filen, linje 3. Da filen indeholder en klasse er det vigtigt at denne fil kun indlæses én gang da der ellers vil opstå fejl. Da det antages, at det er en fejl, hvis denne fil ikke findes, bruges "require_once" i stedet for "include_once". Forskellen er at den første forårsager fejl når filen ikke findes mens den and blot giver en advarsel.

Der oprettes en instans ($obj) af Uploader-klassen, linje 4.

Den fil som brugeren uploader skal lægges et sted på serveren. For eksempel hvis formen bruges til at upload portrætter og disse skal lægges i folderen "portraits" på serveren. Linje 5, fortæller $obj objektet, hvor den skal lægge en fil.

Da det formentlig ikke ønskes at være muligt at upload andet end billeder til en portræt folder, er det muligt at fortælle $obj, hvilke filendelser (filnavn.endelse) der er tilladte. Dette gøres i linje 6, hvor der fortælles, at kun "jpg" og "png" er lovlige filendelser. Ønskes flere lovlige endelser gives disse blot som ekstra argumenter ønskes alle endelser lovlige kaldes metoden ikke.

Da $obj objektet nu er initialiserede kaldes metoden "post" med navn på filens input-tag i HTMLformen. Denne metode vil rykke filen brugeren valgte i det felt til den ønskede folder og returnere sandt. Hvis den fejler returnerer metoden falsk. Derfor testes der på om metoden returnerer falsk, linje 7. Hvis den gør kaldes metoden "get_error_message", linje 8, som returnerer en fejlbesked på engelsk og denne besked udskrives.

Hvis post ikke fejlede vil den have lagt den uploadede fil i folderen, men under et nyt og unikt navn. Dette navn returneres af metoden "get_name_of_uploaded_file" og udskrives på linje 10. Grunden til at filen får et nyt og unikt navn er, at det ellers ville forårsage, at brugere kunne overskrive hinandens filer, men det betyder selvfølgelig også, at brugere ikke kan overskrive sine egne filer.



Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.

Del også gerne artiklen med dine Facebook venner:  

Kommentarer (2)

User
Bruger #16529 @ 05.06.11 20:17
God og gennemtænkt artikel!:D helt sikkert noget jeg vil få brug for på mit site...

tak!
User
Bruger #22066 @ 15.05.18 19:27
helt sikkert noget jeg vil få brug for på mit site...

tak!
skrotbil
Du skal være logget ind for at skrive en kommentar.
t