递归查找文件夹中的所有.php文件
使用PHP,如何查找文件夹或其子文件夹(任何深度)中的所有.PHP文件?只需添加如下内容:递归查找文件夹中的所有.php文件,php,Php,使用PHP,如何查找文件夹或其子文件夹(任何深度)中的所有.PHP文件?只需添加如下内容: function listFolderFiles($dir){ $ffs = scandir($dir); $i = 0; $list = array(); foreach ( $ffs as $ff ){ if ( $ff != '.' && $ff != '..' ){ if ( strlen($ff)>=5
function listFolderFiles($dir){
$ffs = scandir($dir);
$i = 0;
$list = array();
foreach ( $ffs as $ff ){
if ( $ff != '.' && $ff != '..' ){
if ( strlen($ff)>=5 ) {
if ( substr($ff, -4) == '.php' ) {
$list[] = $ff;
//echo dirname($ff) . $ff . "<br/>";
echo $dir.'/'.$ff.'<br/>';
}
}
if( is_dir($dir.'/'.$ff) )
listFolderFiles($dir.'/'.$ff);
}
}
return $list;
}
$files = array();
$files = listFolderFiles(dirname(__FILE__));
函数listFolderFiles($dir){
$ffs=斯堪的纳维亚($dir);
$i=0;
$list=array();
foreach($ffs作为$ff){
如果($ff!='.&&$ff!='.')){
如果(斯特伦($ff)>=5){
如果(substr($ff,-4)=='.php'){
$list[]=$ff;
//echo目录名($ff)。$ff.“
”;
回声$dir.'/'.$ff.
;
}
}
if(is_dir($dir./'.$ff))
listFolderFiles($dir.'/'.$ff);
}
}
返回$list;
}
$files=array();
$files=listFolderFiles(dirname(_文件__));
您可以使用和:
很晚了。
但我认为这对那些在搜索后降落在这里的人是有用的
我稍微修改了supajason创建的代码
因为提供的代码没有返回一致的结果:
主要是由于使用的命名法
我还添加了一些功能
希望它有用
<?php
define('ROOT', str_replace('\\', '/', getcwd()).'/');
///########-------------------------------------------------------------
///########-------------------------------------------------------------
///######## FUNCTION TO LIST ALL FILES AND FOLDERS WITHIN A CERTAIN PATH
///########-------------------------------------------------------------
///########-------------------------------------------------------------
function listFolderFiles(
$dir, /// **** TARGET DIRECTORY TO SCAN
$ReturnFlat = true, /// **** DEFAULT FLAT ARRAY TO BE RETURNED
$iteration = 0 /// **** INTERNAL PARAM TO COUNT THE FUNCTIONS OWN ITERATIONS
){
///########==================================================
///######## PREPARE ALL VARIABLES
///########==================================================
$dir = rtrim($dir, '/'); /// **** REMOVE TRAILING SLASH (* just for being pretty *)
$FilesFolders = scandir($dir); /// **** SCAN FOR ALL FILES AND FOLDERS
$NestedFolders = array(); /// **** THE NESTED FOLDERS BUILD ARRAY
static $TotalFiles = array(); /// **** THE TOTAL FILES ARRAY
///######## MAKE SURE THAT THE STATIC FILES ARE WILL BE CLEARED AFTER THE FIRST ITERATION
if($iteration === 0){
///######### RESET AS EMPTY ARRAY
$TotalFiles = array();
}
///########==================================================
///########==================================================
///######## RUN THROUGH ALL FILES AND FOLDERS
///########==================================================
foreach($FilesFolders as $File){
if(
/// **** IF NOT ONE DIR UP
($File != '.')
&&
/// **** IF NOT TWO DIRS UP
($File != '..')
){
///######### IF IT CONCERNS A FILE
if(is_dir($dir.'/'.$File) === true){
$iteration++; /// **** RAISE THE ITERATION
$NestedFolders[] = listFolderFiles($dir.'/'.$File, false, $iteration); /// **** EXECUTE THE FUNCTION ITSELF
}
///######### IF IT CONCERNS A FILE
else{
$TotalFiles[] = $dir.'/'.$File; /// **** ADD THE FILE TO THE TOTAL FILES ARRAY
$NestedFolders[] = $File; /// **** ADD THE FILE TO THE NESTED FOLDERS ARRAY
}
}
}
///########==================================================
///####### IF A FLAT LIST SHOULD BE RETURNED
if($ReturnFlat === true){
///########==================================================
///######## RETURN ALL FILES AND FOLDERS IN A FLAT ARRAY
///########==================================================
return($TotalFiles);
///########==================================================
}
///######## IF A NESTED LIST SHOULD BE RETURNED
else{
///########==================================================
///######## RETURN THE FILES AND FOLDERS IN A NESTED ARRAY
///########==================================================
return($NestedFolders);
///########==================================================
}
}
$files = listFolderFiles(ROOT, true); /// **** FLAT ARRAY
///$files = listFolderFiles(ROOT, false); /// **** NESTED ARRAY
echo print_r($files, true);
?>
这与这里的另一个答案类似,但删除了跳过点
,因为它不是
需要,并与严格的\u类型一起使用
:
<?php
$o_dir = new RecursiveDirectoryIterator('.');
$o_iter = new RecursiveIteratorIterator($o_dir);
foreach ($o_iter as $o_info) {
if ($o_info->getExtension() == 'php') {
echo $o_info->getPathname(), "\n";
}
}
“提供的代码没有返回一致的结果”-这是什么意思?实现的行为有什么不同?
<?php
$o_dir = new RecursiveDirectoryIterator('.');
$o_iter = new RecursiveIteratorIterator($o_dir);
foreach ($o_iter as $o_info) {
if ($o_info->getExtension() == 'php') {
echo $o_info->getPathname(), "\n";
}
}