I guess this is my favorite way of getting the contents of a directory / folder in PHP,
$files = array_values(array_diff(scandir($path), array('.', '..')));
from StackOverflow (surprise, surprise)
UPDATE APRIL 2019: I added the array_values() call to it, since otherwise the array seems to "start" at 2, and is a map instead of array if you pass it to json_encode()
And just because I've written this at least once in Perl and PHP and might use it again - a clunky function (clunky and clear is good, I think, or at least better than elegant and tough to read when I don't do ALL that much PHP) to read a directory - AFTER verifying it's under a certain directory root with realpath, ala...
$ROOT = "/some/legal/root/";
$folder = realpath($_REQUEST["folder"]);
if(substr($folder,0,strlen($ROOT)) != $ROOT ){
$folder = $ROOT;
}
I have a readdir function like this, that I call twice, once for dirs once for plain files, plus it adds a css class if the file is a hidden "dot" file... and yeah I'm assuming "/" as the path separator, sosueme...
function printFiles($folder,$doDirs) {
if(!(substr(strrev($folder),0,1) == "/")){
$folder .= "/";
}
$files = array_diff(scandir($folder), array('.', '..'));
asort($files);
foreach($files as $i => $filename){
$path = $folder.$filename;
if(($doDirs && is_dir($path)) || ((!$doDirs) && (! is_dir($path)))){
$slash = $doDirs?"/":"";
$typeclass = $doDirs?"dir":"file";
$hiddenclass = (substr($filename,0,1) == ".")?"hidden":"";
print "<a href='$path' class='$typeclass $hiddenclass'>$filename$slash</a> ";
}
}
}
No comments:
Post a Comment