PHP - Workshop File Upload

Een erg handig aspect van PHP is de mogelijkheid om file uploads te regelen naar jouw server. Maar als je gebruikers toestaat om bestanden (files) naar jouw server te uploaden, wees dan wel op je hoede. Voor je het weet staat je server vol met bestanden die al dan niet besmet zijn met virussen.

PHP - File Upload: HTML Form

Om te kunnen uploaden moet je eerst een HTML formulier maken waarmee gebruikers bestanden kunnen selecteren op hun lokale harddisk.

HTML Code:

	<form enctype="multipart/form-data" action="uploader.php" method="POST">
	<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
	Selecteer een bestand om te uploaden: <input name="uploadedfile" type="file" /><br />
	<input type="submit" value="Upload File" />
	</form>
	

Hieronder volgt een korte beschrijving van de belangrijkste delen van bovenstaande code

Sla de formulier code op in een bestand en noem het upload.html. Als je deze in de browser bekijkt dan zou het er ongeveer zo uit moeten zien:

Browser:

Selecteer een bestand om te uploaden:

Nadat de gebruiker op de submit button 'Upload File' klikt wordt de data verstuurd naar de server en de gebruiker wordt doorgestuurd naar uploader.php. Dit PHP script zal de verwerking van het formulier voor zijn rekening nemen.

PHP - File Upload: Wat gaat PHP doen?

Nu we een bruikbaar HTML formulier hebben kunnen we beginnen met het coderen van het PHP script dat onze uploads zal gaan afhandelen. Dit PHP script moet een belangrijke beslissing maken voor alle uploads: bestand bewaren of weggooien. Een bestand kan om verschillende redenen worden weggegooid, waaronder:

Onderstaand PHP voorbeeld script is erg simpel en bevat de code die dergelijke functionaliteit in zich heeft.

PHP - File Upload: uploader.php

Als het script uploader.php wordt uitgevoerd, dan zal het geuploade bestand in een tijdelijke opslagruimte op de server komen. Als dit bestand niet wordt verplaatst naar een andere lokatie, dan zal deze worden verwijderd! Om een bestand op te slaan (te verplaatsen) op de server moeten we gebruik maken van $_FILES, een associative array.

De $_FILES is een array waar PHP alle informatie opslaat over bestanden. Er zijn twee elementen van deze array die je moet begrijpen voor dit voorbeeld.

Nu kunnen we eindelijk beginnen met het schrijven van een basis PHP upload manager script! Hieronder vind je hoe we de tijdelijke bestandsnaam kunnen ophalen, een permanente naam kiezen en een plek kiezen om het bestand op te slaan.

PHP Code:

	// pad waar het bestand wordt opgeslagen 
	$target_path = "uploads/";
	
	/* voeg de originele bestandsnaam toe aan het pad  
	resulteert in "uploads/filename.extension" */
	$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
  

Let op: Je zult een nieuwe map moeten maken in de map waar uploader.php zich bevindt, genaamd "uploads", omdat we daar de bestanden in gaan opslaan.

Nu hebben we alle benodigdheden om het bestand met succes op te slaan op de server.$target_path bevat het pad waar we ons bestand willen opslaan.

PHP - File Upload: move_uploaded_file Function

Nu moet het tijdelijke bestand nog een permanente plaats krijgen op de server. Dit doen we met de function move_uploaded_file. Deze function moet 1) het pad weten van het tijdelijke bestand (check!) en 2) het pad weten waar het bestand naar toe moet worden verplaatst (check!).

PHP Code:

	$target_path = "uploads/";
	
	$target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
	
	if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
		echo "Het bestand ".  basename( $_FILES['uploadedfile']['name']). 
		" is geupload";
	} else{
		echo "Er is iets fout gegaan tijdens upload van het bestand!";
	}
  

Hoe werkt bovenstaand script? De function move_uploaded_file geeft true terug als het bestand succesvol is verplaatst, en geeft false terug als er een probleem is opgetreden.

Als de upload succesvol is verlopen (return true) dan zal de tekst "Het bestand filename is geupload" verschijnen.

Als er een probleem (return false) optreedt dan zal de tekst "Er is iets fout gegaan tijdens upload van het bestand!" verschijnen.

PHP - File Upload: Safe Practices!

Let op: Dit script is bedoeld om uit te leggen hoe een file upload in zijn werk gaat. Wees voorzichtig met publicatie van dit script op een webserver die toegankelijk is voor een groot publiek.

Waarom? Omdat je met dit eenvoudige script iedereen de mogelijkheid biedt om zonder noemenswaardige beperking allerlei data te uploaden naar je server. Met alle gevolgen van dien. Het verdient dus aanbeveling om meerdere beveiligingsonderdelen in te bouwen.

PHP - File Upload: Werkend voorbeeld

Selecteer een bestand om te uploaden: