PHP glob 函数
最后修改于 2025 年 4 月 3 日
PHP 的 glob
函数用于搜索匹配特定模式的文件。它类似于 shell 风格的通配符,但可以在不同平台之间工作。
基本定义
glob
函数返回一个与指定模式匹配的文件名数组。它接受两个参数:模式字符串和可选的标志。
语法:glob(string $pattern, int $flags = 0): array|false
。该函数在失败时返回 false,或返回匹配的文件/目录数组。
基本的 glob 示例
这展示了 glob
最简单的用法,用于查找 PHP 文件。
<?php declare(strict_types=1); $files = glob("*.php"); foreach ($files as $file) { echo $file . "\n"; }
这会在当前目录中查找所有 PHP 文件。模式使用通配符 *,它可以匹配任何字符。每个文件名都打印在新的一行上。
递归目录搜索
使用 GLOB_BRACE 标志可以进行更复杂的模式匹配。
<?php declare(strict_types=1); $files = glob("{*.php,*.txt}", GLOB_BRACE); foreach ($files as $file) { echo $file . "\n"; }
这可以在一次操作中查找 PHP 和文本文件。大括号 {} 创建了一组要匹配的模式。GLOB_BRACE 启用了此扩展语法。
目录列表
glob
可以使用 GLOB_ONLYDIR 标志列出目录。
<?php declare(strict_types=1); $dirs = glob("*", GLOB_ONLYDIR); foreach ($dirs as $dir) { echo $dir . "\n"; }
这会列出当前文件夹中的所有目录。* 模式匹配任何名称,但 GLOB_ONLYDIR 仅过滤目录。每个目录名称都会被输出。
不区分大小写的搜索
GLOB_NOCASE 标志使模式匹配不区分大小写。
<?php declare(strict_types=1); $files = glob("*.{PHP,Php,pHp}", GLOB_BRACE | GLOB_NOCASE); foreach ($files as $file) { echo $file . "\n"; }
这会查找所有 PHP 文件,无论其扩展名的大小写如何。标志与 | 运算符组合使用。可以处理模式变体和大小写。
绝对路径搜索
glob
可以使用绝对路径进行搜索并返回完整路径。
<?php declare(strict_types=1); $files = glob("/var/www/html/images/*.jpg"); foreach ($files as $file) { echo $file . "\n"; }
这会在指定的绝对目录中搜索 JPG 文件。返回的数组包含每个匹配文件的完整路径。这对于精确的位置很有用。
边缘情况
glob
有一些值得注意的特殊行为。
<?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。隐藏文件(以 . 开头)需要显式模式才能匹配。
最佳实践
- 错误处理:检查返回值是否为 false 以处理错误。
- 性能:在大型目录中避免使用过于宽泛的模式。
- 安全:在使用用户输入时验证模式。
- 可移植性:注意文件系统的区分大小写问题。
- 内存:大量结果集可能会占用大量内存。
来源
本教程介绍了 PHP 的 glob
函数,并通过实际示例展示了其模式匹配功能。
作者
列出 所有 PHP 文件系统函数。