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 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目录操作(附封装好的目录操作函数文件)的更多相关文章
- 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 ...
- TP5学习基础二:目录结构、URL路由、数据操作
一.安装1.使用git或者composer(composer update)进行实时更新,区别在于git不会清空核心框架目录而composer会清空.2.使用官网打包好的TP压缩包(解压即可用)-&g ...
- 手把手封装数据层之DataUtil数据库操作的封装
上一篇我们写完了数据库连接的封装 没有看的请移步上一篇关于数据库连接的内容 这次我们讲数据库操作的封装.数据库的操作就是增删改查:心再大一点就可以直接分为查询和其他. 因为查询是有返回对象的,而其他都 ...
- 在Linux下和Windows下遍历目录的方法及如何达成一致性操作
最近因为测试目的需要遍历一个目录下面的所有文件进行操作,主要是读每个文件的内容,只要知道文件名就OK了.在Java中直接用File类就可以搞定,因为Java中使用了组合模式,使得客户端对单个文件和文件 ...
- 一只菜鸟的瞎J8封装系列的目录
因为这是一个系列...也就是我们所说的依赖关系.后面很多方法都是基于我前面封装的工具来进行的,所以我列一个目录供大家参考... 一只菜鸟的瞎J8封装系列 一.手把手封装数据层之DButil数据库连接 ...
- Linux Shell编程学习笔记——目录(附笔记资源下载)
LinuxShell编程学习笔记目录附笔记资源下载 目录(?)[-] 写在前面 第一部分 Shell基础编程 第二部分 Linux Shell高级编程技巧 资源下载 写在前面 最近花了些时间学习She ...
- Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)
Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...
- dedecms网站迁移时记得将安装目录放空 附迁移的正确方法
这段时间在赶一些新项目,我们建站一般都在本地服务器搭建起来,测试得差不多了才传到网上,这样对蜘蛛也相对友好一些,要不然改来改去变化太大给搜索引擎的第一印象很不好.但是由于本地环境和服务器环境还是有一些 ...
- java浅克隆和深克隆,序列化和反序列化实现深克隆(封装序列化和反序列化操作)
本篇博客内容: 一.浅克隆(ShallowClone)和深克隆(DeepClone) 二.序列化和反序列化实现深克隆 三.封装序列化和反序列化操作 ObjectOutputStream + 内存流By ...
随机推荐
- HSRP 详解
简介 HSRP(Hot Standby Router Protocol 热备份路由器协议)是Cisco的专有协议.HSRP把多台路由器组成一个“热备份组”,形成一个虚拟路由器.这个组内只有一个路由器是 ...
- [jQuery]jQuery和DOM对象(三)
iQuery和DOM对象 用原生js获取来的对象就是DOM对象 // 1. DOM对象 var myDiv = document.get.querySelector('div'); // myDiv ...
- idea springboot 使用JRebel热部署
1.首先在idea中下载jrebel.由于已经下载过了.上这样 2.下载jrebel破解插件 https://gitee.com/gsls200808/JrebelLicenseServerforJa ...
- Ubuntu Xftp 配置
sudo apt-get updatesudo apt install openssh-serversudo apt-get install vsftpdsudo service vsftpd res ...
- 理解设备像素、设备独立像素、css像素、viewport
设备像素也叫物理像素. 设备像素指的是显示器上的真实像素,每个像素的大小是屏幕固有的属性,屏幕出厂以后就不会改变了. 设备分辨率描述的就是这个显示器的宽和高分别是多少个设备像素. 设备像素和设备分辨率 ...
- 手把手教你使用数据可视化BI软件创建仓库可视化管理大屏
灯果数据可视化BI软件是新一代人工智能数据可视化大屏软件,内置丰富的大屏模板,可视化编辑操作,无需任何经验就可以创建属于你自己的大屏.大家可以在他们的官网下载软件. 本文以仓库可视化管理大屏为例为 ...
- 《果壳中的C# C# 5.0 权威指南》 - 学习笔记
<果壳中的C# C# 5.0 权威指南> ========== ========== ==========[作者] (美) Joseph Albahari (美) Ben Albahari ...
- 8.python内置模块之random模块简介
Python中的random模块用于生成随机数. 常用的7个函数: 1.random.random():返回一个[0,1)之间的随机浮点值(双精度) 2.random.uniform(a,b):返回[ ...
- PLSQL-Initialization error
1. 情况描述 安装完PLSQL之后,在写入数据库连接信息后,连接数据库,报Initialization error错误 (1)未安装Oracle数据库,无相应的oci.dll文件 (2)已安装数据库 ...
- linux版本的jdk1.8+hadoop2.9.2下载地址
hadoop: 链接:https://pan.baidu.com/s/14AhhPYP8933tn-EfSX-i8Q 提取码:e90m jdk1.8: 链接:https://pan.baidu.com ...