2010-01-05 24 views

उत्तर

23

आप getimagesize का उपयोग कर छवि फ़ाइलों की पहचान कर सकते हैं।

एमपी 3 और अन्य ऑडियो/वीडियो फ़ाइलों के बारे में और अधिक जानकारी प्राप्त करने के लिए, मैं php-mp4info getID3() सिफारिश की गई है।

+2

आप कह रहे हैं कि मैं जाँच करनी चाहिए अगर एक फ़ाइल एक छवि है या की तरह getimagesize कुछ का उपयोग नहीं: (! Getimagesize (पथ)) अगर {प्रिंट 'इस फ़ाइल एक चित्र नहीं है';} ? getimagesize(); अगर फ़ाइल छवि नहीं है तो झूठी वापसी करता है? इस उत्तर के लिए – kmunky

+1

+1 ... यह सुनिश्चित करने का एकमात्र तरीका है कि एक छवि एक छवि है, एक पुस्तकालय का उपयोग करना है (इस मामले में छवियों के लिए एक में बनाया गया है) जो वास्तव में फ़ाइल खोलता है और जैसा कि आप सुझाव दे रहे हैं उसे पारदर्शी करते हैं। इस तरह आप किसी को .XLS को .GIF का नाम बदलने और इसे अपलोड करने से रोकते हैं। – TravisO

+0

@kmunky: बिल्कुल। यह देखने के लिए मैन्युअल लिंक देखें कि फ़ंक्शन किस प्रकार की पहचान करता है। –

4

कोशिश mime_content_type()

<?php 
echo mime_content_type('php.gif') . "\n"; 
echo mime_content_type('test.php'); 
?> 

आउटपुट:

छवि/gif

पाठ/सादे

या बेहतर इस्तेमाल finfo_file() अन्य तरीका है पदावनत

+1

मुझे उत्सुकता है कि इसे डाउनवोट क्यों मिला? इसे केवल 5.3 – Gordon

+0

के रूप में हटा दिया गया है, यही कारण है कि मैं आपको – kmunky

+0

पूछ रहा हूं, उनका सवाल विशेष रूप से फ़ाइल एक्सटेंशन की जांच करने के अलावा फ़ाइल प्रकार की जांच करता है, जो कि सभी mime_content_type करता है, यह मूल रूप से एक्सटेंशन के सरणी में निर्मित है, इसमें कोई नहीं है विचार करें कि फ़ाइल वास्तव में क्या है। – TravisO

30

मूल निवासी माइम प्रकार पाने के लिए तरीके:

पीएचपी < 5.3 उपयोग mime_content_type()
पीएचपी> = 5.3 उपयोग finfo_fopen()

वैकल्पिक माइम प्रकार exif_imagetype और getimagesize हैं पाने के लिए के लिए है, लेकिन इन होने पर भरोसा करते हैं उचित libs स्थापित। इसके अलावा, वे शायद magic.mime में दी गई पूरी सूची के बजाय छवि mimetypes वापस कर देंगे।

यदि आप अपने सिस्टम पर जो उपलब्ध है उसके बारे में परेशान नहीं करना चाहते हैं, तो बस सभी चार कार्यों को प्रॉक्सी विधि में लपेटें जो फ़ंक्शन कॉल को जो भी उपलब्ध हो, को प्रस्तुत करता है, उदा।

function getMimeType($filename) 
{ 
    $mimetype = false; 
    if(function_exists('finfo_fopen')) { 
     // open with FileInfo 
    } elseif(function_exists('getimagesize')) { 
     // open with GD 
    } elseif(function_exists('exif_imagetype')) { 
     // open with EXIF 
    } elseif(function_exists('mime_content_type')) { 
     $mimetype = mime_content_type($filename); 
    } 
    return $mimetype; 
} 
2

आप FileInfo मॉड्यूल का उपयोग कर सकते हैं जो 5.3 से PHP में बनाया गया है। यदि आप PHP 5.3 से कम PHP संस्करण का उपयोग कर रहे हैं, तो आप इसे पीईसीएल एक्सटेंशन के रूप में स्थापित कर सकते हैं:

स्थापना के बाद finfo_file फ़ंक्शन फ़ाइल जानकारी लौटाएगा।

PECL एक्सटेंशन: http://pecl.php.net/package/fileinfo

पीएचपी प्रलेखन:

$mime = finfo_open(FILEINFO_MIME, $path_to_mime_magic_file); 
if ($mime ===FALSE) { 
    throw new Exception ('Finfo could not be run'); 
} 
$filetype = finfo_file($mime, $filename); 
finfo_close($mime); 

या नहीं स्थापित किया जा रहा है, तो आप finfo साथ कोई समस्या है, या माइम जादू फ़ाइल: http://www.php.net/manual/en/book.fileinfo.php

2

आप इस तरह finfo इस्तेमाल कर सकते हैं बस काम नहीं कर रहा है (यह हमारे 4 सर्वरों में से 3 पर सही ढंग से काम करता है - सभी समान ओएस और PHP इंस्टॉल) - फिर लिनक्स की मूल फ़ाइल का उपयोग करने का प्रयास करें (हालांकि फ़ाइल नाम को स्वच्छ करना न भूलें: इस एक्सपैम्प में le, मुझे पता है के रूप में यह मेरे परीक्षण कोड में एक PHP के अस्थायी फ़ाइल का नाम) है फ़ाइल नाम पर भरोसा किया जा सकता है:

ob_start(); 
system('file -i -b '.$filename); 
$output = ob_get_clean(); 
$output = explode("; ", $output); 
if (is_array($output)) { 
    $filetype = trim($output[0]); 
} 

तो बस की तरह एक स्विच बयान के माइम फ़ाइल प्रकार पारित:

switch (strtolower($filetype)) { 
      case 'image/gif': 
       return '.gif'; 
       break; 
      case 'image/png': 
       return '.png'; 
       break; 
      case 'image/jpeg': 
       return '.jpg'; 
       break; 
      case 'audio/mpeg': 
       return '.mp3'; 
       break; 
} 
return null; 
6

जानने के लिए एक फ़ाइल का माइम प्रकार मैं निम्नलिखित रैपर फ़ंक्शन का उपयोग करता हूं:

function Mime($path) 
{ 
    $result = false; 

    if (is_file($path) === true) 
    { 
     if (function_exists('finfo_open') === true) 
     { 
      $finfo = finfo_open(FILEINFO_MIME_TYPE); 

      if (is_resource($finfo) === true) 
      { 
       $result = finfo_file($finfo, $path); 
      } 

      finfo_close($finfo); 
     } 

     else if (function_exists('mime_content_type') === true) 
     { 
      $result = preg_replace('~^(.+);.*$~', '$1', mime_content_type($path)); 
     } 

     else if (function_exists('exif_imagetype') === true) 
     { 
      $result = image_type_to_mime_type(exif_imagetype($path)); 
     } 
    } 

    return $result; 
} 
3

getimageinfo छवियों को ढूंढने के लिए सबसे अच्छा है। जांचें कि वापसी का प्रकार गलत है या नहीं।

1

यह फ़ंक्शन जांच करता है, तो फ़ाइल एक्सटेंशन और माइम के आधार पर एक छवि है और सच रिटर्न अगर यह एक ब्राउज़र संगत छवि है ...

function checkImage($image) { 

//checks if the file is a browser compatible image 

$mimes = array('image/gif','image/jpeg','image/pjpeg','image/png'); 
//get mime type 
$mime = getimagesize($image); 
$mime = $mime['mime']; 

$extensions = array('jpg','png','gif','jpeg'); 
$extension = strtolower(pathinfo($image, PATHINFO_EXTENSION)); 

if (in_array($extension , $extensions) AND in_array($mime, $mimes)) return TRUE; 
else return FALSE; 

} 
+0

धन्यवाद! यह मेरे लिए काम किया। – Harsha

0

छवियाँ के लिए, मैं का उपयोग करें:

function is_image($path) 
    { 
    $a = getimagesize($path); 
    $image_type = $a[2]; 

    if(in_array($image_type , array(IMAGETYPE_GIF , IMAGETYPE_JPEG ,IMAGETYPE_PNG , IMAGETYPE_BMP))) 
    { 
     return true; 
    } 
    return false; 
    } 
0

Finfo_file फ़ंक्शन का उपयोग करने का सबसे अच्छा तरीका है। उदाहरण:

<?php 
if (isset($_FILES['yourfilename']['tmp_name'])) { 
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    $mime = finfo_file($finfo, $_FILES['yourfilename']['tmp_name']); 
    if ($mime == 'image/jpg') { 
     echo "It's an jpg image!"; 
    } 
    finfo_close($finfo); 
} 
?> 
संबंधित मुद्दे