目录函数库常用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 mixed false|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目录操作(附封装好的目录操作函数文件)的更多相关文章

  1. Asp.Net Core 2.0 项目实战(4)ADO.NET操作数据库封装、 EF Core操作及实例

    Asp.Net Core 2.0 项目实战(1) NCMVC开源下载了 Asp.Net Core 2.0 项目实战(2)NCMVC一个基于Net Core2.0搭建的角色权限管理开发框架 Asp.Ne ...

  2. TP5学习基础二:目录结构、URL路由、数据操作

    一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...

  3. 手把手封装数据层之DataUtil数据库操作的封装

    上一篇我们写完了数据库连接的封装 没有看的请移步上一篇关于数据库连接的内容 这次我们讲数据库操作的封装.数据库的操作就是增删改查:心再大一点就可以直接分为查询和其他. 因为查询是有返回对象的,而其他都 ...

  4. 在Linux下和Windows下遍历目录的方法及如何达成一致性操作

    最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...

  5. 一只菜鸟的瞎J8封装系列的目录

    因为这是一个系列...也就是我们所说的依赖关系.后面很多方法都是基于我前面封装的工具来进行的,所以我列一个目录供大家参考... 一只菜鸟的瞎J8封装系列  一.手把手封装数据层之DButil数据库连接 ...

  6. Linux Shell编程学习笔记——目录(附笔记资源下载)

    LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...

  7. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  8. dedecms网站迁移时记得将安装目录放空 附迁移的正确方法

    这段时间在赶一些新项目,我们建站一般都在本地服务器搭建起来,测试得差不多了才传到网上,这样对蜘蛛也相对友好一些,要不然改来改去变化太大给搜索引擎的第一印象很不好.但是由于本地环境和服务器环境还是有一些 ...

  9. java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)

    本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...

随机推荐

  1. php 安装扩展插件实例-gd库

    今天给php 安装一个扩展插件 gd库   一.gd库是什么 gd库是一个开源的图像处理库,它通过提供一系列用来处理图片的API,使其可以用来创建图表.图形.缩略图以及其他图像的处理操作. gd库支持 ...

  2. linux shell实用常用命令

    本文主要介绍Linux Shell的一些使用小技巧收集,非常实用,需要的朋友可以参考下. 查看本机某端口是否被占用 netstat -anpt | grep 22 查看远程某端口是否被开放 echo ...

  3. codewars--js--Pete, the baker

    问题描述: Pete likes to bake some cakes. He has some recipes and ingredients. Unfortunately he is not go ...

  4. .net core 3 web api jwt 一直 401

    最近在给客户开发 Azure DevOps Exension, 该扩展中某个功能需要调用使用 .NET Core 3 写的 Web Api. 在拜读了 Authenticating requests ...

  5. 使用 setTimeout 来模拟一个 setInterval

    setTimeout 超时调用:在多少时间 在执行: setinterval 每隔多少时间 就调用 例如: setTimeout这个的值是1000,也就是说在页面刷新后,1000毫秒之后才调用这个函数 ...

  6. MySql学习-3.命令脚本

    一.数据库操作: 1. 登录数据库:mysql -uroot -p (这个password是自己设定的,我这里的没密码) 注意:(数据路径是:D:\MySql\install1\data 操作路径:D ...

  7. myeclipce 按 Alt + / 代码提示无法感应自己定义的类 解决方案

    解决方案:如图把这些选项全部都勾选即可.(注意 :需先排除是不是快捷键冲突,我遇到的问题是Alt+/可以提示jdk内置的对象和方法,但是无法提示自定义的类和方法.如Alt+/无法提示任何信息 需重新设 ...

  8. hadoop学习摘要

    参考链接:https://www.zhihu.com/question/333417513 https://www.oschina.net/p/hbase hadoop环境搭建:https://blo ...

  9. Oracle实例占用超高CPU排查

    CPU主要功能:处理指令.执行操作.要求进行动作.控制时间.处理数据. 结合数据库实例CPU占用高,可能的原因是数据库在执行大量的操作(全表查询.大量排序等). 由于公司没有DBA,遇到数据库问题只能 ...

  10. [20200103]GUID转换GUID_BASE64.txt

    [20200103]GUID转换GUID_BASE64.txt --//最近在做一个项目优化,里面大量使用uuid.优缺点在链接:http://blog.itpub.net.x.y265/viewsp ...