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 ...
随机推荐
- solr常用操作及集成分词器或cdh集群部署说明
首先,如果是从http://lucene.apache.org/solr/下载的solr,基本都是自带集成的jetty服务,不需要单独搭建tomcat环境,但是要注意jdk版本,直接解压通过cmd命令 ...
- C语言实现双人控制的战斗小游戏
实现功能 1.双人分别控制小人移动 2.子弹碰撞 3.可改变出弹方向 4.血条实体化 前言 这个游戏是看了知乎一位非常好的老师的专栏后练手写的,(至于是哪位,知乎搜C语言小游戏最牛逼的那位) 有老师系 ...
- 多线程笔记 - provider-consumer
通过多线程实现一个简单的生产者-消费者案例(笔记). 首先定义一个要生产消费的数据类 : public class Data { private String id; private String n ...
- 【Android开发艺术探索】四大组件的工作过程
个人博客 http://www.milovetingting.cn 四大组件的工作过程 四大组件:Activity.Service.BroadcastReceiver.ContentProvider ...
- 共同战“疫”,CODING 帮助研发团队高效协同
新冠疫情下,家里蹲的日子继续延长.部分企业虽然受困于不能回公司办公,但都陆续开启了远程协作办公,远程协作领域被推上了风口.但「远程协同」看不见摸不着工作伙伴,个人的自律能力也无法保证,难免出现沟通响应 ...
- 2020软件工程作业01 Deadline: 2020/03/07 20:00pm
1.建立博客 https://github.com/smithLIUandhisbaby 20177572 https://www.cnblogs.com/smith324/ 2.回顾——我的初心 对 ...
- 127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问
问题描述 今天在访问http://127.0.0.1时,浏览器显示"127.0.0.1 拒绝了我们的连接请求",需要设置浏览器设置 解决方法 1.打开控制面板,搜索"程序 ...
- MySQL 的一条语句是怎么执行的
该文为< MySQL 实战 45 讲>的学习笔记,感谢查看,如有错误,欢迎指正 一.MySQL 的基础架构 以下就是 MySQL 的基础架构图. 在 Linux 中安装 MySQL 时,最 ...
- mysql必知必会--过 滤 数 据
使用 WHERE 子句 数据库表一般包含大量的数据,很少需要检索表中所有行.通常只 会根据特定操作或报告的需要提取表数据的子集.只检索所需数据需要 指定搜索条件(search criteria),搜索 ...
- 使用node.js实现apache功能
1.先实现在url中输入文件路径能展示对应文件内容功能 const http = require('http') const fs = require('fs') const server = htt ...