当前位置: 首页> 最新文章列表> 如何使用 PHP glob 函数高效匹配不同的文件扩展名?

如何使用 PHP glob 函数高效匹配不同的文件扩展名?

gitbox 2025-08-26
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 本文示例代码,演示如何使用 PHP 的 glob 函数进行文件匹配</span></span><span>
</span><span><span class="hljs-comment">// glob 是一个用于查找符合模式的文件路径的函数,支持通配符</span></span><span>

</span><span><span class="hljs-comment">// 这里是文章内容的前置无关代码示例,模拟实际环境中代码结构</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">dummyFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"这段代码与文章主题无关,仅作示范"</span></span><span>;
}
</span><span><span class="hljs-title function_ invoke__">dummyFunction</span></span><span>();

</span><span><span class="hljs-meta">?></span></span><span>

<hr>

<h1>如何使用 PHP glob 函数高效匹配不同的文件扩展名?</h1>

<p>在 PHP 中,<code></span><span><span class="hljs-title function_ invoke__">glob</span></span><span>()

例如,匹配当前目录下所有 .txt 文件:

<span class="fun"></span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-string">"*.txt"</span></span><span>);</span>

2. 匹配多种扩展名的常见方法

方法一:使用多个 glob 调用合并结果

这是最直观的方法,分别调用多次 glob,然后合并数组:

</span><span><span class="hljs-variable">$extensions</span></span><span> = [</span><span><span class="hljs-string">'jpg'</span></span><span>, </span><span><span class="hljs-string">'png'</span></span><span>, </span><span><span class="hljs-string">'gif'</span></span><span>];
</span><span><span class="hljs-variable">$files</span></span><span> = [];
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$extensions</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$ext</span></span><span>) {
    </span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_merge</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-string">"*.<span class="hljs-subst">{$ext}</span></span></span><span>"));
}

缺点是要多次读取文件系统,效率稍低。

方法二:使用花括号模式(需要开启 GLOB_BRACE)

PHP 的 glob 支持类似 Bash 的花括号扩展,但需要 GLOB_BRACE 标志:

</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-string">"*.{jpg,png,gif}"</span></span><span>, GLOB_BRACE);

这样只需一次调用即可匹配多种扩展名,效率较高。

3. 注意事项

  • GLOB_BRACE 兼容性: 在某些系统(例如某些非 GNU 的环境)中,GLOB_BRACE 可能不被支持,需确认运行环境。
  • 大小写敏感: glob 匹配默认是大小写敏感,如果要匹配扩展名大小写多样,需要额外处理,如多写几种扩展名组合。

4. 结合示例代码

</span><span><span class="hljs-comment">// 使用 GLOB_BRACE 一次匹配多扩展名</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = </span><span><span class="hljs-title function_ invoke__">glob</span></span><span>(</span><span><span class="hljs-string">"*.{jpg,png,gif}"</span></span><span>, GLOB_BRACE);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"找到文件: "</span></span><span> . </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

总结

使用 glob() 的花括号扩展配合 GLOB_BRACE 标志,是 PHP 中高效匹配多种文件扩展名的简洁方案。在兼容性允许的情况下,推荐优先使用这一方法。否则可通过多次调用 glob() 并合并结果的方式实现类似功能。

希望本文能帮助你更好地利用 PHP glob 函数处理文件匹配任务!