नियमित अभिव्यक्ति
$directory = new RecursiveDirectoryIterator(__DIR__);
$flattened = new RecursiveIteratorIterator($directory);
// सुनिश्चित करें कि पथ में "/.Trash*" फ़ोल्डर्स नहीं हैं और .php या .html फ़ाइल के साथ समाप्त होता है
$files = new RegexIterator($flattened, '#^(?:[A-Z]:)?(?:/(?!\.Trash)[^/]+)+/[^/]+\.(?:php|html)$#Di');
foreach ($files as $file) {
echo $file . PHP_EOL;
}
फ़िल्टर्स का उपयोग करना
एक बेस क्लास उस रेगेक्स को रखती है जिसे फ़िल्टर के साथ उपयोग करने की आवश्यकता होती है।
क्लासेस जो इसे एक्सटेंड करेंगी। RecursiveRegexIterator को एक्सटेंड किया जाता है।
abstract class FilesystemRegexFilter extends RecursiveRegexIterator {
protected $regex;
public function __construct(RecursiveIterator $it, $regex) {
$this->regex = $regex;
parent::__construct($it, $regex);
}
}
वे बेसिक फ़िल्टर्स हैं और क्रमशः फ़ाइल और डायरेक्टरी नाम के साथ काम करते हैं।
class FilenameFilter extends FilesystemRegexFilter {
// रेगेक्स की मदद से फ़ाइलों को फ़िल्टर करें
public function accept() {
return (!$this->isFile() || preg_match($this->regex, $this->getFilename()));
}
}
class DirnameFilter extends FilesystemRegexFilter {
// रेगेक्स की मदद से डायरेक्टरीज़ को फ़िल्टर करें
public function accept() {
return (!$this->isDir() || preg_match($this->regex, $this->getFilename()));
}
}
नीचे दिया गया कोड डायरेक्टरी सामग्री पर पुनरावृति करता है। ट्रैश फ़ोल्डर्स को फ़िल्टर आउट किया जाता है और केवल PHP और HTML फ़ाइलें रखी जाती हैं।
$directory = new RecursiveDirectoryIterator(__DIR__);
// ".Trash*" फ़ोल्डर्स को फ़िल्टर आउट करें
$filter = new DirnameFilter($directory, '/^(?!\.Trash)/');
// PHP/HTML फ़ाइलों को फ़िल्टर करें
$filter = new FilenameFilter($filter, '/\.(?:php|html)$/');
foreach (new RecursiveIteratorIterator($filter) as $file) {
echo $file . PHP_EOL;
}
उपरोक्त कोड का उपयोग करके 2 लेवल गहरा स्कैन करना
$files = new RecursiveIteratorIterator($filter);
$files->setMaxDepth(1); // दो लेवल, पैरामीटर शून्य-आधारित है।
foreach ($files as $file) {
echo $file . PHP_EOL;
}