如何使用 RecursiveIteratorIterator 忽略目录?

2023-12-20

我尝试了几种方法来忽略某些目录RecursiveIteratorIterator在文件系统上。

举个例子,我想忽略以下目录:/cache.

My Iterator看起来像这样:

//$dirname is root
$directory = new RecursiveDirectoryIterator($dirname);
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);

foreach ($mega as $fileinfo) {
 echo $fileinfo;
}

我已经能够使用忽略某些文件扩展名pathinfo例如这有效:

$filetypes = array("jpg", "png");
$filetype = pathinfo($fileinfo, PATHINFO_EXTENSION);

foreach ($mega as $fileinfo) {
    if (!in_array(strtolower($filetype), $filetypes)) {
    echo $fileinfo;
    }
}

当我尝试使用PATHINFO_DIRNAME(在数组中具有适当的目录路径)它不起作用,没有错误,它只是不忽略目录。

我也尝试过使用FilterIterator无济于事,现在我想也许我应该使用RegexIterator.

使用忽略目录的最简单和最有效的方法是什么RecursiveIteratorIterator ?


实验没有成功。 使用PATHINFO_DIRNAME

$dirignore = array("cache", "cache2");
$directory = new RecursiveDirectoryIterator($dirname);
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
$dirtype = pathinfo($fileinfo, PATHINFO_DIRNAME); 

if (!in_array($dirtype), $dirignore)) {
echo $fileinfo;  //no worky still echo directories
}

Using FilterIterator(不知道这是如何工作的)

class DirFilter extends FilterIterator
{
    public function accept()
    {
        //return parent::current() != "..\cache\";

       $file = $this->getInnerIterator()->current();
       if ($file != "..\cache")
       return $file->getFilename();

      //also tried with same error as below
      //return !preg_match('/\cache', $file->getFilename());
    }
}

$directory= new RecursiveDirectoryIterator($dirname);
$directory = new DirFilter($directory); 
$mega = new RecursiveIteratorIterator($directory, RecursiveIteratorIterator::SELF_FIRST);
// loop

这导致Error: An instance of RecursiveIterator or IteratorAggregate creating it is required


Your DirFilter想要延长RecursiveFilterIterator,因为它与递归迭代器一起使用。不这样做是您错误的原因。

class DirFilter extends RecursiveFilterIterator
{
    // …
}

下一步是弄清楚如何使用accept()适当地。它应该返回一个true or falsevalue,它指示是否应包含当前项目(true) 或排除 (false)来自迭代。返回文件名来自accept()这不是你想做的事。

class DirFilter extends RecursiveFilterIterator
{
    public function accept()
    {
        $excludes = array("cache", "cache2");
        return !($this->isDir() && in_array($this->getFilename(), $excludes));
    }
}

能够传入排除目录的数组可能会很好。这需要更多的代码,但可重用性更高。

class DirFilter extends RecursiveFilterIterator
{
    protected $exclude;
    public function __construct($iterator, array $exclude)
    {
        parent::__construct($iterator);
        $this->exclude = $exclude;
    }
    public function accept()
    {
        return !($this->isDir() && in_array($this->getFilename(), $this->exclude));
    }
    public function getChildren()
    {
        return new DirFilter($this->getInnerIterator()->getChildren(), $this->exclude);
    }
}

然后可以像这样使用该代码:

$directory = new RecursiveDirectoryIterator($dirname);
$filtered = new DirFilter($directory, $dirignore); 
$mega = new RecursiveIteratorIterator($filtered, …);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 RecursiveIteratorIterator 忽略目录? 的相关文章

  • 展平数组:保持索引、值等于数组中的位置

    我在尝试以特定方式展平数组时遇到了一些麻烦 这里有一个print r我想要展平的数组的视图 Array 1 gt Array 8 gt 1 9 gt 2 10 gt Array 15 gt Array 22 gt 1
  • 如何在 json 中输出 javascript 日期

    我正在尝试时间线图表 http code google com apis visualization documentation gallery annotatedtimeline html Data Format http code go
  • PHP 的password_verify() 是否可以抵御极长的密码(DoS 攻击)?

    一般攻击场景 2013 年 Django 存在一个普遍漏洞 攻击者可以通过非常大的密码创建极其密集的 CPU 计算 请参阅此处的安全通知 https www djangoproject com weblog 2013 sep 15 secu
  • 是否可以在 UML 中可视化一堆函数

    我正在改进一个使用类和函数文件 只是包含各种函数的 php 文件 的内容管理系统 例如 我有一堂课叫Admin以及一个功能文件 其功能包括显示管理员概述 创建新管理员 编辑现有管理员 删除管理员 函数文件使用类并执行 mvc 概念的可视化部
  • PHP-MySQLi 连接随机失败并显示“无法分配请求的地址”

    大约两周以来 我一直在处理 LAMP 堆栈中最奇怪的问题之一 长话短说 与 MySQL 服务器的随机连接失败并显示错误消息 Warning mysqli real connect HY000 2002 Cannot assign reque
  • PHP 读取使用 setcookie() 创建的 cookie

    来自manual https www php net setcookie 直到下一次加载 Cookie 应该可见的页面之前 Cookie 才会变得可见 这意味着创建的 cookiesetcookie将无法访问 COOKIE直到下一页加载 有
  • CakePHP Auth 组件使用 $this->Auth->login() 时未登录;

    我是 cakePHP 的新手 我已经阅读了他们的文档 并且正在遵循他们的简单身份验证示例 我还广泛搜索 包括本网站上的答案 来寻找我的问题的答案 我正在使用 cakePHP 2 0 我的 UsersController 的登录功能如下所示
  • PHP 删除字符最后一个实例之前的所有内容

    有没有办法删除某个字符之前的所有内容 包括最后一个实例 我有多个字符串 其中包含 gt e g the gt cat gt sat gt on gt the gt mat welcome gt home 我需要对字符串进行格式化 以便它们变
  • use 语句顺序会影响 PHP 中的功能吗?

    我使用 PHP 的命名空间已经有一段时间了 我认为它对我的编程来说是一个很好的补充 今天早上我想知道一些关于use陈述 我想知道顺序是否use影响我的 PHP 代码的功能 根据 PHP net 使用别名引用外部完全限定名称或导入的能力是命名
  • PHP 电子邮件验证[重复]

    这个问题在这里已经有答案了 For PHP最好的电子邮件验证方法是什么preg NOT ereg因为它是已弃用 删除 I don t需要检查该网站是否存在 这不像最高安全性 我找到了很多方法ereg但它们 显然 不是好的做法 我建议你使用F
  • 计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么?

    计算 PHP 字符串中特定字符的所有出现次数的最有效方法是什么 用这个 echo substr count abca a will echo 2
  • CryptoJS 使用密码加密 AES,但 PHP 解密需要密钥

    我在用CryptoJS https code google com p crypto js AES加密字符串 function doHash msg msg String msg var passphrase aggourakia var
  • 在另一个文件中扩展类的正确方法是什么?

    这就是我在 foo php 中的内容 class Foo public foo NULL public foo2 NULL public function setFoo foo foo2 this gt foo foo this gt fo
  • Apache 子进程已退出,状态为 255

    经过大量的搜索 尝试 修复 等待和哭泣 在我放弃之前 我想为这个错误抓住最后的机会 我们正在奔跑Microsoft Windows Server 2012 Apache 2 4 6 Win64 OpenSSL 1 0 1e PHP 5 5
  • 为什么Iterator接口没有add方法

    In IteratorSun 添加了remove 方法来删 除集合中最后访问的元素 为什么没有add方法来向集合中添加新元素 它可能对集合或迭代器产生什么样的副作用 好的 我们开始吧 设计常见问题解答中明确给出了答案 为什么不提供 Iter
  • 优雅地退出 Laravel 作用域

    我有一个范围 它根据用户角色以限制方式起作用 您可以将一组规则转发到限制数据库最终输出的范围 一个非常简化的角色限制示例 first name foo 只会返回其记录first name开始于foo 这实际上意味着我已禁止具有该角色的用户查
  • 错误 #520009 - 帐户受到限制

    我收到 520009 错误 帐户 电子邮件受保护 cdn cgi l email protection被限制 当尝试进行并行付款时 我的代码使用沙箱运行良好 但我切换到实时端点 它开始失败 有问题的帐户是有效的 PayPal 帐户 我使用的
  • 从检查元素隐藏 ''

    我有这个 HTML 和 PHP 联系表
  • 控制数据是否存在于数组中

    我在mysql中有两个不同的表 我正在使用curl从json文件中获取数据 我的第一个表名称是 tblclients 该表存储客户端数据 我的第二个表名称是 tblcustomfieldsvalues 该表使用 tblclients 表的
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • 使用 install4j 对 Linux 可执行文件进行代码签名

    我正在使用 Install4j 和 pfx 文件来为 Windows 安装程序 exe 提供数字签名 但我找不到任何方法为 Linux 安装程序 sh 提供数字签名 有什么方法可以使用 Install4j for linux 可执行文件来做
  • 如何使用javascript重置div中的滚动位置

    我正在开发移动混合应用程序 在我的 html 页面中 我有 3 个选项卡 单击选项卡时 可滚动 div 的内容会发生更改 我的问题是 当我向下滚动 div 视图 的内容并单击另一个选项卡时 内容消失 但内容在那里 请帮助我 以便我可以在单击
  • #!链接中的主题标签和感叹号作为文件夹?

    我怎样才能让我的页面像groveshark页面一样显示 http grooveshark com popular http grooveshark com popular有教程或其他东西知道如何通过 jQuery 或 JavaScript
  • 使 JList 值不可选择 [重复]

    这个问题在这里已经有答案了 我想知道如何修改JList这样单击任何值都不会执行任何操作 我看过其他问题 但没有一个有帮助 我通过使用以下类解决了这个问题 class DisabledItemSelectionModel extends De
  • Clojure 中的 = 和 ==

    在 REPL 上 如果我定义 def fits map vector take 10 iterate inc 0 然后打电话 2 nth fits 2 我变得虚假了 But 2 nth fits 2 返回真 这是预期的吗 我尝试了 clas
  • Android 蓝牙 java.io.IOException:连接被拒绝?

    我需要连接一个KwikBlue 2 模块开发套件 http www socketmobile com products embedded wireless communications kwikblue4 module 到安卓蓝牙聊天示例
  • 尝试向 Firestore 验证 Java 客户端时出现“凭据无法获取元数据”错误

    我把我的东西放在一起thought是你好世界火库Java 客户端身份验证 但它总是死掉 警告 您的应用程序已使用 Google Cloud SDK 中的最终用户凭据进行身份验证 我们建议大多数服务器应用程序使用服务帐户 如果您的应用程序继续
  • 插入 VARCHAR2 列时换行

    我有一个要求 我需要准备电子邮件数据 所以我填充将数据放入以 VARCHAR2 4000 作为定义的表列中 现在我想要的是 将其插入新行中任何我想要的位置 begin v email v email new line end 假设我正在一行
  • 使用jQuery控制视频标签

    因此 我想使用 jQuery 函数从链接的 REL 收集 URL 并将其传递给元素 收集 REL 并将其发送到 没有问题 但是从 jQuery 触发元素的加载和播放功能需要什么 这是我到目前为止所拥有的 function a compone
  • 如何在不换行的情况下执行“float: left”?

    我有一个容器box1具有一定的宽度 可能会根据其内容而变化 那个盒子里有box2它有固定的宽度 它可以是一个图标 旁边box2 我有box3带有一些文字 我希望文本使用右侧的所有可用空间box2 通过粘贴下面的 HTML 您将得到 到目前为
  • 替换先前 bash 命令中所有字符串的快捷方式

    man bash描述了一个非常有用的事件指示符 https www gnu org software bash manual bashref html Event Designators 字符串1 字符串2 快速替换 重复最后一个命令 将
  • 使用 HttpWebRequest 使用 multipart/form-data 发布数据/上传图像

    我正在尝试使用 ImageShack API 上传图像 要使用它 我应该POST图像使用multipart form data 我这样做就像 var postData var req HttpWebRequest Create http w
  • 错误:无法分配给引用或变量!角度 4 [重复]

    这个问题在这里已经有答案了 添加一些新的 html 代码后 我在 Angular 4 中遇到错误 之前表单工作正常 我尝试评论新代码 但它仍然不起作用 该怎么办 我研究了这个错误并尝试解决 但没有任何帮助 我也没有得到问题的确切位置 我的代
  • 在django中提交表单后重定向到索引页面

    除了添加产品数据后重定向回索引页面之外 一切正常 目前在我的数据保存后 它被重定向到127 0 0 1 8000 产品 add product add product 目前 当我的索引页面 add product html 加载时 我有一个
  • 后增量后 == 令人费解的行为[重复]

    这个问题在这里已经有答案了 有人在某个论坛帖子中假设 许多人甚至经验丰富的 Java 开发人员都无法理解下面的 Java 代码 Integer i1 127 Integer i2 127 System out println i1 i2 S
  • 在标准任务之前/之后自动运行自定义任务

    我经常想在运行其中一项标准任务之前进行一些自定义 我意识到我可以创建新任务 按照我想要的顺序执行现有任务 但我发现这很麻烦 而且开发人员错过他应该运行 my compile 而不是编译的机会很大 并导致难以修复错误 所以我想定义一个自定义任
  • EntityFramework Core 2.0 跳过加载专栏

    我使用 EF core 将一些文件保存到 MSSQL 数据库中 其结构如下 public class UploadedFile public int Id get set public string Source get set publi
  • 如何轻松地使用可能的幺半群并将值与自定义操作组合起来?

    基本上 我想做的手动定义是微不足道的 maybeCombine a gt a gt a gt Maybe a gt Maybe a gt Maybe a maybeCombine Nothing Nothing Nothing maybeC
  • vlcj:: 无法在 64 位操作系统中加载库“libvlc”

    我使用的是 64 位操作系统 Windows 7 并且我有 32 位 VLC 版本 1 1 8 我已经添加了这些库jna jar platform jar vlcj 1 1 5 1 jar 我无法使用 jVlc 进行流式传输 public
  • 如何使用 RecursiveIteratorIterator 忽略目录?

    我尝试了几种方法来忽略某些目录RecursiveIteratorIterator在文件系统上 举个例子 我想忽略以下目录 cache My Iterator看起来像这样 dirname is root directory new Recur