note 96195 deleted from function.readdir by danbrown

From: Date: Sun, 14 Feb 2010 04:55:54 +0000
Subject: note 96195 deleted from function.readdir by danbrown
References: 1  Groups: php.notes 
Request: Send a blank email to php-notes+get-165943@lists.php.net to get a copy of this message
Note Submitter: support at addcomment dot ru ---- optimized and correct function for recursive directory listing: <? $__dirs=array(); function getdirr($p){ global $__dirs; if(!isset($__dirs[$p])) $__dirs[$p]=array(); $z=@opendir($p); if(!$z) return; if(!@chdir($p)) return; while(($f=readdir($z))!==false) { if($f=='.'||$f=='..') continue; $t=@filetype($f); if($t=='dir') { clearstatcache(); getdirr("{$p}/{$f}"); chdir('..'); } elseif($t!==false) $__dirs[$p][]=$f; } @closedir($z); } getdirr('/etc'); print_r($__dirs); ?> result (for an example); [/usr/local/lib/php] => Array ( [0] => .filemap [1] => .lock [2] => .depdblock [3] => .depdb ) [/usr/local/lib/php/build] => Array ( [0] => shtool [1] => config.guess [2] => config.sub [3] => phpize.m4 ) [/usr/local/lib/php/20020429] => Array ( [0] => mysql.so [1] => pcre.so [2] => bz2.so ) [/usr/local/lib/php/20020429/Optimizer/php-4.4.x] => Array ( [0] => ZendOptimizer.so ) [/usr/local/lib/php/20020429/Optimizer_TS] => Array ( ) ... keep in mind about filetype() returned result: file, dir , link or FALSE. if your use like: <? if (filetype($file)!='file') { ... proccess as dir ... } ?> you got an error if $file was as link (actual for unix systems) if you proccess like this: <? if (filetype($file)=='dir') { ... proccess as dir ...} else { ... process as file ...} ?> then if filetype returns error, it will be proccessed as file. exactly as file named '0' (boolean to string conversion) so, correct variant : <? $t=@filetype($file); if ($t=='dir') { ... proccess as dir .. } elseif($t!==false) { ... process as file OR link ... } else { ... error ... } ?>

« previous php.notes (#165943) next »