簡體   English   中英

掃描功能不起作用

[英]Scan function does not works

我正在嘗試創建一個功能,該功能可以掃描目錄中的所有文件以及該目錄下的目錄(以后再掃描)。 當前,它可以看到主(指定)目錄中的所有文件,但是在指定目錄下的目錄中,代碼看不到所有文件。


這是我的功能:

<?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



有什么問題的人可以幫助我嗎?

所有這些幫助將不勝感激!


-傑米

使用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

因此,我現在發現問題是我在子文件夾的scandir中使用$ folders_arg1變量,而沒有定義它應該檢查子文件夾中的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;
}
?>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM