`
天梯梦
  • 浏览: 13730050 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

PHP搜索文件夹里面的文件 Using PHP's glob() function to find files in a directory

 
阅读更多

Example directory

The examples below look at a directory with the following, the same example directory as used in the read through directory post:

bar.txt       A regular file
baz           A directory
foo.txt       A regular file
link2foo.txt  A symbolic link to foo.txt

Simple example

To find all the files in the directory /path/to/directory with a .txt file extension, you can do this:

$files = glob("/path/to/directory/*.txt");

The $files array contains the following from the example directory:

Array
(
    [0] => /path/to/directory/bar.txt
    [1] => /path/to/directory/foo.txt
    [2] => /path/to/directory/link2foo.txt
)

If no files matched the pattern then the array will be empty.

Example using braces

There are flags which can be passed as a second optional parameter. One of these is GLOB_BRACE which means that e.g. {jpg,gif,png} will be expanded to match jpg, gif and png which can be useful if you need to look for a particular set of files by their extension, in this example for image files.

If the example directory also had the files 1.jpg, 2.gif and 3.png then you can do this to get glob to return just the image files:

$files = glob("/path/to/directory/*.{jpg,gif,png}", GLOB_BRACE);

print_r($files) would echo:

Array
(
    [0] => /path/to/directory/1.jpg
    [1] => /path/to/directory/2.gif
    [2] => /path/to/directory/3.png
)

定义和用法

glob() 函数返回匹配指定模式的文件名或目录。

该函数返回一个包含有匹配文件 / 目录的数组。如果出错返回 false。

 

语法

glob(pattern,flags)

参数 描述
file 必需。规定检索模式。
size

可选。规定特殊的设定。

  • GLOB_MARK - 在每个返回的项目中加一个斜线
  • GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
  • GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
  • GLOB_NOESCAPE - 反斜线不转义元字符
  • GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
  • GLOB_ONLYDIR - 仅返回与模式匹配的目录项
  • GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误

注释:GLOB_ERR 是 PHP 5.1 添加的。

利用参数GLOB_BRACE可以进行搜索,实例:

<?php
foreach (glob("*.txt") as $filename) {
    echo "$filename size " . filesize($filename) . " ";
}
?>

 

 

获取目录下的所有子目录

<?php
function listdirs($dir) {
   static $alldirs = array();
   $dirs = glob($dir . '/*', GLOB_ONLYDIR);
   if (count($dirs) > 0) {
       foreach ($dirs as $d) $alldirs[] = $d;
   }
   foreach ($dirs as $dir) listdirs($dir);
   return $alldirs;
}
?>

 

 

匹配所有文件

<?php
$files = glob('{,.}*', GLOB_BRACE);
?>

 

 

实现兼容大小写匹配

<?php
$pattern = sql_case("*.pdf");
var_dump(glob($pattern));
?>

 

 

类似如下

<?php
foreach (array_merge(glob("*.pdf"),glob("*.PDF")) as $filename) {
     echo "$filename n";
}
?>

 

 

匹配目录下.txt后缀的文件

<?php
foreach (glob("*.txt") as $filename) {
    echo $filename;
}
?>

 

 

 

注意事项


1,不能作用于远程文件,被检查的文件必须通过服务器的文件系统访问。


2,使用 glob("[myfolder]/*.txt")将不能匹配,解决方法为 glob("[myfolder]/*.txt"),注意[]字符应用。


3,其次是第二个参数flags有效标记说明
(1)GLOB_MARK - 在每个返回的项目中加一个斜线
(2)GLOB_NOSORT - 按照文件在目录中出现的原始顺序返回(不排序)
(3)GLOB_NOCHECK - 如果没有文件匹配则返回用于搜索的模式
(4)GLOB_NOESCAPE - 反斜线不转义元字符
(5)GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
(6)GLOB_ONLYDIR - 仅返回与模式匹配的目录项 注意: 在 PHP 4.3.3 版本之前 GLOB_ONLYDIR 在 Windows 或者其它不使用 GNU C 库的系统上不可用。
(7)GLOB_ERR - 停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误 注意: GLOB_ERR 是 PHP 5.1 添加的。

glob()函数的典型应用是读取数据表文件,如获取某个目录下的.sql后缀文件,这种在单元测试中非常实用,可实现读取sql文件重建数据库等,具体请参与PHP手册,请关注下一期PHP内置函数研究系列

 

What's in a pattern?

Most people who have already encountered glob know to make use of the * metacharacter to match some characters, and those digging a little deeper often discover that discrete alternatives can be globbed with braces (e.g. image.{gif,jpg,png}). However, there are more special characters and sequences that can be used to be more (or less, if we want) specific about what to find.

Aside: please do not make the mistake of thinking that glob patterns are regular expressions, they're just not. If you do want to use regular expressions to find paths/files then you are invited to use SPL's RegexIterator, which allows filtering of an Iterator based on a PCRE regex, in conjunction with a DirectoryIterator or FilesystemIterator (there are recursive flavours of the Regex- and DirectoryIterator if you need to delve into folders). For those SPL-ly inclined, also note the [GlobIterator][globitertor] which combines the goodness of globbing with iteration. If that made entirely no sense, please read on! Globs are much less verbose.

So, here are the special doohickeys (technical term!) that we can use with glob:

* (an asterisk)
Matches zero of more characters.
?
Matches exactly any one character.
[...]
Matches one character from a group. A group can be a list of characters, e.g. [afkp], or a range of characters, e.g. [a-g] which is the same as [abcdefg].
[!...]
Matches any single character not in the group. [!a-zA-Z0-9] matches any character that is not alphanumeric.
\
Escapes the next character. For special characters, this causes them to not be treated as special. For example, \[ matches a literal[. If flags includes GLOB_NOESCAPE, this quoting is disabled and \ is handled as a simple character.

 

Globbingly good glob examples

Here are a few examples of what globs might look like alongside a brief description of the intended behaviour: if you have any suggestions please do make them in the comments as I'm running short on inspiration!

pattern description
*.txt Get directory contents which have the extension of.txt(Note: a file could be named simply.txt!).
?? Get directory contents with names _exactly_ two characters in length.
??* Get directory contents with names _at least_ two characters in length.
g?* Get directory contents with names at least two characters in length and starting with the letterg
*.{jpg,gif,png} Get directory contents with an extension of.jpg,.gifor.png. Remember to use the GLOB_BRACE flag.
DN?????.dat Get directory contents which start with the lettersDN, followed by five characters, with an extension of.dat.
DN[0-9][0-9][0-9][0-9][0-9].dat Get directory contents which start with the lettersDN, followed by five _digits_, with an extension of.dat.
[!aeiou]* Get directory contents which do not start with a vowel letter.
[!a-d]* Get directory contents which do not start witha,b,cord.
*\[[0-9]\].* Get directory contents whose basename ends with a single digit enclosed in square braces. If GLOB_NOESCAPE is used, a single digit enclosed in\[and\]which would be a pretty weird name.
subdir/img*/th_?* Get directory contents whose name starts withth_(with at least one character after that) within directories whose names start withimgin thesubdirdirectory.

Well there we go, I've said what I came here to say so all that remains to be done is give some link love to those two recent articles that prompted me to dust off this draft and click the "publish" button.

 

 

原文/转自:PHP搜索文件夹里面的文件 Using PHP's glob() function to find files in a directory

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    查询文件夹下的匹配文件名称

    在IT领域,尤其是在进行文件管理和自动化任务时,查询文件夹下的匹配文件名称是一项基础且重要的操作。这通常涉及到操作系统提供的文件系统接口或者编程语言中的文件处理模块。下面将详细讲解这个知识点。 首先,...

    PHP使用glob函数遍历目录或文件夹的方法

    在PHP编程中,遍历目录或文件夹是常见的任务,用于读取文件列表或执行特定操作。本篇文章将深入探讨如何使用PHP中的`glob`函数来实现这一目标,并与传统的`opendir`和`readdir`函数进行对比。 `glob`函数是PHP提供...

    PHP使用glob方法遍历文件夹下所有文件的实例

    // 使用glob搜索.php文件 print_r($result); // 打印结果 ``` 这段代码首先获取当前文件所在目录,然后通过`glob`函数查找该目录下所有`.php`文件,并将结果存储在数组`$result`中。最后,使用`print_r`打印出结果...

    matlab开发-findFiles

    在MATLAB中,`findFiles`函数是一种非常实用的工具,用于在指定的目录及其子目录下搜索符合特定条件的文件。这个函数可以帮助用户高效地定位到含有特定字符串或者不含有特定字符串的文件,这对于数据处理、代码组织...

    获取文件夹中特定类型的文件,如只获取文件夹中的.jpg文件等

    在这个例子中,`find_images_in_folder`函数接受一个文件夹路径和一个文件扩展名作为参数。它首先检查路径是否指向一个有效的文件夹,然后使用`glob.glob`来寻找所有与给定扩展名匹配的文件。匹配到的文件路径会被...

    获取文件夹里所有图片

    在IT领域,获取文件夹中的特定类型文件,如图片,是一项常见的任务,尤其在处理大量数据或构建多媒体应用时。这个任务可以通过编程语言中的文件系统操作来实现,例如Python、Java、C#等。以下是一个关于如何在Python...

    统计文件夹下文件行数

    在IT领域,统计文件夹下特定类型文件的行数是一项常见的任务,特别是在代码管理、日志分析和数据处理中。这个任务可以通过编程实现,通常使用脚本语言如Python或批处理脚本来自动化执行。以下是对这个主题的详细阐述...

    globs-to-files:将多个 glob 扩展为绝对文件路径

    全局到文件 将多个 glob 扩展为绝对文件路径安装 $ npm install --save globs-to-files用法 var deglob = require ( 'globs-to-files' )deglob ( [ 'test/**/*.js' , 'src/*.js' ] , null , function ( err , files ...

    php删除上传的图片及文件夹

    首先使用`glob()`函数获取文件夹下的所有文件和子目录,然后分别进行处理。如果是目录,则再次调用`deleteFolder()`函数递归删除;如果是文件,则直接使用`unlink()`函数删除。最后,当目录为空时,使用`rmdir()`...

    获取文件夹下文件列表,批量图片格式转换

    directory = 'path_to_your_directory' # 替换为实际文件夹路径 files = get_file_list(directory) for file in files: print(file) ``` 接下来,我们将介绍如何批量转换图片格式。Python有许多库可以处理图像,如...

    python glob模块学习

    print(glob.glob(r'E:\Picture\*/*.jpg')) # 获取E盘下Picture文件夹内所有子文件夹中的.jpg文件 print(glob.glob(r'../*.py')) # 获取上级目录中的所有.py文件 ``` ##### 2. `glob.iglob(pathname, recursive=...

    根据关键字搜索文件夹

    "根据关键字搜索文件夹"是一个实用的工具,它能够帮助用户快速定位到包含特定关键字的文件,提高工作效率。这个小程序的功能是将指定的字符串添加到匹配文件的开头,进一步增强搜索结果的识别度。 首先,我们需要...

    php实现在线打包单个文件或者打包文件夹供下载使用

    可以使用`scandir()`或`glob()`函数获取文件夹内容,然后对每个文件调用`addFile()`。 6. **设置压缩级别**:`setCompressionLevel()`方法可以调整压缩级别,范围从0(无压缩)到9(最高压缩级别)。 7. **关闭ZIP...

    Globin-like蛋白质折叠类型识别

    ### Globin-like蛋白质折叠类型识别的关键知识点 #### 1. 蛋白质折叠类型识别的重要性 蛋白质折叠类型识别是蛋白质结构研究中的一个重要分支。它不仅对于理解蛋白质的空间结构与其功能之间的关系至关重要,而且对于...

    python读取某一类型文件内容

    read_files_of_types('path/to/directory', 'txt', 'csv') ``` 需要注意的是,上述代码假设文件内容可以完全加载到内存中。如果文件非常大,你可能需要使用逐行读取的方法,例如: ```python with open(file, 'r',...

    打印当前文件夹下指定类型文件到文本文件

    标题"打印当前文件夹下指定类型文件到文本文件"描述的就是这样一个功能,它允许用户便捷地将一个目录下符合特定条件(比如扩展名)的文件信息导出为文本格式。接下来,我们将深入探讨如何实现这一功能,并涉及相关的...

    PHP计算指定文件夹的信息的函数类

    $dirInfo = new DirectoryInfo('/path/to/directory'); echo "文件数量: " . $dirInfo-&gt;countFiles() . "\n"; echo "目录大小: " . $dirInfo-&gt;formatSize($dirInfo-&gt;getDirectorySize()) . "\n"; $dirInfo-&gt;...

    python查找指定文件夹下所有文件并按修改时间倒序排列的方法

    在处理计算机文件和数据管理的任务中,经常需要对文件系统中的文件进行搜索和排序。Python作为一种高级编程语言,提供了丰富的库和工具来处理文件系统。接下来,我将详细介绍如何使用Python查找指定文件夹下所有文件...

Global site tag (gtag.js) - Google Analytics