PHP中目录的基本操作

Author: 刘老师(Aaron Lau) 武汉长乐教育,武汉PHP培训课程,版权所有,转载请注明!

PHP中目录的基本操作

课程概要

  1. basename() 获取文件名
  2. dirname() 去掉文件名的目录名
  3. pathinfo()获取文件名/基本名/扩展名的关联数组
  4. PHP遍历目录实例

1. basename() 获取文件名

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";

//显示带有文件扩展名的文件名,输出page.php
echo basename($path);

//显示不带有文件扩展名的文件名,输出page
echo basename($path,".php");

2. dirname() 去掉文件名的目录名

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";

//返回目录名/var/www/html
echo dirname($path);

//返回目录名c:/
echo dirname('c:/');

3. pathinfo()获取文件名/基本名/扩展名的关联数组

//包含有指向一个文件的全路径的字符串
$path = "/var/www/html/page.php";

//返回包括指定路径中的目录名、基本名和扩展名关联数组
$path_parts=pathinfo($path);

//输出目录名/var/www/html
echo $path_parts["dirname"];

//输出基本名page.php
echo $path_parts["basename"];

//输出扩展名.php
echo $path_parts["extension"];

4. PHP遍历目录实例

//用来统计子目录和文件的个数
$num=0;

//定义一个变量,保存当前目录下用来遍历的一个目录名
$dirname='./';

//用opendir打开目录
$dir_handle=opendir($dirname);

//将遍历的目录和文件名使用表格格式输出
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;

    //隔行一种颜色,同时也将计数器num累加
    if($num++%2==0) {
        //单行为白色背景
        $bgcolor='#ffffff';
    } else {
        //双行为灰色背景
        $bgcolor='#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>个';

4. 统计目录大小

//自定义一个函数dirSize(),统计传入参数的目录大小
function dirSize($directory) {

    //整型变量初值为0,用来累加各个文件大小从而计算目录大小
    $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("./");

//将获取的目录字节数转换为“KB”单位并输出
echo round($dir_size/pow(1024,1),2)."KB";

5. 建立和删除目录

mkdir("php");
//自定义函数递归的删除整个目录
function delDir($directory) {
    //判断目录是否存在,如果不存在rmdir()函数会出错
    if(file_exists($directory)) {
        //打开目录返回目录资源,并判断是否成功
        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()函数,将程序所在目录中的“test”文件夹删除
delDir("test");

6. 复制和移动目录

 //自定义函数递归的复制带有多级子目录的目录
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);       //关闭目录资源
    }
}

//测试函数,将目录"test"复制到"D:/admin"
copyDir("test", "D:/admin");
上一篇课程 下一篇课程

学生登录