ich einige Bilder in bin haben, möchte ich den Header überprüfen, um das Format zu überprüfen (jpg, png, usw.)PHP: binäre Bilddaten, die Überprüfung der Bildtyp
Ich will nicht, temporäre Dateien verwenden, ! Ich habe eine Lösung mit TEMP-Dateien.
ich einige Bilder in bin haben, möchte ich den Header überprüfen, um das Format zu überprüfen (jpg, png, usw.)PHP: binäre Bilddaten, die Überprüfung der Bildtyp
Ich will nicht, temporäre Dateien verwenden, ! Ich habe eine Lösung mit TEMP-Dateien.
Die Bits beginnen mit:
$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
die andere würde ich jetzt nicht weiß, aber der großen 3 (JPEG, GIF, PNG) in der Regel Abdeckung 99%. Vergleiche also die ersten Bytes mit diesen Strings und du hast deine Antwort.
Werden die Dateien hochgeladen oder befinden sie sich bereits im Dateisystem?
Verwenden Sie mime_content_type()
, um das MIME-Format der Datei zu erhalten.
Warum nicht einfach die Dateieinleitung überprüfen? :)
Eine Alternative
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
Absolut unzuverlässig. – Maerlyn
Also die meisten Ihrer GIF-Dateien sind nicht wirklich GIFs? Es gibt wirklich keinen Grund, das würde nicht funktionieren, wenn Sie mit User-Uploads zu tun haben, und selbst dann haben Sie wahrscheinlich nichts zu befürchten. – Dutchie432
Im Jahr 2012 glauben einige Benutzer, dass sie Bilder nur durch Umbenennen der Datei konvertieren können ... Also, es ist nicht zuverlässig. – djleop
Hier ist eine Implementierung der Funktion als
von Wrikken beschriebenfunction getImgType($filename) {
$handle = @fopen($filename, 'r');
if (!$handle)
throw new Exception('File Open Error');
$types = array('jpeg' => "\xFF\xD8\xFF", 'gif' => 'GIF', 'png' => "\x89\x50\x4e\x47\x0d\x0a", 'bmp' => 'BM', 'psd' => '8BPS', 'swf' => 'FWS');
$bytes = fgets($handle, 8);
$found = 'other';
foreach ($types as $type => $header) {
if (strpos($bytes, $header) === 0) {
$found = $type;
break;
}
}
fclose($handle);
return $found;
}
Verwenden Sie die Fileinfo-PHP-Erweiterung:
http://de.php.net/manual/en/function.finfo-file.php
Seine "Datei" * nix-Befehl den Mime zuverlässig bestimmen mit Typ einer gegebenen Datei:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
Diese Erweiterung wird mit PHP 5.3 geliefert oder kann von pecl (pecl install fileinfo) für frühere Versionen installiert werden.
http://php.net/manual/en/function.getimagesize.php
"Index 2 ist eine der Konstanten IMAGETYPE_XXX den Typ des Bildes angibt."
Ich kann sehen, dass die meisten von Ihnen die Frage nicht verstanden :) (Frage war, wie binäre Daten im Puffer zu validieren, nicht eine Datei auf der Festplatte).
hatte ich gleiches Problem und es gelöst mit:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
Könnten Sie ein Beispiel geben, wie Sie diese gegen einige Binärdaten mit PHP überprüfen würden? Danke – DonutReply
@DonutReply - nur für die Leute, die es suchen: https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 – CodeBrauer
Haben Sie irgendwelche Informationen über die letzten Bits, um das Ende eines Bildes herauszufinden? – Daniel