वहाँ किसी भी तरह से एक्सटेंशन jpeg
, png
, gif
आदि के साथ ही चित्र प्राप्त करने, जबकिPHP में स्कैंडर का उपयोग कर केवल छवियां कैसे प्राप्त करें?
$dir = '/tmp';
$files1 = scandir($dir);
वहाँ किसी भी तरह से एक्सटेंशन jpeg
, png
, gif
आदि के साथ ही चित्र प्राप्त करने, जबकिPHP में स्कैंडर का उपयोग कर केवल छवियां कैसे प्राप्त करें?
$dir = '/tmp';
$files1 = scandir($dir);
आप glob
$images = glob('/tmp/*.{jpeg,gif,png}', GLOB_BRACE);
का उपयोग आप की जरूरत है इस केस-संवेदी होने के लिए कर सकते हैं, आप के साथ एक RegexIterator
याarray_map
को scandir
का परिणाम पारित संयोजन में एक DirectoryIterator
इस्तेमाल कर सकते हैं और एक कॉलबैक का उपयोग करने वाले किसी भी अवांछित एक्सटेंशन फ़िल्टर करता है। विस्तार प्राप्त करने के लिए आप strpos
, fnmatch
या pathinfo
का उपयोग करते हैं या नहीं।
का उपयोग कर आप जिसके परिणामस्वरूप सरणी बाद खोज और फ़ाइलों त्यागने अपने मापदंड से मेल खाने नहीं कर सकते है।
scandir
आपके पास इच्छित कार्यक्षमता नहीं है।
मैं फ़ाइलों के माध्यम से लूप होगा और उनके एक्सटेंशन पर नज़र डालेंगे:
$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;
}
यहाँ केवल चित्र प्राप्त करने के लिए एक आसान तरीका है। 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);
मुझे उम्मीद है कि यदि आप केस असंवेदनशील और छवि केवल एक्सटेंशन चाहते हैं तो यह उपयोगी है।
पूरी तरह से काम करता है! –
वास्तविक प्रश्न स्कैंडर का उपयोग कर रहा था और जवाब ग्लोब में समाप्त हो गए थे। ब्लॉब काफी भारी है, जहां दोनों में एक बड़ा अंतर है। निम्नलिखित कोड का उपयोग करके स्कैंडर के साथ एक ही फ़िल्टरिंग किया जा सकता है:
$images = preg_grep('~\.(jpeg|jpg|png)$~', scandir($dir_f));
मुझे उम्मीद है कि इससे किसी की मदद होगी।
आप एक निर्देशिका स्कैन और फ़ाइल नाम वापस जाने के लिए चाहते हैं, तो केवल आप इस का उपयोग कर सकते हैं:
$fileNames = array_map(
function($filePath) {
return basename($filePath);
},
glob('./includes/*.{php}', GLOB_BRACE)
);
scandir()
.
और ..
के साथ-साथ फ़ाइलों को लौटा देगा, इसलिए ऊपर कोड क्लीनर है अगर तुम सिर्फ जरूरत है फ़ाइल नाम या आप वास्तविक फाइलपैथ
धन्यवाद। इससे मदद मिलती है –
के साथ अन्य चीजें करना चाहते हैं ... यह अब 'स्कैंडर()' का उपयोग नहीं करता है। लेकिन अन्यथा सही है। तो क्या यह नहीं होना चाहिए "नहीं, 'ग्लोब' के साथ? – Borealid
@ बोरेलिड नाइटपिकर: डी – Gordon
अब इसे असंवेदनशील बना दें। > :) – salathe