मैं बिन में कुछ छवियों की जाँच, मैं प्रारूप (jpg, png, आदि)पीएचपी: द्विआधारी छवि डेटा, छवि प्रकार
मैं अस्थायी फ़ाइलों का उपयोग नहीं करना चाहते हैं की जाँच करने के हैडर जाँच करना चाहते हैं ! मेरे पास टेम्पलेट फाइलों का उपयोग कर समाधान है।
मैं बिन में कुछ छवियों की जाँच, मैं प्रारूप (jpg, png, आदि)पीएचपी: द्विआधारी छवि डेटा, छवि प्रकार
मैं अस्थायी फ़ाइलों का उपयोग नहीं करना चाहते हैं की जाँच करने के हैडर जाँच करना चाहते हैं ! मेरे पास टेम्पलेट फाइलों का उपयोग कर समाधान है।
बिट्स के साथ शुरू:
$JPEG = "\xFF\xD8\xFF"
$GIF = "GIF"
$PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a"
$BMP = "BM"
$PSD = "8BPS"
$SWF = "FWS"
अन्य लोगों को मैं अभी पता नहीं है, लेकिन बड़ा 3 (jpeg, gif, png) आम तौर पर 99% कवर तो, उन स्ट्रिंग्स के पहले बाइट्स की तुलना करें, और आपके पास आपका जवाब है।
क्या फाइलें अपलोड की जा रही हैं या वे पहले से ही फाइल सिस्टम पर हैं?
फ़ाइल के एमआईएम प्रारूप प्राप्त करने के लिए mime_content_type()
का उपयोग करने का प्रयास करें।
क्यों न केवल फ़ाइल प्रविष्टि की जांच करें? :)
एक विकल्प
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}
बिल्कुल अविश्वसनीय। – Maerlyn
तो आपकी अधिकांश जीआईएफ फाइलें वास्तव में जीआईएफ नहीं हैं? वास्तव में ऐसा कोई कारण नहीं है जब तक कि आप उपयोगकर्ता अपलोड से निपट नहीं रहे हैं, और फिर भी आपके पास चिंता करने की कोई बात नहीं है। – Dutchie432
2012 में, कुछ उपयोगकर्ताओं का मानना है कि वे फ़ाइल का नाम बदलकर छवियों को परिवर्तित कर सकते हैं ... तो, यह विश्वसनीय नहीं है। – djleop
यहाँ समारोह के एक कार्यान्वयन के रूप में 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;
}
fileinfo पीएचपी एक्सटेंशन का उपयोग करें वर्णित है:
http://de.php.net/manual/en/function.finfo-file.php
इसकी "फ़ाइल" * NIX आदेश का उपयोग मज़बूती से माइम निर्धारित करने के लिए किसी दिए गए फ़ाइल का प्रकार:
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $filename);
finfo_close($finfo);
यह एक्सटेंशन PHP 5.3 के साथ भेज दिया गया है या पिछले संस्करणों के लिए pecl (pecl install fileinfo) से स्थापित किया जा सकता है।
http://php.net/manual/en/function.getimagesize.php
"सूचकांक 2 छवि के प्रकार का संकेत IMAGETYPE_XXX स्थिरांक से एक है।"
मैं कर सकता हूं कि आप में से अधिकांश प्रश्न को समझ नहीं पाए हैं :) (प्रश्न यह था कि बफर में बाइनरी डेटा को मान्य करने के लिए, डिस्क पर फ़ाइल नहीं)।
मैं एक ही समस्या थी, और साथ इसका समाधान नहीं:
$finfo = new finfo(FILEINFO_MIME_TYPE);
$finfo->buffer($rawImage);
क्या आप उदाहरण दे सकते हैं कि आप php का उपयोग करके कुछ बाइनरी डेटा के खिलाफ इन्हें कैसे जांचेंगे? धन्यवाद – DonutReply
@DonutReply - बस इसे खोज रहे लोगों के लिए: https://gist.github.com/CodeBrauer/5fe9ad14fa9786b3d1f6 – CodeBrauer
क्या आपके पास छवि के अंत को जानने के लिए अंतिम बिट्स के बारे में कोई जानकारी है? – Daniel