2012-05-19 11 views
10

Kann ich prüfen, ob eine bestimmte Datei ein Bild ist oder nicht? Wie kann man das in PHP machen?Wie kann ich überprüfen, ob eine Datei ein Bild ist oder nicht?

Wenn die Datei kein Bild ist, möchte ich eine Warnmeldung geben.

+1

viele ähnliche Fragen bereits auf SO gefragt ... Bitte versuchen Sie –

+0

@MitchWheat Suche: ich suche, aber ich kippe finden richtig wie zu überprüfen und zu implementieren. – pratik

+0

Durchsuchen und importieren Sie eine Datei oder lesen Sie sie direkt aus einer bestimmten Quelle? – sree

Antwort

1

in PHP Sie können es tun, wie Art und Weise folgende

if ((($_FILES['profile_picture']['type'] == 'image/gif') || ($_FILES['profile_picture']['type'] == 'image/jpeg') || ($_FILES['profile_picture']['type'] == 'image/png'))) 

in Javascript Sie können es tun, wie Art und Weise folgende

function checkFile() { 
    var filename = document.getElementById("upload_file").value; 
    var ext = getExt(filename); 
// alert(filename.files[0].filesize); 
    // alert(ext); 
    if(ext == "gif" || ext == "jpg" || ext=="png") 
     return true; 
    alert("Please upload .gif, .jpg and .png files only."); 
    document.getElementById("upload_file").value=''; 
    return false; 
} 

function getExt(filename) { 
    var dot_pos = filename.lastIndexOf("."); 
    if(dot_pos == -1) 
     return ""; 
    return filename.substr(dot_pos+1).toLowerCase(); 
} 
+1

Ich bin sicher, dass er überprüfen muss, ob die Datei nicht nur in sheet.pdf in sheet.jpg umbenannt wird. Du bekommst, was ich meine. –

+0

ja, guter Punkt – mack

+0

Ich werde meinen Downvote entfernen. Entschuldigung trotzdem;) –

5

Neben getimagesize(), können Sie exif_imagetype()

exif_imagetype() liest die ersten Bytes eines Bildes und überprüft seine Signatur.

Wenn eine korrekte Signatur gefunden wird, wird der entsprechende konstante Wert zurückgegeben, andernfalls ist der Rückgabewert FALSE. Der Rückgabewert ist derselbe Wert, den getimagesize() in Index 2 zurückgibt, aber exif_imagetype() ist viel schneller.

Für beide Funktionen wird FALSE zurückgegeben, wenn die Datei nicht als Bild erkannt wird.

+0

-1 - Beide Funktionen werfen Lesefehler, mindestens in 5.3. – MikeSchinkel

+0

@MikeSchinkel Bitte klären. –

+0

Zum Beispiel [hier] (http://stackoverflow.com/questions/1363876/handle-error-when-getimagesize-cant-find-file) und [hier] (http://stackoverflow.com/questions/10175758/ getimagesize-read-error). In meinem Fall habe ich für ''.' ','' .. '' und ''.DS_Store' ', was für mich zum Filtern geeignet ist.Aber Sie können den Lesefehler nicht abfangen, also müssen Sie sicherstellen, dass er niemals auftreten kann, indem Sie alles, was ein Problem verursachen könnte (Datei existiert, korrekte Berechtigungen, andere?), Im Voraus überprüfen. – MikeSchinkel

0

ich dies tun würde, um herauszufinden, ...

$type =array('jpg','gif'); 

foreach($type as $val){ 

if($_FILES['filename']['type'] == 'image/$val') 
{ 
echo "its an image file"; 
} 
else{ 
echo "invalid image file" 
} 
+0

Nicht sicher. Ich kann eine exe als 'image/jpeg' speichern, zum Beispiel .. –

+0

ich stimme zu, aber das ist einer der Ansatzpunkte ... – sree

+0

why down vote? es kann immer noch validieren ... – sree

0

Bessere und schnellere Weg ist exif_imagetype() zu verwenden. So etwas sollte die Arbeit machen:

$valid_formats = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); 
$file_format = exif_imagetype($filename); 

if(!in_array($file_format, $valid_formats)) 
    echo("File format is not valid"); 
Verwandte Themen