zoukankan      html  css  js  c++  java
  • php glob()函数实现目录文件遍历与寻找与模式匹配的文件路径

    采用PHP函数glob实现寻找与模式匹配的文件路径,主要讨论glob()函数的作用和用法,利用glob函数读取目录比其它的要快N倍,因为glob函数是内置函数处理起来自然要快。

    一,函数原型

    array glob ( string pattern [, int flags] )

    注意:glob()函数获取的是一个数组,其返回一个包含有匹配文件/目录的数组。如果出错返回FALSE

    二,版本兼容

    PHP 4 >= 4.3.0, PHP 5

    三,函数的基础用法与实例

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

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

    2,实现兼容大小写匹配

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

    类似如下

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

    3,获取目录下的所有子目录

    <?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; 
    } 
    ?>

    4,匹配所有文件

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

    四,注意事项

    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手册。

    其它参考:

    例子 1

    <?php
    print_r(glob("*.txt"));
    ?>

    输出类似:

    Array
    (
    [0] => target.txt
    [1] => source.txt
    [2] => test.txt
    [3] => test2.txt
    )

    例子 2

    <?php
    print_r(glob("*.*"));
    ?>

    输出类似:

    Array
    (
    [0] => contacts.csv
    [1] => default.php
    [2] => target.txt
    [3] => source.txt
    [4] => tem1.tmp
    [5] => test.htm
    [6] => test.ini
    [7] => test.php
    [8] => test.txt
    [9] => test2.txt
    )
    
  • 相关阅读:
    Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警
    Prometheus 入门教程(一):Prometheus 快速入门
    Prometheus 系列开篇:为什么要学 Prometheus ?
    你总是遗憾,是因为你还没想好,你的一生想怎么过!
    搞 Java 的年薪 40W 是什么水平?
    闪送,为何能从顺丰中杀出一条血路?
    安全攻击溯源思路及案例
    Windows下登录凭证窃取技巧
    Linux下登录凭证窃取技巧
    如何探测内网存活主机
  • 原文地址:https://www.cnblogs.com/52php/p/5665447.html
Copyright © 2011-2022 走看看