php - 如何使用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');
?>
解决方案
解决了:
<?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');
?>
推荐阅读
- php - 使用 laravel 服务并将代码注入控制器
- android - 如何使用 ARCORE 从 ARScene 相机扫描二维码
- java - OKHttp的BufferedSink(或BufferedSource)中如何实现seek()函数?
- python - Tkinter 通过命令 lambda 传递 StringVar.get 给出初始值
- c++ - 为什么我的多线程代码比串行版本慢,我该怎么做才能加快速度?
- vue.js - 如何将索引附加到 v 模型?
- c++ - Windows.h Sleep(x) 中是否实现了流刷新?
- c - 在 Ubuntu 中使用 SDL(简单 DirectMedia 层)库
- javascript - 如何使用 JS 创建邮政编码检查器
- html - 如何在 HTML/CSS 中居中文本