Как перебрать файлы и папки (включая подпапки) и выяснить, какие файлы включены в другие файлы с помощью php? - PullRequest
0 голосов
/ 29 мая 2018

Как перебрать файлы и папки (включая подпапки) и выяснить вхождения файлов, включенных в другие файлы, используя php?

Предположим, моя структура папок-файлов выглядит так:

MainFolder
   file1.txt   
    content = file2.txt file3.txt
   file2.txt
    content = file1.txt file3.txt
   file3.txt
   file4.txt
   SubFolder
     file5.txt
       content = file1.txt file2.txt
     file6.txt
     file7.txt
     SubSubFolder
       file8.txt
       file9.txt
        content = file10.txt file1.txt
       file10.txt

Вывод должен быть таким:

MainFolder
   file1.txt   
     => this filename is exist in file2.txt, file5.txt,  file9.txt
   file2.txt
     => this filename is exist in file1.txt, file5.txt
   file3.txt
     => this filename is exist in file1.txt, file2.txt
   file4.txt
   SubFolder
     file5.txt
     file6.txt
     file7.txt
     SubSubFolder
       file8.txt
       file9.txt
       file10.txt
         => this filename is exist in file9.txt

Что может быть решением для этого? Примечание: Я могуперечислить файлы и папки-подпапки (файлы подпапок), используя рекурсивную функцию, как:

<?php
function listFolderFiles($dir){
    $ffs = scandir($dir);

    unset($ffs[array_search('.', $ffs, true)]);
    unset($ffs[array_search('..', $ffs, true)]);
    $temp_ffs = $ffs;
    // prevent empty ordered elements
    if (count($ffs) < 1)
        return;

    echo '<ol>';
    foreach($ffs as $ff){
        echo '<li>'.$ff;
        if(is_dir($dir.'/'.$ff)){
            listFolderFiles($dir.'/'.$ff);
        }else{
            // calling string match function : here I will be calling another function to find out the occurrences ( what will be the solution?)
        } 

        echo '</li>';
    }
    echo '</ol>';
}
listFolderFiles('C:\Users\vmali\Desktop\Test-Directories');
?>

1 Ответ

0 голосов
/ 29 мая 2018

Решено:

<?php
function listFolderFiles($dir){
    $ffs = scandir($dir);

    unset($ffs[array_search('.', $ffs, true)]);
    unset($ffs[array_search('..', $ffs, true)]);
    // prevent empty ordered elements
    if (count($ffs) < 1)
        return;

    echo '<ol>';
    foreach($ffs as $ff){
        echo '<li>'.$ff;
        if(is_dir($dir.'/'.$ff)){
            listFolderFiles($dir.'/'.$ff);
        }else{
            find_string($dir, $ff);
        } 

        echo '</li>';
    }
    echo '</ol>';
}

function find_string($dir, $ff_temp){
    $ffs = scandir($dir);
    unset($ffs[array_search('.', $ffs, true)]);
    unset($ffs[array_search('..', $ffs, true)]);;
    // prevent empty ordered elements
    if (count($ffs) < 1)
        return;

    foreach($ffs as $ff){
        if(is_dir($dir.'/'.$ff)){
            find_string($dir.'/'.$ff, $ff_temp);
        }else{
            $content = file_get_contents("$dir/$ff");
            if (false !== strpos($content, $ff_temp) ) {
                echo "<br/>Usage found in: $dir/$ff";
            }
        } 
    }   
}

listFolderFiles('C:/Users/vmali/Desktop/Test-Directories');
?>
...