Dateiupload über ein Formular
Mit PHP kann man einfach Dateien über HTML Formulare hochladen und auf dem Server weiterverarbeiten.

Um einen erfolgreichen Upload zu gewährleisten, müssen einige Grundvorraussetzungen auf Client-, sowie auf Serverseite vorhanden sein:


Clientseite:
Hier genügt ein einfaches Formular zur Auswahl von Dateien
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
Wichtig ist hierbei der Name des Input Elementes, mit dem wir die Datei auswählen. Mit dem selben Namen sprechen wir die Datei auf dem Server an.

Wird das Formular abgesendet, wird die Datei mittels POST an den Host übermittelt und wird dort für den gesamten Ablauf des in action definierten Zielskriptes temporär gespeichert.
Nach dem Ablauf wird es gelöscht! Das bedeutet, wir müssen die Datei durch unser Skript an einen "sicheren" Ort kopieren, sofern wir sie überhaupt behalten wollen:

Serverseite:
<?php
$uploaddir = '/var/www/uploads/';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name']))
{
echo "Datei erfolgreich hochgeladen";
} else {
print "Dateiupload fehlgeschlagen:\n"; print_r($_FILES);
}
?>

Der Befehl move_uploaded_file verschiebt die Datei an den im zweiten Parameter angegebenen Ort.

Generell kann man auf folgende Eigenschaften der hochgeladenen Datei zugreifen


$_FILES['userfile']['name']: Der ursprüngliche Dateiname auf der Client Maschine.

$_FILES['userfile']['type']: Der Mime-Type der Datei, falls der Browser diese Information zur Verfügung gestellt hat. Ein Beispiel wäre "image/gif".

$_FILES['userfile']['size']: Die Größe der hochgeladenen Datei in Bytes.

$_FILES['userfile']['tmp_name']: Der temporäre Dateiname, unter dem die hochgeladene Datei auf dem Server gespeichert wurde.

$_FILES['userfile']['error']: Der Fehlercode im Zusammenhang mit dem hochladen der Datei. ['error'] wurde in PHP 4.2.0 eingeführt.

Quelle:
PHP Manual