ZetCode

PHP glob 函数

最后修改于 2025 年 4 月 3 日

PHP 的 glob 函数用于搜索匹配特定模式的文件。它类似于 shell 风格的通配符,但可以在不同平台之间工作。

基本定义

glob 函数返回一个与指定模式匹配的文件名数组。它接受两个参数:模式字符串和可选的标志。

语法:glob(string $pattern, int $flags = 0): array|false。该函数在失败时返回 false,或返回匹配的文件/目录数组。

基本的 glob 示例

这展示了 glob 最简单的用法,用于查找 PHP 文件。

basic_glob.php
<?php

declare(strict_types=1);

$files = glob("*.php");

foreach ($files as $file) {
    echo $file . "\n";
}

这会在当前目录中查找所有 PHP 文件。模式使用通配符 *,它可以匹配任何字符。每个文件名都打印在新的一行上。

递归目录搜索

使用 GLOB_BRACE 标志可以进行更复杂的模式匹配。

recursive_glob.php
<?php

declare(strict_types=1);

$files = glob("{*.php,*.txt}", GLOB_BRACE);

foreach ($files as $file) {
    echo $file . "\n";
}

这可以在一次操作中查找 PHP 和文本文件。大括号 {} 创建了一组要匹配的模式。GLOB_BRACE 启用了此扩展语法。

目录列表

glob 可以使用 GLOB_ONLYDIR 标志列出目录。

directory_listing.php
<?php

declare(strict_types=1);

$dirs = glob("*", GLOB_ONLYDIR);

foreach ($dirs as $dir) {
    echo $dir . "\n";
}

这会列出当前文件夹中的所有目录。* 模式匹配任何名称,但 GLOB_ONLYDIR 仅过滤目录。每个目录名称都会被输出。

不区分大小写的搜索

GLOB_NOCASE 标志使模式匹配不区分大小写。

case_insensitive.php
<?php

declare(strict_types=1);

$files = glob("*.{PHP,Php,pHp}", GLOB_BRACE | GLOB_NOCASE);

foreach ($files as $file) {
    echo $file . "\n";
}

这会查找所有 PHP 文件,无论其扩展名的大小写如何。标志与 | 运算符组合使用。可以处理模式变体和大小写。

绝对路径搜索

glob 可以使用绝对路径进行搜索并返回完整路径。

absolute_path.php
<?php

declare(strict_types=1);

$files = glob("/var/www/html/images/*.jpg");

foreach ($files as $file) {
    echo $file . "\n";
}

这会在指定的绝对目录中搜索 JPG 文件。返回的数组包含每个匹配文件的完整路径。这对于精确的位置很有用。

边缘情况

glob 有一些值得注意的特殊行为。

edge_cases.php
<?php

declare(strict_types=1);

// No matches returns empty array
$empty = glob("nonexistent*");
var_dump($empty);

// Dot files require explicit pattern
$hidden = glob(".*");
var_dump($hidden);

当未找到匹配项时,glob 返回一个空数组,而不是 false。隐藏文件(以 . 开头)需要显式模式才能匹配。

最佳实践

来源

PHP glob 文档

本教程介绍了 PHP 的 glob 函数,并通过实际示例展示了其模式匹配功能。

作者

我的名字是 Jan Bodnar,我是一名热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出 所有 PHP 文件系统函数