PHP从所有子文件夹递归读取与模式匹配的文件

时间:2019-07-18 10:11:08

标签: javascript php

我的目录中有多个文件夹。

每个文件夹都有一个文件 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)只读那些文件

举个例子。

下面是文件夹结构。

enter image description here

我当前的脚本:

<?php
$it = new RecursiveDirectoryIterator("C:\Users\Sachin_S2\Desktop\Script");
foreach(new RecursiveIteratorIterator($it) as $file) {
    echo $file . "<br/> \n";

}

脚本输出:

enter image description here

基本上,我想阅读所有搜索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  等

1 个答案:

答案 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]=)/。它将仅查找等号,数字后跟等号。


我不希望这是一个完整的解决方案,但我希望它能使您走上正确的轨道。