虽然PHP提供很多内置的文件处理函数,但是分得特别细,有一些操作需要多个函数一起使用才能达到目标,比如删除非空文件夹的所有内容,遍历文件夹等功能,下面各个函数是学习的时候整理的,有的是教程里的,有的是自己想的,可以直接调用,免得自己再次写一遍,,本人是PHP菜鸟,一定存在很多bug,如果你愿意,非常欢迎留言,我收到留言后再修改。

     /**
* [以文字形式返回文件的类型]
* @param [type] $filename [description]
* @return [type] [description]
*/
function getfiletype($filename){
$type=filetype($filename);
switch($type){
case "dir":
echo "this is a dir<br>";
break;
case "file":
echo "this is a file<br>";
break;
case "unknown":
echo "can't know the file<br>";
break;
}
}
     /**
* [返回格式化后的文件大小]
* @param [type] $size [description]
* @return [type] [description]
*/
function transfer_filesize($size){
if($size>=pow(2,40)){
return ceil($size/pow(2,40))."TB";
} else if($size>=pow(2,30)){
return ceil($size/pow(2,30))."GB";
} else if($size>=pow(2,20)){
return ceil($size/pow(2,20))."MB";
} else if($size>=pow(2,10)){
return ceil($size/pow(2,10))."KB";
} else {
return $size."B";
}
}
     /**
* [获取文件夹或者文件的属性,包含文件类型及大小]
* @param [type] $filename [description]
* @return [type] [description]
*/
function getfilepro($filename){
if(file_exists($filename)){
echo "the file is exists<br>";
getfiletype($filename);
echo "the file size is ".transfer_filesize(filesize($filename))."<br>";
} else {
echo "the file is not exists<br>";
}
}
     /**
* [遍历整个文件夹]
* @param [string] $file [需要遍历的文件夹名或文件名]
* @return [type] [description]
*/
function show_all_files($file){
$dir=opendir($file);
while($filename=readdir($dir)){
if($filename!='.' && $filename!='..'){
$filename=$file."/".$filename;
if(is_dir($filename)){
echo "目录".$filename."<br>";
show_all_files($filename);
} else{
echo "文件".$filename."<br>";
}
}
}
closedir($dir);
}
show_all_files("./class");
     /**
* [获取一个磁盘或者分区的总容量和剩余容量]
* @param [string] $disk [description]
* @return [array] [可取消注释,返回一个包含两个值的数组]
*/
function get_disk_space($disk){
$total_space=transfer_filesize(disk_total_space($disk));
$free_space=transfer_filesize(disk_free_space($disk));
echo $disk."盘总容量为:".$total_space."<br>";
echo $disk."盘可用容量为:".$free_space."<br>";
return array($total_space,$free_space);
}
get_disk_space("C:");
     /**
* [目录总数,文件总数,及目录总大小]
* @param [string] $filename [目录名]
* @return [array] [返回该目录的目录总数,文件总数,及目录总大小]
*/
function get_all_nums($filename){
$total_size=0;
$total_dir_nums=0;
$total_file_nums=0;
function get_nums($filename){
global $total_dir_nums,$total_file_nums,$total_size;
$dir=opendir($filename);
while($file=readdir($dir)){
if($file!="." && $file!=".."){
$file=$filename."/".$file;
if(is_dir($file)){
get_nums($file);
$total_dir_nums++;
} else {
$total_file_nums++;
$total_size+=filesize($file);
}
}
}
closedir($dir);
return array($total_dir_nums,$total_file_nums,$total_size);
}
list($dir,$file,$size)=get_nums($filename);
echo "文件数为:".$file."<br>";
echo "目录数为:".$dir."<br>";
echo "总大小为:".transfer_filesize($size)."<br>";
}
get_all_nums("./class");
     /**
* [删除一个非空的目录或文件]
* @param [string] $filename [要删除的目录或文件名]
* @return [null] [null]
*/
function delete_dir($filename){
if(!file_exists($filename)){
die("不存在该目录");
}
if(is_file($filename)){
unlink($filename);
echo "成功删除文件".$file."<br>";
}
$dir=opendir($filename);
while($file=readdir($dir)){
if($file!="." && $file!=".."){
$file=$filename."/".$file;
if(is_dir($file)){
delete_dir($file);
} else {
unlink($file);
echo "成功删除文件".$file."<br>";
}
}
}
closedir($dir);
rmdir($filename);
echo "成功删除目录".$filename."<br>";
}
delete_dir("./aaaa");
 /**
* [用来拷贝一个目录]
* @param [string] [$src_dir源目录]
* @param [string] [$dest_dir目标目录]
* @return [null] [description]
*/ function copyDir($src_dir,$dest_dir){
//源目录是否存在不存在
if(!file_exists($src_dir)){
echo "the src dir is not exists\n";
return ;
}
//判断源目录是不是一个文件,若是文件,则直接复制,然后函数结束
if(is_file($src_dir)){
copy($src_dir,$dest_dir);
return;
}
if(!file_exists($dest_dir)){
mkdir($dest_dir);
} if($dir_handle=opendir($src_dir)){
while($filename=readdir($dir_handle)){
if($filename!="." && $filename!=".."){
$sub_src_file=$src_dir."/".$filename;
$sub_dest_file=$dest_dir."/".$filename;
if(is_dir($sub_src_file))
copyDir($sub_src_file,$sub_dest_file);
if(is_file($sub_src_file))
copy($sub_src_file,$sub_dest_file);
}
}
closedir($dir_handle);
}
}
copyDir("aaa","bbb");
     /**
* [逐个字符读出文件所有内容]
* @param [string] $filename [要读的文件名]
* @return [null] [description]
*/
function get_contents_one($filename){
$fp=fopen($filename,"r");
while(!feof($fp)){
echo fgetc($fp);
}
echo "<br>";
fclose($fp);
}
get_contents_one("bbb.txt");
     /**
* [逐行读出文件所有内容]
* @param [string] $filename [要读的文件名]
* @return [null] [description]
*/
function get_contents_two($filename){
$fp=fopen($filename,"r");
while(!feof($fp)){
echo fgets($fp);
}
echo "<br>";
fclose($fp);
}
get_contents_two("bbb.txt");

PHP文件系统操作常用函数的更多相关文章

  1. php中文件操作常用函数有哪些

    php中文件操作常用函数有哪些 一.总结 一句话总结:读写文件函数 判断文件或者目录是否存在函数 创建目录函数 file_exists() mkdir() file_get_content() fil ...

  2. go语言之进阶篇字符串操作常用函数介绍

    下面这些函数来自于strings包,这里介绍一些我平常经常用到的函数,更详细的请参考官方的文档. 一.字符串操作常用函数介绍 1.Contains func Contains(s, substr st ...

  3. dplyr 数据操作 常用函数(5)

    继续来了解dplyr中的其他有用函数 1.sample() 目的是可以从一个数据框中,随机抽取一些行,然后组成新的数据框. sample_n(tbl, size, replace = FALSE, w ...

  4. dplyr 数据操作 常用函数(4)

    接下来我们继续了解一些dplyr中的常用函数. 1.ranking 以下各个函数可以实现对数据进行不同的排序 row_number(x) ntile(x, n) min_rank(x) dense_r ...

  5. dplyr 数据操作 常用函数(2)

    继上一节常用函数,继续了解其他函数 1.desc() 这个函数和SQL中的排序用法是一样的,表示对数据进行倒序排序. 接下来我们看些例子. a=sample(20,50,rep=T)a desc(a) ...

  6. C语言字符,字符串,字节操作常用函数

    strlen 这个函数是在 string.h 的头文件中定义的 它的函数原型是 size_t strlen( const char ); size_t 是一个无符号整型,是这样定义的 typedef ...

  7. 【Linux 应用编程】文件IO操作 - 常用函数

    Linux 系统中的各种输入输出,设计为"一切皆文件".各种各样的IO统一用文件形式访问. 文件类型及基本操作 Linux 系统的大部分系统资源都以文件形式提供给用户读写.这些文件 ...

  8. PHP的文件操作常用函数

    PHP文件操作 1 获得文件名:basename - 返回路径中的文件名部分 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被 ...

  9. PHP文件操作常用函数总结

    一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名.如果文件名是以 suffix 结束的,那这一部分也会被去掉. eg: $ ...

随机推荐

  1. vue项目的架构设计完善详解

    vue项目构建vuex+mock层 vue项目添加jsBridge(与原生交互的) vue项目添加代码格式化

  2. UVA506-System Dependencies(拓扑序)

    Problem UVA506-System Dependencies Accept:285  Submit:2824 Time Limit: 3000 mSec Problem Description ...

  3. NET Framework 各版本官方下载

    https://msdn.microsoft.com/en-us/library/5a4x27ek(v=vs.110).aspx https://www.microsoft.com/zh-CN/dow ...

  4. chm文件转换成html文件,解决chm文件无法使用浏览器打开的问题

    每天学习一点点 编程PDF电子书免费下载: http://www.shitanlife.com/code CHM是英语“Compiled Help Manual”的简写,即“已编译的帮助文件”.CHM ...

  5. Fermat vs. Pythagoras POJ - 1305 (数论之勾股数组(毕达哥拉斯三元组))

    题意:(a, b, c)为a2+b2=c2的一个解,那么求gcd(a, b, c)=1的组数,并且a<b<c<=n,和不为解中所含数字的个数,比如在n等于10时,为1, 2, 7,9 ...

  6. 【转】escape,encodeURI,encodeURIComponent有什么区别?

    在这个页面里面试着搜了一下 「UTF-8」 ,居然没有搜到. escape 和 encodeURI 都属于 Percent-encoding,基本功能都是把 URI 非法字符转化成合法字符,转化后形式 ...

  7. 分布式缓存技术redis系列(四)——redis高级应用(集群搭建、集群分区原理、集群操作)

    本文是redis学习系列的第四篇,前面我们学习了redis的数据结构和一些高级特性,点击下面链接可回看 <详细讲解redis数据结构(内存模型)以及常用命令> <redis高级应用( ...

  8. P1823 [COI2007] Patrik 音乐会的等待 单调栈 洛谷luogu

    题目描述 N个人正在排队进入一个音乐会.人们等得很无聊,于是他们开始转来转去,想在队伍里寻找自己的熟人.队列中任意两个人A和B,如果他们是相邻或他们之间没有人比A或B高,那么他们是可以互相看得见的. ...

  9. 移动电力猫HG260GT pon实现路由拨号

    帐号CMCCAdmin密码aDm8H%MdA 需要将原来上网的路由模式改成如下图中的桥接模式 实际应该就是将上网vlan连接到了1号口,这样路由就可以通过一号口接入拨号了 修改后再通过无线接入路由就不 ...

  10. exec sp_spaceused如何只返回一个结果集(转载)

    问: 我想把每天数据库的大小自动保存到table中但是exec sp_spaceused是返回2个表,执行下面的语句出错,如何解决? drop table db_size go create tabl ...