PHP文件系统处理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP文件系统处理相关的知识,希望对你有一定的参考价值。

文件系统概述

文件类型
        php是以UNIX的文件系统为模型的,因此Windows系统中我们只能获得"file"、"dir"或者"unknown"三种文件类型。而UNIX系统中,可以获得"block"、"char"、"dir"、"fifo"、"file"、"link"和"unknown"7种类型。
技术分享
        使用filetype()函数获取文件的上述类型,该函数接受一个文件名作为参数,如果文件不存在将返回false。
        is_file()判断给定的文件名是否为一个正常的文件。
        is_dir()判断给定的文件名是否是一个目录。
        is_link()判断给定的文件名是否是一个符号链接。
文件的属性
 PHP的文件属性处理函数
技术分享
        clearstatcache()函数清除被PHP缓存的文件信息。对同一个文件名进行多次操作,并且需要该文件信息不被缓存时才需要调用它。
    

目录的基本操作

解析目录路径
        UNIX系统中必须使用正斜线"/"作为路径分隔符,而windows系统中默认使用反斜线"\"作为路径分隔符,在程序中表示时还要将"\"转义,但也接受正斜线"/"作为分隔符的写法。建议使用正斜线"/"作为路径分隔符。
        PHP内置常量DIRECTORY_SEPARATOR,其值为当前操作系统的默认文件路径分隔符。
basename()
        返回路径中文件名部分。
1
2
3
4
5
<?php
    $path = "D:/amp/php/php.ini";   
    echo basename($path)."<br/>";           //php.ini
    echo basename($path,".ini")."<br/>";    //php
    echo basename($path,".php");            //php.ini
dirname()
        给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
1
2
3
<?php
    $path = "D:/amp/php/php.ini";
    echo dirname($path)."<br/>";        // D:/amp/php
pathinfo()
        返回一个关联数组,其中包括指定路径中的目录名、基本名、扩展名三部分。分别通过dirname、basename、extension来引用。
1
2
3
4
5
6
<?php
    $path = "D:/amp/php/php.ini";
    $path_parts = pathinfo($path);
    echo $path_parts[‘dirname‘]."<br/>";    //D:/amp/php
    echo $path_parts[‘basename‘]."<br/>";   //php.ini   
    echo $path_parts[‘extension‘]."<br/>"//i
遍历目录
opendir()
        用于打开指定目录,接受一个目录及目录名作为参数,函数返回值可供其他目录函数使用的目录句柄(资源类型)。如果该目录不存在或者没有访问权限,则返回false。
readdir()
        读取指定目录,接受已经用opendir()函数打开的可操作目录句柄作为参数,函数返回当前目录指针位置的一个文件名,并将目录指针向后移动一位。当指针位于目录的结尾时,因为没有文件存在则返回false。
closedir()
        关闭指定目录,接受已经用opendir()函数打开的可操作目录句柄作为参数。函数无返回值,运行后将关闭打开的目录。
rewinddir()

        倒回目录句柄,接受已经用opendir()函数打开的可操作目录句柄作为参数。将目录指针重置到目录开始处,即倒回目录的开头。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?php
    date_default_timezone_set("PRC");
    $num = 0;                                   //用来统计子目录和文件的个数
    $dirname = ‘d:/amp/php‘;                    //保存当前目录下用来遍历的一个目录名
    $dir_handle = opendir($dirname);            //用opendir打开目录
 
    //将遍历的目录和文件名使用表格格式输出
    echo ‘<table border="0" align="center" width="600" cellspacing="0" cellpadding="0">‘;
    echo ‘<caption><h2>目录‘.$dirname.‘下面的内容</h2></caption>‘;        
    echo ‘<tr align="left" bgcolor="#cccccc">‘;                      
    echo ‘<th>文件名</th><th>文件大小</th><th>文件类型</th><th>修改时间</th></tr>‘;
     
    //使用readdir循环读取目录里的内容
    while($file = readdir($dir_handle)) {  
        //将目录下的文件和当前目录连接起来,才能在程序中使用
        $dirFile = $dirname."/".$file;     
 
        $bgcolor $num++%2==0 ? ‘#FFFFFF‘ : ‘#CCCCCC‘;                //隔行一种颜色
        echo ‘<tr bgcolor=‘.$bgcolor.‘>‘;                
        echo ‘<td>‘.$file.‘</td>‘;                                      //显示文件名
            echo ‘<td>‘.filesize($dirFile).‘</td>‘;                     //显示文件大小
            echo ‘<td>‘.filetype($dirFile).‘</td>‘;                     //显示文件类型
            echo ‘<td>‘.date("Y/n/t",filemtime($dirFile)).‘</td>‘;      //格式化显示文件修改时间
            echo ‘</tr>‘;
    }
    echo ‘</table>‘;                                                  //关闭表格标记
    closedir($dir_handle);                                              //关闭文件操作句柄
 
    echo ‘在<b>‘.$dirname.‘</b>目录下的子目录和文件共有<b>‘.$num.‘</b>个‘;
统计目录大小
        disk_free_space()计算磁盘空闲容量大小。
        disk_total_apace()计算磁盘大小。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
    /**
        自定义一个函数dirSize(),统计传入参数的目录大小
        @param  string  $directory  目录名称
        @return double              目录的尺寸大小
    */
    function dirSize($directory) {     
        $dir_size = 0;                                      //用来累加各个文件大小
 
        if($dir_handle = @opendir($directory)) {            //打开目录,并判断是否能成功打开
            while( $filename = readdir($dir_handle) ) {     //循环遍历目录下的所有文件
                if($filename != "." && $filename != "..") { //一定要排除两个特殊的目录
                    $subFile = $directory."/".$filename;    //将目录下的子文件和当前目录相连
                    if(is_dir($subFile))                    //如果为目录
                        $dir_size += dirSize($subFile);     //递归地调用自身函数,求子目录的大小
                    if(is_file($subFile))                   //如果是文件
                        $dir_size += filesize($subFile);    //求出文件的大小并累加
                }
            }
            closedir($dir_handle);                          //关闭文件资源
            return $dir_size;                               //返回计算后的目录大小
        }
    }
 
    $dir_size = dirSize("d:/amp/php");                      //调用该函数计算目录大小
    echo round($dir_size/pow(1024,1),2)."KB";               //字节数转换为“KB”单位并输出
建立和删除目录
        mkdir()创建一个新目录。rmdir()删除目录,只能删除一个空目录并且目录必须存在,如果是非空目录就需要先进入到目录中,使用unlink()函数将目录中的每个文件都删除掉,再回来将这个空目录删除。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
    /**
        自定义函数递归的删除整个目录
        @param  string  $directory 目录名称
    */
    function delDir($directory) {          
        if(file_exists($directory)) {                           //如果不存在rmdir()函数会出错
            if($dir_handle = @opendir($directory)) {            //打开目录并判断是否成功
                while($filename = readdir($dir_handle)) {       //循环遍历目录
                    if($filename != "." && $filename != "..") { //一定要排除两个特殊的目录
                        $subFile = $directory."/".$filename;    //将目录下的文件和当前目录相连
                        if(is_dir($subFile))                    //如果是目录条件则成立
                            delDir($subFile);                   //递归调用自己删除子目录
                        if(is_file($subFile))                   //如果是文件条件则成立
                            unlink($subFile);                   //直接删除这个文件
                    }
                }
                closedir($dir_handle);                          //关闭目录资源
                rmdir($directory);                              //删除空目录
            }
        }
    }
     
    delDir("phpMyAdmin");       //调用delDir()函数,将程序所在目录中的“phpMyAdmin”文件夹删除
复制目录

        首先对源目录进行遍历,如果遇到的是普通文件,直接使用copy进行赋值;如果遍历时遇到一个目录,则必须建立该目录,然后再对该目录下的文件进行复制操作,如果还有子目录,则使用递归重复操作,最终将整个目录复制完成。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?php
    /**
        自定义函数递归的复制带有多级子目录的目录
        @param  string  $dirSrc  原目录名称字符串
        @param  string  $dirTo  目标目录名称字符串
    */
    function copyDir($dirSrc, $dirTo) {        
        if(is_file($dirTo)) {                               //如果目标不是一个目录则退出
            echo "目标不是目录不能创建!!";
            return;                                         //退出函数
        }
         
        if(!file_exists($dirTo)) {                          //如果目标目录不存在则创建
            mkdir($dirTo);                                  //创建目录
        }
         
        if($dir_handle = @opendir($dirSrc)) {               //打开目录并判断是否成功
            while($filename = readdir($dir_handle)) {       //循环遍历目录
                if($filename != "." && $filename != "..") { //一定要排除两个特殊的目录
                    $subSrcFile = $dirSrc."/".$filename;    //将源目录的多级子目录连接
                    $subToFile = $dirTo."/".$filename;      //将目标目录的多级子目录连接
                         
                    if(is_dir($subSrcFile))                 //如果源文件是一个目录
                        copyDir($subSrcFile, $subToFile);   //递归调用自己复制子目录
                    if(is_file($subSrcFile))                //如果源文件是一个普通文件
                        copy($subSrcFile, $subToFile);      //直接复制到目标位置
                }
            }
            closedir($dir_handle);                          //关闭目录资源
        }  
    }
     
    //测试函数,将目录"phpMyAdmin"复制到"D:/admin"
    copyDir("phpMyAdmin", "D:/admin");     
以上是关于PHP文件系统处理的主要内容,如果未能解决你的问题,请参考以下文章

我们如何在php中获取.ai文件的维度

PHP文件系统管理

PHP + 允许上传 JPG 文件

php文件操作基础

php部分--文件操作

PHP里文件的查找方式及写法

(c)2006-2024 SYSTEM All Rights Reserved IT常识