在面试中我们经常遇到这个题目:php遍历一个文件夹下的所有文件和子文件夹。
这个题目有好多种解决方法。但大致思路都一样。采用递归。
$path = './filepath'; function getfiles($path) { if(!is_dir($path)) return; $handle = opendir($path); while( false !== ($file = readdir($handle))) { if($file != '.' && $file!='..') { $path2= $path.'/'.$file; if(is_dir($path2)) { echo ' '; echo $file; getfiles($path2); }else { echo ' '; echo $file; } } } } print_r( getfiles($path)); echo ' '; function getdir($path) { if(!is_dir($path)) return; $handle = dir($path); while($file=$handle->read()) { if($file!='.' && $file!='..') { $path2 = $path.'/'.$file; if(is_dir($path2)) { echo $file."\t"; getdir($path2); }else { echo $file.' '; } } } } getdir($path); echo ' '; function get_dir_scandir($path){ $tree = array(); foreach(scandir($path) as $single){ if($single!='.' && $single!='..') { $path2 = $path.'/'.$single; if(is_dir($path2)) { echo $single." \r\n"; get_dir_scandir($path2); }else { echo $single." \r\n"; } } } } get_dir_scandir($path); echo ' '; function get_dir_glob(){ $tree = array(); foreach(glob('./curl/*') as $single){ echo $single." \r\n"; } } get_dir_glob(); echo ' '; function myscandir($path) { if(!is_dir($path)) return; foreach(scandir($path) as $file) { if($file!='.' && $file!='..') { $path2= $path.'/'.$file; if(is_dir($path2)) { echo $file; myscandir($path2); }else { echo $file.' '; } } } } myscandir($path); echo ' '; function myglob($path) { $path_pattern = $path.'/*'; foreach(glob($path_pattern) as $file) { if(is_dir($file)) { echo $file; myscandir($file); }else { echo $file.' '; } } } myglob($path);