I have the following code snippet. I’m trying to list all the files in a directory and make them available for users to download. This script works fine with directories that don’t have sub-directories, but if I wanted to get the files in a sub-directory, it doesn’t work. It only lists the directory name. I’m not sure why the is_dir is failing on me… I’m a bit baffled on that. I’m sure that there is a better way to list all the files recursively, so I’m open to any suggestions!
function getLinks ($folderName, $folderID) {
$fileArray = array();
foreach (new DirectoryIterator(<some base directory> . $folderName) as $file) {
//if its not "." or ".." continue
if (!$file->isDot()) {
if (is_dir($file)) {
$tempArray = getLinks($file . "/", $folderID);
array_merge($fileArray, $tempArray);
} else {
$fileName = $file->getFilename();
$url = getDownloadLink($folderID, $fileName);
$fileArray[] = $url;
}
}
}
Instead of using DirectoryIterator, you can use RecursiveDirectoryIterator, which provides functionality for iterating over a file structure recursively. Example from documentation: