scandir()
函數在 PHP 中用于讀取指定目錄中的文件和子目錄
opcache_reset()
:如果你使用了 PHP OPcache,可以在調用 scandir()
之前重置 OPcache。這可以確保你的代碼被重新編譯,從而提高性能。但請注意,頻繁地重置 OPcache 可能會影響性能。opcache_reset();
$files = scandir($directory);
array_diff()
:如果你只需要讀取特定類型的文件(例如,只查找擴展名為 .php
的文件),可以使用 array_diff()
函數過濾掉不需要的文件。$allowedExtensions = ['.php'];
$files = scandir($directory);
$filteredFiles = array_diff($files, array('.', '..'));
$filteredFiles = array_filter($filteredFiles, function($file) use ($allowedExtensions) {
return in_array(pathinfo($file, PATHINFO_EXTENSION), $allowedExtensions);
});
DirectoryIterator
或 RecursiveDirectoryIterator
:這些類提供了更高級的文件遍歷功能,可以提高性能。$directoryIterator = new DirectoryIterator($directory);
$filteredFiles = [];
foreach ($directoryIterator as $file) {
if ($file->isDot() || $file->isDir()) {
continue;
}
$filteredFiles[] = $file->getFilename();
}
glob()
函數:glob()
函數允許你使用通配符搜索文件,這可能會比 scandir()
更快。但請注意,glob()
函數的性能可能受到操作系統和文件系統的限制。$files = glob($directory . '/*');
$filteredFiles = array_filter($files, function($file) {
return !in_array(pathinfo($file, PATHINFO_EXTENSION), ['.', '..']);
});
scandir()
的結果緩存起來,以減少對文件系統的訪問次數。你可以使用內存緩存(如 Memcached 或 Redis)或文件緩存(如 APCu 或文件系統緩存)來實現這一點。總之,優化 scandir()
函數的速度取決于你的具體需求和應用場景。嘗試上述方法,找到最適合你的解決方案。