Felix Riesterer: PHP Upload, aber nur Bilder.

Beitrag lesen

Lieber Kolwitz,

In diesem Fall möchte ich nur JPG, JPEG, GIF, PNG erlauben und kein Bild grösser als 3 MB.

OK. Ich würde diese Schritte gehen:

  1. Dateigröße prüfen und eventuell Upload verwefen
  2. die PHP-Funktion getimagesize() einsetzen: keine Abmessungen -> keine gültige Bilddatei
  3. Kopie mit neuem Namen und korrekter Dateiendung speichern

Weiter habe ich die Frage ist das OK über die MIME type, die Datei zu ermitteln?

Nein! Wenn der zweite Schritt (getimagesize()) erfolgreich Bildmaße ermittelt hat, dann kannst Du Dir sicher sein, dass Du auch wirklich eine gültige Bilddatei hast. Diese Prüfung ist nach bisherigem Wissensstand die sicherste. Danach interessiert Dich überhaupt erst der MIME-Typ.

Siehe dazu auch hier im Wiki: Sicherheit bei File-Uploads

Ich speicher anschliessend die Bilder unter einem neuen Namen, mit der MIME Endung ab. Wie 252453245432.jpg

Also das, was ich im dritten Schritt formuliert habe. Prima!

<form action="#" method="post" enctype="multipart/form-data">
    Select image to upload:
    <input type="file" name="userfile_pic" id="fileToUpload" accept="image/*">
    <input type="submit" value="Upload Image" name="submit">
</form>

Du möchtest "Select image to upload:" in ein <label> kleiden. Dazu hast Du zwei Möglichkeiten:

<label>
  Select image to upload:
  <input type="file" name="userfile_pic" id="fileToUpload" accept="image/*">
</label>

<label for="fileToUpload">Select image to upload:</label>
<input type="file" name="userfile_pic" id="fileToUpload" accept="image/*">

Siehe auch hier im Wiki: Angaben für die Benutzerführung (Beschriftungen)

Liebe Grüße,

Felix Riesterer.