我的目录中有多个文件夹。
每个文件夹都有一个文件 index.html 。
index.html的绝对路径类似于:
C:\Users\Sachin_S2\Desktop\Script\ESXi_6.7_GSG_Pub=9=Validator (XXXX)=en-us\index.html
上面的路径可以解释为:
[Any_folder_location\Script\<Pub_title>=<Pub_version>=Validator (XXXX)=en-us\index.html]
此处的发布名称为: ESXi_6.7_GSG_Pub ,此处的发布版本为: 9
现在,我要使用以下条件(或模式)读取子文件夹中的所有文件:
1)只读index.html(在所有子文件夹中)
2)在文件路径中搜索 Pub_Title 和 Pub_Version
3)只读那些文件
举个例子。
下面是文件夹结构。
我当前的脚本:
<?php
$it = new RecursiveDirectoryIterator("C:\Users\Sachin_S2\Desktop\Script");
foreach(new RecursiveIteratorIterator($it) as $file) {
echo $file . "<br/> \n";
}
脚本输出:
基本上,我想阅读所有搜索pubtitle和pubversion的index.html。
情况:
带有ESXi_6.7_GSG_Pub和版本9的index.html
带有ESXi_6.7_GSG_Pub和版本8的index.html
带有ESXi_6.5_IIG_Pub和版本13的index.html 等
答案 0 :(得分:0)
这是我所能提供的最佳信息。 下次一定要考虑发布自己的一些努力来加快速度。 2个头总是比一个头好。
我在本地模拟了您的文件夹结构,最后得到了这样的内容:
- SomeFolderName
- ESXI_6.7GSG_PUB=9=Validator (things)=en-us
- index.html // contains "index 1"
- ESXI_6.9GSG_PUB=9=Validator (things)=en-us
- index.html // contains "index 2"
这显然是虚拟数据结构,我不希望它完全匹配。
请记住,接下来的事情就是遍历文件夹,您已经在问题中自己做了。
function recursiveDirectoryIterator($path)
{
$indexContent = [];
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path)) as $file) {
if ($file->isDir() && preg_match('/(=[0-9]=)/', $file->getPath())) {
if (file_exists($file->getPath().'/index.html')) {
$indexContent[$file->getPath()] = file_get_contents($file->getPath().'/index.html');
}
}
}
return $indexContent;
}
var_dump(recursiveDirectoryIterator('../SomeFolderName'));
这在本地给了我
array(2) {
["../SomeFolderName/Script/ESXI_6.7GSG_PUB=9=Validator (things)=en-us"]=>
string(7) "index 1"
["../SomeFolderName/Script/ESXI_6.9GSG_PUB=9=Validator (things)=en-us"]=>
string(7) "index 2"
}
您还将注意到,我使用的是非常简单的正则表达式/(=[0-9]=)/
。它将仅查找等号,数字后跟等号。
我不希望这是一个完整的解决方案,但我希望它能使您走上正确的轨道。