PHP中遍历目录的简单的方法,PHP文件搜索程序代

2019-08-03 14:26 来源:未知

PHP中有过多的函数,大家比较少听别人讲,可是却有很实用的职能,举个例子:glob()。许几人企盼轻松的遍历目录,假如精晓了那么些函数,必将一举两得。

今天要做二个专门用来拍卖寻觅文件的效果与利益,而追寻的文件可能是位于有些目录下的,寻找目录下是还是不是存在该目录,PHP函数个中好像一向不特别那样的检索函数。

php文件夹操作函数

Glob从PHP4就被含有在根本中了,不是三个新的函数,但就如checkdnsrr()同样,非常少有人知晓这么些函数。上边我们就看看这么些什么运用那个函数遍历三个目录。
代码

文件的操作在 php 中是不足缺点和失误的,而文件的选拔成效也是至相当高的,比如大家常见的目录管理种类,无数据库留言本等,都用到了文件的操作,而那边的文书指的不光是目录的操作,还大概有钦命文件的操作,比方txt 文件等。

string basename ( string path [, string suffix] )
交给一个涵盖有针对叁个文件的全路线的字符串,本函数再次来到基本的文件名。假诺文件名是以 suffix 停止的,那这一有的也会被去掉。
在 Windows 中,斜线(/)和反斜线()都可以作为目录分隔符。在其他情况下是斜线(/)。

foreach(glob('dir/*.php') as $filename)
{
    echo 'Filename: ' . $filename . '<br />';
}

下边是三个特意用来文书搜索的函数方法,file_search 是办法名,前面有多个参数,$directory 是要索求的文件所在的目录,比方“admin/”目录下, $search 是寻觅的文书了,$recursive 是推断是或不是搜索成功的,暗中同意即可了,假若还亟需任何操作,能够在后边进行加多相应参数就可以。

string dirname ( string path )

Glob帮忙七个参数,当中首个是可选的。 上面的代码将回来dir目录下的恢宏名字为php的具备文件。

例1

付出一个富含有针对一个文书的全路线的字符串,本函数再次回到去掉文件名后的目录名。
在 Windows 中,斜线(/)和反斜线()都足以视作目录分隔符。在别的意况下是斜线(/)。

可选参数

 代码如下

array pathinfo ( string path [, int options] )

能够用第三个参数。达到区别的指标。比如上边的代码再次来到dir目录下的二种档期的顺序的公文

<?php

pathinfo() 重临四个一起数组满含有 path 的音讯。满含以下的数组单元:dirname,basename 和 extension。
能够由此参数 options 钦命要回去哪些单元。它们包罗:PATHINFO_DIRNAME,PATHINFO_BASENAME 和 PATHINFO_EXTENSION。暗中同意是回去全体的单元。

$aFiles = glob('{dir/*.jpg,myDirectory/*.gif}', GLOB_BRACE);

function file_search($directory, $search, $recursive = TRUE)
{
$res = FALSE;
$dir_handle = opendir($directory);
while( FALSE !== ($file = readdir($dir_handle)) )
{
if( $file == '.' || $file == '..' )
{
continue;
}
if( is_dir("$directory$file") )
{
if( $recursive )
{
$res = file_search("$directory$file", $search);
if( $res !== FALSE )
{
return $res;
}
}
}
if( $file == $search )
{
return "$directory$file";
}
}
return FALSE;
}
?>

string realpath ( string path )

GLOB_BRACE告诉glob(),笔者用了大括号扩起了二种差异的文本扩大名。

例2

realpath() 扩充全数的标志连接而且管理输入的 path 中的 ‘/./', ‘/../' 以及多余的 ‘/' 并回到标准化后的相对化路线名。再次回到的路径中尚无标志连接,'/./' 或 ‘/../' 成分。
realpath() 退步时再次回到 FALSE,举例说文件不设有的话。在 BSD 系统上,就算独有是 path 一纸空文的话,PHP 并不会像别的系统那样重回 FALSE。

PHP定义了如下的常量,能够当做第二个参数

 代码如下

bool is_dir ( string filename )

GLOB_MATiggoK - 在各类重临的结果中间价格斜线
GLOB_NOSORT - 不排序重回文件(按他们现身的依次)
GLOB_NOCHECK -要是没找到文件,就赶回搜索形式(举例地点的{dir/*.jpg,myDirectory/*.gif})
GLOB_NOESCAPE - 不转意,即反斜线不作为转意字符使用
GLOB_BRACE - 用大括号括起来的追寻方式
GLOB_ONLYDIENCORE - 只回去符合查找条件的目录名
GLOB_E中华VHighlander -碰着错误自动甘休,(私下认可是一连搜寻)

<?php
/*文本查找函数
用法:
findfile (目录,是还是不是遍历子目录,是或不是查找文件内容,不查找的目录) ;
Ketle
2005-07-07
*/
function findfile ($dir, $find_sub_dir=false, $find_content=false, $except_dir=false)
{
       
        $d = dir($dir);
        while (false !== ($entry = $d->read())) {
                if($entry == "." || $entry == ".." || in_array ($entry, $except_dir))
                        continue;
                $file = $d->path."/".$entry;
                if ( is_dir ( $file) )
                {
                        if ( $find_sub_dir )
                        {                               
                                findfile ($file, $find_sub_dir, $find_content, $except_dir) ;
                        }
                       
                }else
                {
                        if ( $find_content )
                        {                               
                                if ( strstr(file_get_contents($file),$find_content) )
                                {
                                        echo $file."<br>n";
                                }
                        }else
                        {
                                echo $file."<br>n";
                        }
                               
                }   
        }
        $d->close();

如若文件名存在而且为目录则赶回 TRUE。假如 filename 是一个相对路线,则根据当前职业目录检查其相对路线。
注: 本函数的结果会被缓存。越来越多新闻参见 clearstatcache()。

       
}

resource opendir ( string path [, resource context] )

//test:
findfile ('..',true,'芙蓉jj',array('templates_c','admin','xixi')) ;
?>

开荒贰个目录句柄,可用于之后的 closedir(),readdir() 和 rewinddir() 调用中。

例3

string readdir ( resource dir_handle )

选用php glob函数查找文件,遍历文件目录

回去目录中下三个文件的文本名。文件名以在文件系统中的排序重返。

函数表达:array glob ( string $pattern [, int $flags ] )
成效:搜索与方式相称的文书路线,再次回到满含相称文件(目录)的数组(注:被检查的公文必须是服务器系统的,不能够用来远程文件)
参数表达:第一个参数:相配方式;第1个可选参数:

void closedir ( resource dir_handle )

•GLOB_MATucsonK - 在种种重返的门类中加一个斜线
•GLOB_NOSORT - 根据文件在目录中冒出的原有顺序重回(不排序)
•GLOB_NOCHECK - 若无公文相配则赶回用于寻觅的情势
•GLOB_NOESCAPE - 反斜线不转义元字符
•GLOB_BRACE - 扩充 {a,b,c} 来匹配 'a','b' 或 'c'
•GLOB_ONLYDI福睿斯 - 仅重回与形式相称的目录项 

关闭由 dir_handle 钦定的目录流。流必须事先被 opendir() 所张开。

 代码如下

void rewinddir ( resource dir_handle )

$file = glob('{,.}*', GLOB_BRACE); //相称全体文件
$file1 = glob('*.php');  //相配全数php文件
print_r($file1);

将 dir_handle 钦命的目录流重新初始化到目录的启幕。

例4

array glob ( string pattern [, int flags] )

 代码如下

glob() 函数依据 libc glob() 函数使用的条条框框寻觅具备与 pattern 相称的文本路径,类似于一般 shells 所用的法则平等。不举办缩写扩大或参数代替。
回来四个带有有非凡文件/目录的数组。借使出错重返 FALSE。

<?php

使得标志为:
GLOB_MAXC90K - 在种种再次来到的花色中加四个斜线
GLOB_NOSORT - 根据文件在目录中出现的本来顺序再次来到(不排序)
GLOB_NOCHECK - 若无公文相配则赶回用于寻找的格局
GLOB_NOESCAPE - 反斜线不转义元字符
GLOB_BRACE - 扩充 {a,b,c} 来匹配 ‘a','b' 或 ‘c'
GLOB_ONLYDI大切诺基 - 仅再次回到与形式相配的目录项

print_r(listDir('./')); //遍历当前目录
function listDir($dir){
    $dir .= substr($dir, -1) == '/' ? '' : '/';
    $dirInfo = array();
    foreach (glob($dir.'*') as $v) {
        $dirInfo[] = $v;
        if(is_dir($v)){
            $dirInfo = array_merge($dirInfo, listDir($v));
        }
    }
    return $dirInfo;
}

注: 在 PHP 4.3.3 版本在此之前 GLOB_ONLYDI翼虎 在 Windows 可能别的不应用 GNU C 库的体系上不可用。
GLOB_E锐界CR-V - 甘休并读取错误音讯(比方说不可读的目录),默许的状态下忽略全数错误
注: GLOB_ERR 是 PHP 5.1 添加的。

php文件目录操作

新建文件
1、先分明要写入文件的内容
$content = '你好';
2、张开那几个文件(系统会自动创立那些空文件)
//倘使新建的文书叫file.txt,並且在上头目录下。w表示‘写文件',$fp上边要选拔,表示针对某些展开的公文。
$fp = fopen('../file.txt', 'w');
3、将内容字符串写入文件
//$fp告诉系统要写入的文书,写入的剧情是$content
fwrite($fp, $content);
4、关闭文件
fclose($fp);
证实:PHP5中提供了更有益的函数file_put_www.weide1946.com,contents,上边的4步能够这么产生:
$content = '你好';
file_put_contents('file.txt',$content);

剔除文件
//删除当前目录下的arch目录下的文书abc.txt
unlink('arch/abc.txt');
表达:系统会重返操作结果,成功则赶回 TRUE,失利则赶回 FALSE,能够用变量接收,就精晓是还是不是删除成功:
$deleteResult = unlink('arch/abc.txt');

获取文件内容
//借使获取的目的文件名是file.txt,并且在上级目录下。获取的源委放入$content。
$content = file_get_contents('../file.txt');

修改文件内容
操作方法与新建内容基本雷同

重命名文件或目录
//将当前目录下的子目录a下边包车型客车文本1.gif重命名字为2.gif。
rename('/a/1.gif', '/a/2.gif');
评释:对目录也一样。系统会回去操作结果,成功则赶回 TRUE,败北则赶回 FALSE,能够用变量接收,就领悟是还是不是重命名成功。
$renameResult = rename('/a/1.gif', '/a/2.gif');
假定要活动文件或目录,只要将重命名后的门道设置为新的路径就足以了:
//将当前目录下的子目录a上边包车型大巴文件1.gif,移动到当前目录下的子目录b,何况重命名称叫2.gif。
rename('/a/1.gif', '/b/2.gif');
只是要留意,假若目录b空中楼阁,就能够活动失利。

复制文件
//将当前目录下的子目录a下边包车型客车文书1.gif,复制到当前目录下的子目录b,并取名字为2.gif。
copy('/a/1.gif', '/b/1.gif');
表明:不可能对目录实行此项操作。
比方指标文件(上边的/b/1.gif)已经存在,原本的文书将被遮掩。
系统会回来操作结果,成功则赶回 TRUE,战败则赶回 FALSE,能够用变量接收,就精通是还是不是复制作而成功。
$copyResult = copy('/a/1.gif', '/b/1.gif');

挪动文件或目录
操作方法和重命名同样

文件或目录是不是留存
//检查上级目录下的公文logo.jpg是不是留存。
$existResult = file_exists('../logo.jpg');
注解:如若文件存在系统重临true,不然重返false。能够对目录实行同样的操作。

获取文件大小
//获取上级目录下的文书logo.png的尺寸。
$size = filesize('../logo.png');
申明:系统会重返贰个数字,表示文件的高低是不怎么字节(bytes)。

新建目录
//在当前目录下的目录a上面新建目录b。
mkdir('/a/b');
注脚:系统会重临操作结果,成功则赶回 TRUE,失败则赶回 FALSE,可以用变量接收,就驾驭是或不是新建成功:
$mkResult = mkdir('/a/b');

删除目录
//删除当前目录下的目录a上边包车型客车子目录b。
rmdir('/a/b');
注脚:只可以删除非空的目录,不然必须先删除目录下的子目录和文书,再删除总目录
系统会回去操作结果,成功则赶回 TRUE,战败则赶回 FALSE,可以用变量接收,就通晓是或不是删除成功:
$deleteResult = rmdir('/a/b');

获得目录中的全部文件名
1、先张开要操作的目录,并用多少个变量指向它
//展开当前目录下的目录pic下的子目录common。
$handler = opendir('pic/common');
2、循环的读取目录下的享有文件
/*里头$filename = readdir($handler)是历次循环的时候将读取的文件名赋值给$filename,为了不陷于死循环,所以还要让$filename !== false。必须要用!==,因为一旦某些文件名假诺叫'0',或许有个别被系统以为是意味false,用!=就能够停下循环*/
while( ($filename = readdir($handler)) !== false )  {
      3、目录下都会有多个文件,名称叫'.'和‘..',不要对他们举行操作
      if($filename != "." && $filename != "..") {
      4、举行拍卖
      //这里大致的用echo来输出文件名
      echo $filename;
      }
}
5、关闭目录
closedir($handler);

对象是还是不是是目录
//检查上级目录下的靶子对象logo.jpg是或不是是目录。
$checkResult = is_dir('../logo.jpg');
表明:固然目的对象是目录系统重临true,不然重临false。下面例子的$checkResult当然是false。

指标是或不是是文件
//检查上级目录下的对象对象logo.jpg是或不是是文件。
$checkResult = is_file('../logo.jpg');
评释:如若目的对象是文件,系统再次来到true,不然重临false。上边例子的$checkResult当然是true。

您或许感兴趣的稿子:

  • PHP面试题之文件目录操作
  • PHP常用手艺文之文件操作和目录操作总计
  • php目录操作实例代码
  • PHP普通话件读、写、删的操作(PHP中对文本和目录操作)
  • php目录操作函数之获得目录与公事的品类
  • PHP 创制文件(文件夹)以及目录操作代码
  • PHP目录与公事操作工夫总括(成立,删除,遍历,读写,修改等)
  • PHP文件操作之取得目录下文件与计算相对路线的秘技
  • 第六章 php目录与公事操作
  • php中目录,文件操作详谈
  • PHP目录操作实例计算
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:PHP中遍历目录的简单的方法,PHP文件搜索程序代