扫描功能行不通



我正在尝试创建一个函数,该功能在DIR下方扫描所有文件和DIRS在该Dir(后来进一步进行)。当前,它在主(指定)DIR中看到所有文件,但是在指定的DIR下方的DIR中,代码并未看到所有文件。


这是我的功能:

<?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); });

您会注意到我在说什么。

所以,我现在发现我正在使用 $ folders_arg1 scandir中的问题,而无需定义是否应该检查subforter中的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;
}
?>

最新更新