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 ...
随机推荐
- 分形的奥秘!分形着色器!shader 编程入门实战 ! Cocos Creator!
极致的数学之美! 什么是分形? "一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状" 简单来说,分形(fractal)就像这个doge表情包 ...
- unity 教程Tanks中的Transform.InverseTransformPoint理解
Tanks教程中在处理摄像机缩放的时候使用了下面的函数,取两个坦克的中心点之后,根据两个坦克之间的距离,保证两个坦克都在屏幕中,然后进行缩放. private float FindRequiredSi ...
- UCF Local Contest 2015 J 最小割
题意: 有
- Jenkins集成jacoco收集集成测试覆盖率
Jenkins集成jacoco收集集成测试覆盖率 2020-02-28 目录 0 整体思路1 安装版本2 全局工具配置3 Jenkins创建JacocoIntegrateTestDemo项目 3.1 ...
- GHM论文笔记(CVPR2019)
目录 作者要解决的问题 Focal loss(CVPR2017) Focal loss的解决方案 Focal loss的不足 设计思路 梯度与样本的关系 梯度分布计算方法:将0-1的梯度切bin,计算 ...
- ArcGIS Engine开发碰到问题及解决方式
1.问题描述——运行提示:ArcGIS version not specified. You must call RuntimeManager.Bind before creating any Arc ...
- 清北学堂—2020.1提高储备营—Day 2 afternoon(线段树、树状数组)
qbxt Day 2 afternoon --2020.1.18 济南 主讲:李佳实 目录一览 1.线段树 2.二叉搜索树(略过) 3.树状数组 总知识点:基础数据结构(本人初学感觉好难) 一.线段树 ...
- 剑指offer-面试题57_2-和为s的连续正数序列-穷举法
/* 题目: 输入一个整数s,输出所有和为s的连续整数序列. */ /* 思路: 穷举法. */ #include<iostream> #include<cstring> #i ...
- 《Javascript DOM编程艺术》学习笔记 第1-6章
第1章 Javascript简史 Javascript是Netspace公司与Sun公司合作开发的,Javascript 1.0版于1995年推出. 为与微软公司竞争,Netspace公司和Sun公司 ...
- IDEA如何恢复到以前的代码
虽然说IDEA的Ctrl+z撤销操作和Ctrl+Shift+Z重做操作为书写代码提供了很大的便利 但是在各种原因不小心失误撤销后又想不起来代码是怎么写的时候就非常尴尬,这时候就需要代码恢复到以前的状态 ...