J'ai quelques images dans bin, je veux vérifier l'en-tête pour vérifier le format (jpg, png, etc.)PHP: données binaires d'image, vérifier le type d'image
Je ne veux pas utiliser les fichiers temporaires ! J'ai une solution en utilisant TEMP FILES.
J'ai quelques images dans bin, je veux vérifier l'en-tête pour vérifier le format (jpg, png, etc.)PHP: données binaires d'image, vérifier le type d'image
Je ne veux pas utiliser les fichiers temporaires ! J'ai une solution en utilisant TEMP FILES.
Les bits commencent par:
$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
Les autres je ne sais pas en ce moment, mais le grand 3 (jpeg, gif, png) habituellement couvrir 99%. Donc, comparez les premiers octets à ces chaînes, et vous avez votre réponse.
Les fichiers sont-ils téléchargés ou sont-ils déjà dans le système de fichiers? Utilisez le mime_content_type()
pour obtenir le format MIME du fichier.
Pourquoi ne pas simplement vérifier l'entension de fichier? :)
Un
alternatifif(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
Absolument pas fiable. – Maerlyn
Donc, la plupart de vos fichiers GIF ne sont pas réellement GIF? Il n'y a vraiment aucune raison que cela ne fonctionne pas, sauf si vous traitez des téléchargements d'utilisateurs, et même alors, vous n'avez probablement rien à craindre. – Dutchie432
En 2012, certains utilisateurs pensent pouvoir convertir les images en renommant le fichier ... Ce n'est donc pas fiable. – djleop
est ici une implémentation de la fonction telle que décrite par Wrikken
function 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;
}
Utilisez l'extension PHP fileinfo:
http://de.php.net/manual/en/function.finfo-file.php
Son utilisant le "fichier" * commande nix pour déterminer de manière fiable le mime -type d'un fichier donné:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
Cette extension est livrée avec PHP 5.3 ou peut être installée à partir de pecl (pecl install fileinfo) pour les versions antérieures.
http://php.net/manual/en/function.getimagesize.php
"N 2 est l'une des constantes de IMAGETYPE_XXX indiquant le type de l'image."
Je peux voir que la plupart d'entre vous n'ont pas compris la question :) (la question était comment valider les données binaires dans le tampon, pas un fichier sur le disque).
J'ai eu même problème et résolu avec:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
Pourriez-vous donner un exemple de la façon dont vous vérifieriez ces données par rapport à certaines données binaires en utilisant php? merci – DonutReply
@DonutReply - juste pour les personnes qui le recherchent: https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 – CodeBrauer
Avez-vous des informations sur les derniers bits pour trouver la fin d'une image? – Daniel