freelance84 Posted June 14, 2011 Share Posted June 14, 2011 I am learning about reading file directories and found this from thi example of opendir from phpmanual // Open a known directory, and proceed to read its contents $dir = "../public_html/"; $directoryArray = array(); $fileArray = array(); if (is_dir($dir)) { if ($dh = opendir($dir)) { while (($file = readdir($dh)) !== false) { if(filetype($dir . $file) == 'file') { array_push($fileArray,$file); } else{ array_push($directoryArray,$file); } } closedir($dh); } } asort($directoryArray); asort($fileArray); print_r($directoryArray); print_r($fileArray); The first 2 directories printed out are... Array ( [0] => . [1] => .. Now these are not folders I created... are they built in shortcuts for when you type ../somfile.php or ./somfile.php ?? Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/ Share on other sites More sharing options...
AbraCadaver Posted June 14, 2011 Share Posted June 14, 2011 Yes, in *nix and windows . represents the current directory and .. represents the parent directory. In *nix they are actual directories. BTW, I prefer glob() for what you are doing: $directoryArray = glob($dir, GLOB_ONLYDIR); $fileArray = array_diff(glob($dir), $directoryArray); Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229519 Share on other sites More sharing options...
Psycho Posted June 14, 2011 Share Posted June 14, 2011 BTW, I prefer glob() for what you are doing: $directoryArray = glob($dir, GLOB_ONLYDIR); $fileArray = array_diff(glob($dir), $directoryArray); Interesting approach to get only the files using glob() with GLOB_ONLYDIR and array_diff(). I don't know why there isn't a flag such as GLOB_ONLYFILE Anyway, here is another approach that may or may not be more efficient. It only requires one glob() call, but then filters based on is_file(); $files = array_filter(glob($path.'*'), 'is_file'); Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229537 Share on other sites More sharing options...
AbraCadaver Posted June 14, 2011 Share Posted June 14, 2011 Good, point. I remember using that and 'is_dir' in a post in the past. One thing I would point out though, is running that on a dir with many files may be slower as the is_file() will need to stat all of the files/dirs in the directory, unless the glob has already populated the stat cache (I don't know). Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229562 Share on other sites More sharing options...
freelance84 Posted June 14, 2011 Author Share Posted June 14, 2011 Cool thanks... that's some pretty extreme optimizing of my attempt... Although i can't seem to get it to return the .htaccess file with: $files = array_filter(glob($path.'*'), 'is_file'); With my OP, the two arrays returned absolutely everything within in the $dir. What i am doing is creating a file management page, one which 'locks' files when they are being worked on to prevent anyone else from editing the same file and thus wasting time. As a result I need to be able to see all files. I'm assuming that the .htaccess is being filtered by the is_file()? PS/ thanks as well, I hadn't come across array_filter before, or glob. Cheers PPS/ With the array_filter and the asort, both methods seem to sort alphabetically the upper case first and then the lower case... Is there anyway of getting the results to be case insesitive as to their order? Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229615 Share on other sites More sharing options...
AbraCadaver Posted June 14, 2011 Share Posted June 14, 2011 natcasesort() It will also fix this problem: 1.txt 10.txt 2.txt 20.txt Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229624 Share on other sites More sharing options...
freelance84 Posted June 14, 2011 Author Share Posted June 14, 2011 Cool thanks Link to comment https://forums.phpfreaks.com/topic/239335-opendir-and/#findComment-1229683 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.