2010-07-21 23 views
24

जानने के बिना मौजूद है, मुझे यह जांचने की आवश्यकता है कि कोई फ़ाइल मौजूद है लेकिन मुझे एक्सटेंशन नहीं पता है।PHP चेक फ़ाइल एक्सटेंशन

आईई मैं करना चाहते हैं:

if(file_exists('./uploads/filename')): 
// do something 
endif; 
बेशक

कि अभ्यस्त काम के रूप में यह कोई एक्सटेंशन है। एक्सटेंशन या तो jpg, jpeg, png, gif

लूप करने के बिना ऐसा करने के किसी भी तरीके का कोई विचार होगा?

उत्तर

48

आप एक glob():

$result = glob ("./uploads/filename.*"); 

करते हैं और देखते हैं कि क्या $result कुछ भी शामिल करना होगा।

+11

'ग्लोब' का उपयोग बैश-जैसे ब्रेस विस्तार के साथ भी किया जा सकता है: 'ग्लोब ("./ अपलोड/फ़ाइल नाम। {Jpg, jpeg, png, gif}", GLOB_BRACE) '। – Gumbo

+0

@pekka: बहुत बहुत धन्यवाद। –

-1

क्या आप PHP फ़ाइल प्रकार समारोह के बारे में जानते थे? http://php.net/manual/en/function.filetype.php

या अन्यथा is_file() http://www.php.net/manual/en/function.is-file.php

+0

ऐसा लगता है कि यह सभी –

+0

पर प्रश्न को संबोधित नहीं करता है लेकिन उसे पूर्ण फ़ाइल नाम जानने के बिना फ़ाइल प्रकार नहीं मिल सकता है, जो उसकी सटीक समस्या है। वह जानता है कि फाइल का नाम 'फ़ाइल नाम' ??? 'है, और यह जानने की जरूरत है कि' ??? ' उनमें से प्रत्येक को जांचने वाले एक्सटेंशन के समूह पर लूप किए बिना –

+0

आप सही हैं ... मैं फ़ाइल टाइप को याद करता हूं। लेकिन वह is_file() के साथ ऐसा कर सकता था। क्या आपको ऐसा नहीं लगता? – gearsdigital

3

मैं एक ही जरूरत मिल गया है, और ग्लोब का उपयोग करने की कोशिश की लेकिन इस समारोह पोर्टेबल नहीं हो रहा है:

http://php.net/manual/en/function.glob.php से नोट्स देखें:

नोट: यह फ़ंक्शन कुछ सिस्टम (जैसे पुराने सूर्य ओएस) पर उपलब्ध नहीं है।

नोट: GLOB_BRACE ध्वज कुछ गैर जीएनयू सिस्टम, जैसे सोलारिस पर उपलब्ध नहीं है।

यह भी अधिक opendir की तुलना में धीमी, पर एक नज़र डालें:

function resolve($name) { 
    // reads informations over the path 
    $info = pathinfo($name); 
    if (!empty($info['extension'])) { 
     // if the file already contains an extension returns it 
     return $name; 
    } 
    $filename = $info['filename']; 
    $len = strlen($filename); 
    // open the folder 
    $dh = opendir($info['dirname']); 
    if (!$dh) { 
     return false; 
    } 
    // scan each file in the folder 
    while (($file = readdir($dh)) !== false) { 
     if (strncmp($file, $filename, $len) === 0) { 
      if (strlen($name) > $len) { 
       // if name contains a directory part 
       $name = substr($name, 0, strlen($name) - $len) . $file; 
      } else { 
       // if the name is at the path root 
       $name = $file; 
      } 
      closedir($dh); 
      return $name; 
     } 
    } 
    // file not found 
    closedir($dh); 
    return false; 
} 

उपयोग::

$file = resolve('/var/www/my-website/index'); 
echo $file; // will output /var/www/my-website/index.html (for example) 
Which is faster: glob() or opendir()

तो मैं एक टुकड़ा समारोह वही चीज़ कर दिया है

उम्मीद है कि किसी की मदद कर सकता है, Ioan

संबंधित मुद्दे