getimagesize()

Arndtinho

Erfahrenes Mitglied
Hallo,

ich möchte beim Upload von Dateien nur GIF's und JPG's zulassen. Dazu nutze ich folgende
Code:
PHP:
function ResizeUploadImage( $img, $img_name, $path ) {
   
   $image_out = $path.$img_name;
   $img_data  = getimagesize( $img );
   
   if( $img_data[2] == 1 || $img_data[2] == 2 ) {
   
      ... Code für Upload ... 
   }
}
Nach meinem Verständnis sollten jetzt nur GIF- und JPG-Dateien upgeloadet werden. Ich habe es getestet mit einer TXT-Datei. Auch diese wurde auf den Server geuploadet.

Wieso das? Was habe ich nicht bedacht?


Gruß
Arndtinho
 
Hallo!

Ich denke das die Funktion getimagesize() nicht dazu gedacht ist alle möglichen Dateien auf ein bestimmtes Format zu testen.

Das Flag 2 soll nur die Arbeit erleichtern und Dir auch mitteilen können, von was für einer Art Bild Du die Außmaße ermittelt hast. Nicht ob überhaupt ein Bild vorliegt.

Prüfe also lieber den Dateinamen auf .jpg und .gif oder .jpeg

Funktionen die Dir dabei helfen:

strtolower() - weil Dateinamen groß- oder klein geschrieben werden können
substr() - um die letzten 3-4 Zeichen des Dateinamen zu ermitteln

Grüße

Martin

PS: Benutze mal die Suchfunktion, wurde bestimmt schon öfter durchgekaut
 
Besser wäre es den letzten Punkt zu suchen und ab der Position die Zeichen zu lesen. Vielleicht weiß auch jemand, wie man des mit RegExp machen kann.
 
Unterstützt der Browser nicht das accept-Attribut, kann jeder beliebige Dateityp hochgeladen werden. Dann gilt es diese serverseitig herauszufiltern.
Durch deinen Ansatz – zu prüfen, ob die Datei eine gültige Grafikdatei ist – sollten eigentlich alle Nicht-Grafikdateien unabhängig von ihrer Dateierweiterung durchfallen.
 
Also, ich habe das jetzt so gelöst:

Bevor ich die Funktion
Code:
ResizeUploadImage( $img, $img_name, $path )
aufrufe, prüfe ich mit
Code:
$_FILES['img']['type']
um welches File-Format es sich handelt. Wenn es ein GIF oder JPG ist, dann wird die Datei zum Upload zugelassen.


Code:
$img_data  = getimagesize( $img );
...
if( $img_data[2] == ... )
gebrauch ich, um zu wählen, ob
Code:
imagejpeg( $dest, $image_out );
imagecreatefromjpeg( $img );

oder

imagegif( $dest, $image_out );
imagecreatefromgif( $img );
benutzt werden muss. Funktioniert sehr gut.

Gruß
Arndtinho
 
Hallo!

Durch deinen Ansatz – zu prüfen, ob die Datei eine gültige Grafikdatei ist – sollten eigentlich alle Nicht-Grafikdateien unabhängig von ihrer Dateierweiterung durchfallen.

Man lernt nie aus :) Dann prüft getimagesize() die Datei anhand von Binärdaten oder Dateiheadern auf das Format?

Schaden kann aber eine Dateinendungsprüfung in keinem Fall ...

Grüße

Martin
 
Könntest du das bitte erläutern ? Ich prüfe ebenfalls den Mimetyp :confused:
Erstelle mal eine einfache Textdatei mit einem beliebigen Inhalt und benenne sie statt mit der typischen „.txt“-Erweiterung mit „.png“ oder einer anderen typischen Dateierweiterung von Grafikdateien. Dann lade diese Datei mal hoch und prüfe den übermittelten Inhaltstyp.
 
Zurück