扫描功能不起作用
问题描述:
我试图创建一个函数来扫描目录中的所有文件以及该目录下的目录(以后再进一步讨论)。目前它看到主(指定)目录中的所有文件,但在指定目录下的目录中,代码不会看到所有文件。扫描功能不起作用
这是我的函数:
<?php
function scanfiles($arg1){
// Set variables
$files = array();
// Analyze the main dir
$main_files = array_filter(scandir($arg1), function($files_arg1){ return is_file($files_arg1); });
$main_folders = array_filter(scandir($arg1), function($folders_arg1){ return is_dir($folders_arg1); });
// Remove dots from main_folders
$main_folders = array_diff($main_folders, array('..', '.'));
// Add all files from main_files to the files array
foreach($main_files as $main_key => $main_value){
$files[] = "/" . $main_value;
}
// Check subfolders
foreach($main_folders as $sub1_key => $sub1_value){
// Analyze subfolder
$sub1_files = array_filter(scandir($arg1 . "/" . $sub1_value), function($files_arg1){ return is_file($files_arg1); });
$sub1_folders = array_filter(scandir($arg1 . "/" . $sub1_value), function($folders_arg1){ return is_dir($folders_arg1); });
// Add all files from sub1_files to files array
foreach($sub1_files as $sub1_add_key => $sub1_add_value){
$files[] = "/" . $sub1_value . "/" . $sub1_add_value;
}
}
return $files;
}
foreach (scanfiles(__DIR__) as $key => $value) {
echo "<br>" . $value;
}
?>
这是输出我得到:
/.DS_Store
/.htaccess
/action.php
/index.php
/admin/.DS_Store
/includes/.DS_Store
/includes/.htaccess
/install/index.php
我真的不明白怎么回事错误导致本应是输出:
/.DS_Store
/.htaccess
/action.php
/index.php
/admin/.DS_Store
/admin/index.php
/admin/login.php
/includes/.DS_Store
/includes/.htaccess
/includes/config.inc.php
/install/index.php
任何知道最新问题的人,可以帮助我吗?
所有的帮助将不胜感激!
-Jamie
答
编辑与corrent answare 其原因是array_filter功能 你不要,如果你改变这样
$sub1_files = array_filter(scandir($arg1 . "/" . $sub1_value.'/'), function($files_arg1){
echo $files_arg1;
return is_file($files_arg1); });
,你会发现什么即时通讯代码发送正确的路径给它 说你可以通过你自己处理它或发送路径到array_filter太
答
所以,我现在发现我使用的问题$ folders_arg1变量在子文件夹的scandir中,没有定义它应该检查子文件夹中的is_file。因为它会搜索文件本身的文件夹。
固定码:
<?php
function scanfiles($arg1){
global $sub1_value;
// Define arg1 as a constant
define("arg1", $arg1);
// Set variables
$files = array();
// Analyze the main dir
$main_files = array_filter(scandir($arg1), function($files_arg1){ return is_file(arg1 . "/" . $files_arg1); });
$main_folders = array_filter(scandir($arg1), function($folders_arg1){ return is_dir(arg1 . "/" . $folders_arg1); });
// Remove dots from main_folders
$main_folders = array_diff($main_folders, array('..', '.'));
// Add all files from main_files to the files array
foreach($main_files as $main_key => $main_value){
$files[] = "/" . $main_value;
}
// Check subfolders
foreach($main_folders as $sub1_key => $sub1_value){
// Analyze subfolder
$sub1_files = array_filter(scandir($arg1 . "/" . $sub1_value), function($files_arg1){ return is_file(arg1 . "/" . $GLOBALS['sub1_value'] . "/" . $files_arg1); });
$sub1_folders = array_filter(scandir($arg1 . "/" . $sub1_value), function($folders_arg1){ return is_dir(arg1 . "/" . $GLOBALS['sub1_value'] . "/" . $folders_arg1); });
// Add all files from sub1_files to files array
foreach($sub1_files as $sub1_add_key => $sub1_add_value){
$files[] = "/" . $sub1_value . "/" . $sub1_add_value;
}
}
return $files;
}
foreach (scanfiles(__DIR__) as $key => $value) {
echo "<br>" . $value;
}
?>
嗯....没有如果你读,你看到的是被插入阵列中的注释,其最终会是这个结果。就像没有斜杠一样'/ index.php'就是结果中的'index.php'。 – Jamie42
我已经改变了我的答案,你可以检查它 –
好吧现在测试它 – Jamie42