首页 > 解决方案 > 如何使用php遍历文件和文件夹(包括子文件夹)并找出其他文件中包含的文件的出现?

问题描述

如何使用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');
?>

标签: phpfile-handlingscandir

解决方案


解决了:

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

推荐阅读