PHP में सबडायरेक्टरी प्राप्त करना
किसी डायरेक्टरी में मौजूद सबडायरेक्टरीज़ प्राप्त करने के लिए, नीचे दिए गए कोड का उपयोग किया जा सकता है:
उदाहरण 1: glob() के साथ सभी एंट्रीज़ (फाइल्स + डायरेक्टरीज़)
<?php
$all_entries = array_filter(glob('*.*'), 'is_dir');
print_r($all_entries);
?>
आउटपुट
Array
(
[0] => demo.csv
[1] => mark.php
[2] => contact.txt
[3] => source.txt
)
नोट: ऊपर दिए गए उदाहरण में `glob('*.*')` पैटर्न एक्सटेंशन वाली फाइल्स से मेल खाता है, और `array_filter(..., 'is_dir')` केवल डायरेक्टरीज़ रखता है। लेकिन पैटर्न `*.*` एक्सटेंशन रहित डायरेक्टरीज़ को मिस कर सकता है।
उदाहरण 2: केवल डायरेक्टरीज़ (GLOB_ONLYDIR)
<?php
$somePath = '/path/to/directory';
$all_dirs = glob($somePath . '/*', GLOB_ONLYDIR);
print_r($all_dirs);
?>
आउटपुट
Array
(
[0] => example
[1] => exam
[2] => log
)
बेहतर दृष्टिकोण: RecursiveDirectoryIterator
रिकर्सिव सबडायरेक्टरी ट्रैवर्सल के लिए:
<?php
$dir = '/path/to/directory';
$iterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
RecursiveIteratorIterator::SELF_FIRST
);
$dirs = [];
foreach ($iterator as $item) {
if ($item->isDir()) {
$dirs[] = $item->getPathname();
}
}
print_r($dirs);
?>
मुख्य फ़ंक्शन्स तुलना
| फ़ंक्शन | रिकर्सिव | फिल्टर | प्रदर्शन |
|---|---|---|---|
| glob() | नहीं | पैटर्न + कॉलबैक | छोटी डायरेक्टरीज़ के लिए तेज़ |
| scandir() | नहीं | मैन्युअल | तेज़ |
| RecursiveDirectoryIterator | ✅ हां | स्प्लिटर फिल्टर्स | बड़े ट्रीज़ के लिए बेहतर |