Hello,
erstmal zu Deiner Frage:
-
Session starten
-
Zuerst die anderen Felder prüfen lassen und in der Session eintragen
z.B. $_SESSION[$formname]['data'][$fieldname] = $value; -
Erst, wenn alle Felder gecheckt sind, wird das File-Upload-Feld freigegeben.
Das Ganze fällt dann unter das Stichwort "Affenformular" (Goolge, SelfHTML-Archiv)
Aber viel wichtiger:
Wenn Du Dateien hochladen lässt, solltest Du das Verzeichnis, in dem die landen, keinesfalls innerhalb der Document-Root anordnen. Wenn sich das nicht vermeiden lässt, solltest Du die PHP-Engine für das Verzeichnis ausschalten!
### .htaccess
php_admin_value engine 0
Und außerdem sollten nur registierte User Dateien hochladen können. Du solltest registieren, wem welche Datei gehört. Das geht am besten in der Datenbank, in der auch die anderen Daten landen. Dort kann dann auch die Übersetzung des Filenamens (vom User) in den Ablagenamen (auf dem System) durchgeführt werden. Der muss ja UNIQUE ausgewürfelt werden, damit nicht neuere Dateien die vorhandenen ungewollt überschreiben.
Abe auch da solltest Du genau überlegen, welche MIME-Types du überhaupt von welchem User annehmen annehmen willst. Und sorge dafür, dass die .htaccess des Verzeichnisses nicht überschrieben werden kann oder eine hochgeladen werden kann
finfo funktioniert inzwischen einigermaßen. Und für Bilder tut es auch getimagesize().
Ich konnte nur noch keine Funktion endecken, die den MIME-Type in eine Dateiendung zurückverwandelt, um bei der späteren Ausgabe der Datei auch eine passende Endung mitliefern zu können. Der User kann ja alles behaupten beim Hochladen. Der in $_FILES gemeldete MIME-Type kann also locker gelogen sein, genauso, wie die Dateiendung.
Ich habe zu dem Thema mal einen Artikel im WIKI angefangen, der ist aber irgendwie verschollen...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg