侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

关于PHP目录操作总结

php  /  管理员 发布于 7年前   143

PHP目录操作(附封装好的目录操作函数文件)

目录函数库常用API

    $path='test';    var_dump(is_dir($path));//检测是否为目录    echo '<hr/>';    echo getcwd();//得到当前的工作目录    echo '<hr/>';    //得到磁盘总大小    echo disk_total_space('/');    echo '<hr/>';    //得到磁盘可用空间    echo disk_free_space('/');

创建、删除目录

多级目录

    //创建目录    //mkdir($path,$mode,$flag):创建目录    var_dump(mkdir('a'));    //检测目录是否存在,不存在则创建     $path='king';     if(!file_exists($path)){       if(mkdir($path)){         echo '目录创建成功';       }else{         echo '目录创建失败';       }     }else{       echo '目录已存在';     }    //创建多级目录 b/c     $path='b'.DIRECTORY_SEPARATOR.'c';     echo $path;     var_dump(mkdir($path,755,true));     //删除目录     var_dump(rmdir('a'));     var_dump(rmdir('b'));     var_dump(rmdir('a'));

读取目录

$path='webuploader-master';    //打开指定目录    $handle=opendir($path);    var_dump($handle);//resource(5) of type (stream)    //遍历文件,获取类型     while(($item=readdir($handle))!==false){       echo $item,"\n";       echo filetype($path.DIRECTORY_SEPARATOR.$item),"\n";//获取文件类型       echo "\n";     }    //遍历文件,获取类型2    while(($item=readdir($handle))!==false){      //去掉.和..      if($item!='.'&&$item!='..'){        //检测是否是文件        if(is_file($path.'/'.$item)){          echo '文件:',$item,"\n";        }else{          echo '目录:',$item,"\n";        }      }    }    //rewinddir()重置遍历指针    rewinddir();    var_dump(readdir($handle));// .     //关闭句柄     closedir($handle);

DirectoryIterator迭代器的使用

  $dir=new DirectoryIterator(__DIR__);    //print_r($dir);    foreach($dir as $fileInfo){      if($fileInfo->getFilename()!='.'&&$fileInfo->getFilename()!='..'){        echo $fileInfo->getFilename(),"\n";//文件名        echo $fileInfo->getType(),"\n";//文件类型      }    }

【超级实用目录相关函数封装】

dir.func.php

    /**     * 检测目录是否为空     * @method check_empty_dir     * @param  string          $path 目录名     * @return boolean         true|false     */    function check_empty_dir(string $path){      //检测目录是否存在,存在则打开      if(!is_dir($path)){        return false;      }      //打开指定目录      $handle=opendir($path);      //读取      while(($item=@readdir($handle))!==false){        //去掉.和..操作        if($item!='.'&&$item!='..'){          return false;        }      }      //关闭句柄      closedir($handle);      return true;    }    -------------------    /**     * 读取目录下的所有文件     * @method read_directory     * @param  string         $path 目录名称     * @return void直接输出目录下的所有文件及子目录     */    function read_directory(string $path){      if(!is_dir($path)){        return false;      }      $handle=opendir($path);      while(($item=@readdir($handle))!==false){        if($item!='.'&&$item!='..'){          $pathName=$path.DIRECTORY_SEPARATOR.$item;          if(is_file($pathName)){echo '文件:',$item,'<br/>';          }else{echo '目录:',$item,'<br/>';$func=__FUNCTION__;$func($pathName);          }        }      }      closedir($handle);    }    // read_directory('a');    -------------------    /**     * 遍历目录下所有内容返回     * @method read_directory1     * @param  string          $path 目录名称     * @return mixedfalse|array     */    function read_directory1(string $path){      if(!is_dir($path)){        return false;      }      $handle=opendir($path);      while(($item=@readdir($handle))!==false){        if($item!='.'&&$item!='..'){          $pathName=$path.DIRECTORY_SEPARATOR.$item;          if(is_file($pathName)){$arr['file'][]=$pathName;          }elseif(is_dir($pathName)){$arr['dir'][]=$pathName;$func=__FUNCTION__;$func($pathName);          }        }      }      closedir($handle);      return $arr;    }    // $res=read_directory1('a');    // print_r($res);    -------------------    /**     * 读取目录中的所有文件     * @method get_all_files     * @param  string        $path 目录名称     * @return mixed  false|array     */    function get_all_files(string $path){      if(!is_dir($path)){        return false;      }      if($handle=opendir($path)){        $res=[];        while(($item=readdir($handle))!==false){          if($item!='.'&&$item!='..'){$pathName=$path.DIRECTORY_SEPARATOR.$item;is_dir($pathName)?$res[$pathName]=get_all_files($pathName):$res[]=$pathName;          }        }        closedir($handle);        return $res;      }else{        return false;      }    }    // print_r(get_all_files('a'));    -------------------    /**     * 得到目录大小     * @method get_dir_size     * @param  string       $path 目录名称     * @return mixed false|int     */    function get_dir_size(string $path){      if(!is_dir($path)){        return false;      }      static $sum=0;      $handle=opendir($path);      while(($item=readdir($handle))!==false){        if($item!='.'&&$item!='..'){          $pathName=$path.DIRECTORY_SEPARATOR.$item;          if(is_file($pathName)){$sum+=filesize($pathName);          }else{$func=__FUNCTION__;$func($pathName);          }        }      }      closedir($handle);      return $sum;    }    // echo get_dir_size('a');    -------------------    /**     * 重命名目录     * @method rename_dir     * @param  string     $oldName 原目录     * @param  string     $newName 新目录     * @return boolean  true|false     */    function rename_dir(string $oldName,string $newName){      //检测原文件是否存在,或者当前目录下存在同名目录      $dest=dirname($oldName).DIRECTORY_SEPARATOR.$newName;      if(!is_dir($oldName)|| file_exists($dest)){        return false;      }      if(rename($oldName,$dest)){        return true;      }      return false;    }    //重命名    // var_dump(rename_dir('a','aaaa'));    // var_dump(rename_dir('b','c'));    -------------------    /**     * 剪切目录     * @method cut_dir     * @param  string  $src 原目录     * @param  string  $dst 新目录位置     * @return boolean       true|false     */    function cut_dir(string $src,string $dst){      //检测原目录是否存在,不存在返回false      if(!is_dir($src)){        return false;      }      //检测目录路径是否存在,不存在则创建      if(!is_dir($dst)){        mkdir($dst,755,true);      }      //检测目录路径下是否存在同名目录      $dest=$dst.DIRECTORY_SEPARATOR.basename($src);      if(is_dir($dest)){        return false;      }      //剪切      if(rename($src,$dest)){        return true;      }      return false;    }    // var_dump(cut_dir('d','uploads'));    // var_dump(cut_dir('c','test1'));    // var_dump(cut_dir('test1','test2'));    -------------------    /**     * 拷贝目录操作     * @method copy_dir     * @param  string   $src 原目录     * @param  string   $dst 目标路径     * @return boolean        true|false     */    function copy_dir(string $src,string $dst){      //检测原目录是否存在      if(!is_dir($src)){        return false;      }      //检测目标目录是否存在,不存在则创建      if(!is_dir($dst)){        mkdir($dst,755,true);      }      //检测目标目录下是否存在同名文件      $dest=$dst.DIRECTORY_SEPARATOR.basename($src);      if(is_dir($dest)){        return false;      }      $handle=opendir($src);      while(($item=@readdir($handle))!==false){        if($item!='.'&&$item!='..'){          if(is_file($src.DIRECTORY_SEPARATOR.$item)){copy($src.DIRECTORY_SEPARATOR.$item,$dst.DIRECTORY_SEPARATOR.$item);          }          if(is_dir($src.DIRECTORY_SEPARATOR.$item)){$func=__FUNCTION__;$func($src.DIRECTORY_SEPARATOR.$item,$dst.DIRECTORY_SEPARATOR.$item);          }        }      }      closedir($handle);      return true;    }    // var_dump(copy_dir('uploads','test2/uploads'));    -------------------    /**     * 删除非空目录     * @method del_dir     * @param  string  $path 目录名称     * @return boolean        true|false     */    function del_dir(string $path){      //检测目录是否存在      if(!is_dir($path)){        return false;      }      $handle=opendir($path);      while(($item=@readdir($handle))!==false){        if($item!='.'&&$item!='..'){          $pathName=$path.DIRECTORY_SEPARATOR.$item;          if(is_file($pathName)){@unlink($pathName);          }else{$func=__FUNCTION__;$func($pathName);          }        }      }      closedir($handle);      rmdir($path);      return true;    }    // var_dump(del_dir('test2'));

DIRECTORY_SEPARATOR

在 windows 我们习惯性的使用“\”作为文件分隔符,但是在 linux 上系统不认识这个标识,于是就要引入这个 php 内置变量了:DIRECTORY_SEPARATOR。

比如开发机器是 windows,有一个图片上传程序,而使用了(\)作为文件分隔符,调试机器上指定的上传文件保存目录:define('ROOT',dirname(__FILE__)."\upload"),在本地调试都很正常,但是上传到 linux 服务器的时候会发现会出错。这个问题就是出在文件的分隔符上,windows 上习惯性的使用\作为文件分隔符,但是在 linux 上只认识“/”,

于是就要引入下面这个 php 内置变量 DIRECTORY_SEPARATOR。

更多相关php知识,请访问php教程!

以上就是关于PHP目录操作总结的详细内容,更多请关注其它相关文章!


  • 上一条:
    PHP的一些安全设置(优化)
    下一条:
    PHP对一组数进行重新排列(冒泡算法)
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • 用Time Warden监控PHP中的代码处理时间(0个评论)
    • 在PHP中使用array_pop + yield实现读取超大型目录功能示例(0个评论)
    • Property Hooks RFC在PHP 8.4中越来越接近现实(0个评论)
    • 近期文章
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 欧盟关于强迫劳动的规定的官方举报渠道及官方举报网站(0个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf文件功能(0个评论)
    • Laravel从Accel获得5700万美元A轮融资(0个评论)
    • 在go + gin中gorm实现指定搜索/区间搜索分页列表功能接口实例(0个评论)
    • 在go语言中实现IP/CIDR的ip和netmask互转及IP段形式互转及ip是否存在IP/CIDR(0个评论)
    • PHP 8.4 Alpha 1现已发布!(0个评论)
    • Laravel 11.15版本发布 - Eloquent Builder中添加的泛型(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2017-06
    • 2017-07
    • 2017-08
    • 2017-09
    • 2017-11
    • 2017-12
    • 2018-01
    • 2018-02
    • 2018-03
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2020-07
    • 2020-09
    • 2021-02
    • 2021-03
    • 2021-04
    • 2021-05
    • 2021-06
    • 2021-07
    • 2021-08
    • 2021-09
    • 2021-10
    • 2021-11
    • 2021-12
    • 2022-01
    • 2022-02
    • 2022-05
    • 2022-06
    • 2022-07
    • 2022-08
    • 2022-09
    • 2022-10
    • 2022-11
    • 2022-12
    • 2023-01
    • 2023-02
    • 2023-03
    • 2023-04
    • 2023-05
    • 2023-06
    • 2023-07
    • 2023-08
    • 2023-09
    • 2023-10
    • 2023-11
    • 2023-12
    • 2024-01
    • 2024-02
    • 2024-03
    • 2024-04
    • 2024-05
    • 2024-06
    • 2024-07
    • 2024-09
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客