Ho alcune immagini in bin, voglio controllare l'intestazione per controllare il formato (jpg, png, etc.)PHP: binario dati di immagine, controllando il tipo di immagine
Non voglio usare i file temporanei ! Ho una soluzione che utilizza TEMP FILES.
Ho alcune immagini in bin, voglio controllare l'intestazione per controllare il formato (jpg, png, etc.)PHP: binario dati di immagine, controllando il tipo di immagine
Non voglio usare i file temporanei ! Ho una soluzione che utilizza TEMP FILES.
I bit iniziano con:
$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
Gli altri non saprei adesso, ma il grande 3 (jpeg, gif, png) di solito coprire il 99%. Quindi, confronta i primi byte con quella stringa e hai la tua risposta.
I file vengono caricati o si trovano già nel file system?
Provare a utilizzare mime_content_type()
per ottenere il formato MIME del file.
Perché non controllare solo l'inclinazione del file? :)
alternativa
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
Assolutamente inaffidabili. – Maerlyn
Quindi la maggior parte dei file GIF in realtà non sono GIF? Non c'è davvero alcuna ragione per cui questo non funzionerebbe a meno che tu non abbia a che fare con i caricamenti degli utenti, e anche allora probabilmente non avrai nulla di cui preoccuparti. – Dutchie432
Nel 2012, alcuni utenti credono di poter convertire le immagini semplicemente rinominando il file ... Quindi, non è affidabile. – djleop
Ecco un'implementazione della funzione come descritto da 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;
}
Utilizzare l'estensione fileinfo PHP:
http://de.php.net/manual/en/function.finfo-file.php
sua utilizzando il "file" * di comando nix per determinare in modo affidabile il mimo -tipo di un file specificato:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
Questa estensione è fornita con PHP 5.3 o può essere installata da pecl (pecl install fileinfo) per le versioni precedenti.
http://php.net/manual/en/function.getimagesize.php
"Index 2 è una delle costanti IMAGETYPE_XXX che indicano il tipo di immagine."
Posso capire che la maggior parte di voi non ha compreso la domanda :) (la domanda era come convalidare i dati binari nel buffer, non un file sul disco).
ho avuto lo stesso problema, e risolto con:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
Puoi dare un esempio di come verificherai questi dati rispetto ad alcuni dati binari usando php? grazie – DonutReply
@DonutReply - solo per le persone che lo cercano: https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 – CodeBrauer
Hai qualche informazione sugli ultimi bit per scoprire la fine di un'immagine? – Daniel