2010-07-12 9 views

उत्तर

73

आप glob

$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE); 

का उपयोग आप की जरूरत है इस केस-संवेदी होने के लिए कर सकते हैं, आप के साथ एक RegexIteratorयाarray_map को scandir का परिणाम पारित संयोजन में एक DirectoryIterator इस्तेमाल कर सकते हैं और एक कॉलबैक का उपयोग करने वाले किसी भी अवांछित एक्सटेंशन फ़िल्टर करता है। विस्तार प्राप्त करने के लिए आप strpos, fnmatch या pathinfo का उपयोग करते हैं या नहीं।

+5

के साथ अन्य चीजें करना चाहते हैं ... यह अब 'स्कैंडर()' का उपयोग नहीं करता है। लेकिन अन्यथा सही है। तो क्या यह नहीं होना चाहिए "नहीं, 'ग्लोब' के साथ? – Borealid

+0

@ बोरेलिड नाइटपिकर: डी – Gordon

+2

अब इसे असंवेदनशील बना दें। > :) – salathe

5

का उपयोग कर आप जिसके परिणामस्वरूप सरणी बाद खोज और फ़ाइलों त्यागने अपने मापदंड से मेल खाने नहीं कर सकते है।

scandir आपके पास इच्छित कार्यक्षमता नहीं है।

12

मैं फ़ाइलों के माध्यम से लूप होगा और उनके एक्सटेंशन पर नज़र डालेंगे:

$dir = '/tmp'; 
$dh = opendir($dir); 
while (false !== ($fileName = readdir($dh))) { 
    $ext = substr($fileName, strrpos($fileName, '.') + 1); 
    if(in_array($ext, array("jpg","jpeg","png","gif"))) 
     $files1[] = $fileName; 
} 
10

यहाँ केवल चित्र प्राप्त करने के लिए एक आसान तरीका है। PHP> = 5.2 संस्करण के साथ काम करता है। एक्सटेंशन का संग्रह लोअरकेस में है, इसलिए लूप में फ़ाइल एक्सटेंशन को लोअरकेस में बनाने से यह केस असंवेदनशील हो जाता है।

// image extensions 
$extensions = array('jpg', 'jpeg', 'png', 'gif', 'bmp'); 

// init result 
$result = array(); 

// directory to scan 
$directory = new DirectoryIterator('/dir/to/scan/'); 

// iterate 
foreach ($directory as $fileinfo) { 
    // must be a file 
    if ($fileinfo->isFile()) { 
     // file extension 
     $extension = strtolower(pathinfo($fileinfo->getFilename(), PATHINFO_EXTENSION)); 
     // check if extension match 
     if (in_array($extension, $extensions)) { 
      // add to result 
      $result[] = $fileinfo->getFilename(); 
     } 
    } 
} 
// print result 
print_r($result); 

मुझे उम्मीद है कि यदि आप केस असंवेदनशील और छवि केवल एक्सटेंशन चाहते हैं तो यह उपयोगी है।

+0

पूरी तरह से काम करता है! –

16

वास्तविक प्रश्न स्कैंडर का उपयोग कर रहा था और जवाब ग्लोब में समाप्त हो गए थे। ब्लॉब काफी भारी है, जहां दोनों में एक बड़ा अंतर है। निम्नलिखित कोड का उपयोग करके स्कैंडर के साथ एक ही फ़िल्टरिंग किया जा सकता है:

$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f)); 

मुझे उम्मीद है कि इससे किसी की मदद होगी।

1

आप एक निर्देशिका स्कैन और फ़ाइल नाम वापस जाने के लिए चाहते हैं, तो केवल आप इस का उपयोग कर सकते हैं:

$fileNames = array_map(
    function($filePath) { 
     return basename($filePath); 
    }, 
    glob('./includes/*.{php}', GLOB_BRACE) 
); 

scandir(). और .. के साथ-साथ फ़ाइलों को लौटा देगा, इसलिए ऊपर कोड क्लीनर है अगर तुम सिर्फ जरूरत है फ़ाइल नाम या आप वास्तविक फाइलपैथ

+0

धन्यवाद। इससे मदद मिलती है –

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