Uploaden van bestanden 1. Upload Form
2. Elementen
3. Een upload-script schrijven
1. Upload Form
Veel mensen willen graag via hun website bestanden kunnen uploaden.
Dit is opzich helemaal niet moeilijk, alleen moet je met een aantal dingen rekening houden.
Laten we beginnen met de form:
< FORM ACTION="" METHOD="post" ENCTYPE="multipart/form-data">
<INPUT TYPE="file" NAME="bestand"><BR />
<INPUT TYPE="submit" NAME="submit" VALUE="Upload">
</FORM>
|
Een form kunnen we allemaal ondertussen wel maken denk ik zo, maar het gaat hier om een stukje dat
jullie waarschijnlijk nog niet kennen
ENCTYPE="multipart/form-data"
|
Met dit stukje geef je aan dat je browser de form in 2e moet delen omdat er data bij zit.
Bij deze form kan je dus ook nog steeds text verzenden.
top
2. Elementen
Hier het overzicht van de variabellen waar je mee moet werken bij een upload script:
$_FILES['bestand']['name']
|
Deze bevat de naam van het bestand dat geüpload word
|
$_FILES['bestand']['size']
|
Deze bevat de groote van het bestand dat geüpload word in bytes
|
$_FILES['bestand']['type']
|
Deze leest het mime-type van het bestand dat geüpload word
|
$_FILES['bestand']['tmp_name']
|
Deze bevat het bestand dat geüpload word.
Deze word dus tijdelijk op je server opgeslagen tijdens het uploaden.
Bij php versies voor 4.1.0 zal de variabellen leeg zijn als het bestand te groot is.
Bij nieuwere versies zal de variabellen niet bestaan.
|
top
3. Een upload-script schrijven
Nu we de form en variabellen hebben kunnen we aan de slag om een script in elkaar te draaien!
Allereerst gaan we op een andere manier dan "normaal" kijken of het formulier gesubmit is.
we doen nu dus niet
if(isset($_POST['submit'])) {
//script
}
|
Maar we doen nu
if(isset($_FILES['bestand'])) {
//script
}
|
Zo kunnen we meteen zien of de gebruiker wel een bestand heeft geselecteerd.
Nu maken we de rest van het script en deze zal ik van commentaar voorzien.
<?
//kijken of er een bestand is geselecteerd
if(isset($_FILES['bestand'])) {
//het bestand verplaatsten naar de juiste map op de server
move_uploaded_file($_FILES['bestand']['tmp_name'], "mijnmap/mijnbestanden/");
//berichtje om te laten zien dat het bestand is opgeslagen
echo "Het bestand is opgeslagen";
} else {
//er is geen bestand geselecteerd
echo "Selecteer een bestand";
}
?>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="bestand"><br>
<input type="submit" name="submit" value="Upload">
</form>
|
De functie
move_uploaded_file($_FILES['bestand']['tmp_name'], "mijnmap/mijnbestanden/");
|
Verplaatst het bestand naar de uiteindelijke locatie die jij wilt.
Dit is natuurlijk wel een heel simpel upload script dus zal ik er nog 1tje voordoen.
De volgende word voor png, jpg en gif plaatjes.
We bouwen er een aantal functies in:
- het script zal het mime-type checken
- het script zal het bestand hernoemen naar de op gegeven naam
- en het script zal een limiet hebben voor de bestandsgrote van het plaatje
<?
//kijken of er een bestand is geselecteerd
if(isset($_FILES['bestand'])) {
//als het bestand groter is dan 102400 bytes(100kb) word hij niet toegelaten
if($_FILES['bestand']['size'] > 102400) {
echo "Het bestand is <b>" . $_FILES['bestand']['size'] . "</b>, het maximale toegstaan is <b>102400</b>";
} else {
//kijken of het bestand wel een gif, png of jpg is
if($_FILES['bestand']['type'] == "image/gif" || $_FILES['bestand']['type'] == "image/png" || $_FILES['bestand']['type'] == "image/pjpeg" || $_FILES['bestand']['type'] == "image/jpeg") {
//kijken of er een nieuwe naam aan het bestand is gegeven
if(empty($_POST['naam'])) {
$naam = $_FILES['bestand']['name'];
} else {
//strip de extensie om die achter de nieuwe bestandsnaam te plakken
$x = strrchr($_FILES['bestand']['name'], ".");
$naam = $_POST['naam'] . $x;
}
//het bestand uploaden met de nieuwe of oude naam
move_uploaded_file($_FILES['bestand']['tmp_name'], "mijnbestanden/mijnplaatjes/" . $naam);
//voor linux of unix hosts chmodden we het bestand naar 777 zodat iedereen um kan zien
chmod("mijnbestanden/mijnplaatjes/" . $naam, 0777);
} else {
echo "Het bestand is geen png, jpg of gif";
}
}
} else {
echo "Selecteer een plaatje";
}
?>
<form action="" method="post" enctype="multipart/form-data">
<b>Bestand:</b> <input type="file" name="bestand"><br>
<b>Nieuwe naam:</b> <input type="text" name="naam"><br>
<input type="submit" name="submit" value="Upload">
</form>
|
top
Het kan natuurlijk allemaal nog veel uitgebreider maar ik denk dat jullie hier wel even zoet mee zijn.
Hier is een overzicht van alle mime-types te vinden:
http://www.phpfreaks.com/mimetypes.php
Vragen zijn altijd welkom op het forum of via pm :)
|