File Function.php
来源:原创
时间:2016-07-23
作者:脚本小站
分类:代码笔记
<?php //============================================================ //------------------删除文件夹中所有的文件------------------- /** * 删除文件夹中所有的文件,不包括文件夹 * * @param $path 路径 如./path/dir/ */ function delete_all_files_in_the_directory($path){ $dir = opendir($path); while($file = readdir($dir)){ $full_path = $path.'/'.$file; if($file != '.' and $file != '..'){ if(is_file($full_path)){ unlink($full_path); }else{ delete_all_files_in_the_directory($full_path); } } } closedir($dir); } //====================文件类型与属性信息====================== //------------------------------------------------------------ filetype //返回文件或目录的字符串类型 filetype("Hello.txt"); filetype("Hello"); //判断文件类型 if(filetype=="dir"){ echo "This is dir"; }else{ echo "This is file"; } //判断文件 is_file //判断文件是否正常的文件 is_dir* //判断给定文件名是否是一个目录 is_readable //判断文件是否可读 is_link //判断给定文件名是否为一个符号连接 is_writable //判断给定的文件名是否可写 is_executable* //判断给定文件名是否可执行 is_link //判断给定文件名是否为一个符号连接 is_writable* //判断给定的文件名是否可写 is_writeable //is_writable()的别名 is_readable* //判断给定文件名是否可读 is_uploaded_file* //判断文件是否是通过 HTTP POST 上传的 //--------------------------------------------------------- //-------------------判断文件类型与大小------------------- function GetFilePro($FileName){ if(!file_exists($FileName)){ echo "File or dir ".$FileName."is not exists<br>"; return; }else{ echo "Filetype is ".filetype($FileName)."<br>"; } if(is_file($FileName)){ echo "This is file<br>"; echo "File size is ".filesize($FileName)."<br>"; } if(is_dir($FileName)){ echo "This is dir<br>"; } if(is_readable($FileName)){ echo "This file can read<br>"; } if(is_writable($FileName)){ echo "This file can write<br>"; } if(is_executable($FileName)){ echo "This file can execute<br>"; } //输出文件的创建,修改,访问时间 echo "File creation date is ".date('Y-m-d H:i:s',filectime($FileName)) ."<br>"; echo "File modification time is ".date('Y-m-d H:i:s',filemtime($FileName)) ."<br>"; echo "File access time is ".date('Y-m-d H:i:s',fileatime($FileName))."<br>"; } GetFilePro("hello.html"); //--------------------------------------------------------- //----------------------时区设置--------------------------- date_default_timezone_set('PRC'); //将时区设置成中华人民共和国 //--------------------------------------------------------- //-------------------文件大小单位判断--------------------- /** * 返回人性化显示文件大小名称 * @param $FileSize int 文件大小 * @return String 加单位名称文件大小 */ function GetFileSize($FileSize){//参数:文件大小 $Unit="Byte"; if($FileSize>=pow(2,40)){ //文件大小除以二的四十次方并保留两位小数 $FileSize=round($FileSize/pow(2,40),2); $Unit="TB"; }else if($FileSize>=pow(2,30)){ $FileSize=round($FileSize/pow(2,30),2); $Unit="GB"; }else if($FileSize>=pow(2,20)){ $FileSize=round($FileSize/pow(2,20),2); $Unit="MB"; }else if($FileSize>=pow(2,10)){ $FileSize=round($FileSize/pow(2,10),2); $Unit="KB"; }else{ $Unit="Byte"; } return $FileSize.$Unit; } //--------------------------------------------------------- //-------------------stat()取得文件信息------------------- //取得文件信息 echo "<pre>"; print_r(stat('hello.html')); echo "</pre>"; /* Array ( [0] => 2 [1] => 0 [2] => 33206 [3] => 1 [4] => 0 [5] => 0 [6] => 2 [7] => 341 [8] => 1384532912 [9] => 1384532912 [10] => 1384532085 [11] => -1 [12] => -1 [dev] => 2 [ino] => 0 [mode] => 33206 [nlink] => 1 [uid] => 0 [gid] => 0 [rdev] => 2 [size] => 341 [atime] => 1384532912 [mtime] => 1384532912 [ctime] => 1384532085 [blksize] => -1 [blocks] => -1 )*/ //--------------------------------------------------------- //---------------------文件缓存实例----------------------- $CacheTime=5; //缓存时间 $CacheFile="hello.txt"; if(file_exists($CacheFile) && (time()-$CacheTime) < filemtime($CacheFile)){ echo file_get_contents($CacheFile); //如果缓存在缓存时间类就读出缓存数据 }else{ file_put_contents($CacheFile,date('Y-m-d H:i:s',time())); } //============================================================= //-------------------文件路径及操作权限----------------------- . //当前目录 .. //上一级目录 basename($url) //取路径的文件名 dirname($url) //取路径的路径部分 //--------------------------------------------------------- //-----------------pathinfo()取出路径信息----------------- $URL="C:/lamp/apache2/htdocs/hello.html"; echo "<pre>"; print_r(pathinfo($URL)); echo "</pre>"; /*Array ( [dirname] => C:/lamp/apache2/htdocs [basename] => hello.html [extension] => html [filename] => hello )*/ //--------------------------------------------------------- //--------------------文件的操作-------------------------- //删除文件 unlink("./Hello.php"); //拷贝文件 copy("./Test/Old.php","./New.php"); //创建文件 touch("./Hello.php") //移动文件 rename("./Old.php","./Hello/New.php",[$Content]); //--------------------------------------------------------- //---------------------文件权限---------------------------- 7 7 7 4+2+1 4+2+1 4+2+1 r w x r w x r w x //改变文件模式 chmod("./Hello.php",0755); //改变文件的所有者 chown("admin","./Hello.php"); //改变文件所属的组 chgrp("./Hello.php","admin"); filegroup //取得文件的组 fileowner //取得文件的所有者 //============================================================= //---------------------文件的读写与操作----------------------- //--------------------读取函数----------------------------- //1.把整个文件读入一个字符串中 file_get_contents(); //2.把整个文件读入一个数组中,一行就是一个数组元素 file(); //3.读取文件若成功,则返回从文件中读入的字节数 readfile(); //4. fopen(); fread(); //读取指定长度 fgetc(); //读取单个字符 fgets(); //读取一行字符 feof(); //读取文件出错或结尾返回真 fclose(); //关闭fopen打开的文件 //--------------------------------------------------------- //---------------------写入函数---------------------------- //1. $File = fopen("./Test.txt"); fwrite($File,"Hello\n"); //2. file_put_contents("Test.txt","Hello",FILE_APPEND); FILE_APPEND//追加法术 //--------------------------------------------------------- //------------------------例------------------------------- //1.读取文件(覆盖重写) $str = file_get_contents("Test.txt"); echo $str; //2.读取一个文件并输出,不用echo readfile("./Hello.php"); //3.将文件中的每一行作为数组的一个元素 $Arr=file("./Test.txt"); echo "<pre>"; print_r($Arr); echo "</pre>"; /*Array ( [0] => Hello [1] => How are you [2] => I am fine [3] => Thank you [4] => And You )*/ //统计行数 echo count($Arr); //4. //--------------------------------------------------------- //-----------------------fread()--------------------------- //读取本地文件 $File=fopen("./Test.txt","r"); echo fread($File,filesize("./Test.txt")); fclose($File); //读取远程文件 $File=fopen("http://www.baidu.com","r"); $str=""; while(!feof($File)){ $str.=fread($File,100); } echo $str; //输出字符串 fclose($File); //--------------------------------------------------------- //------------------------fgets()-------------------------- //每次读取一行 $File=fopen("./Test.txt","r"); $str=""; $i=0; while(!feof($File)){ $str.=fgets($File); $i++; } echo $i; //输出行数 fclose($File); //--------------------------------------------------------- //------------------------fgetc()-------------------------- //每次读取单个字符 $File=fopen("./Test.txt","r"); $str=""; $i=0; while(!feof($File)){ $str.=fgetc($File); $i++; } echo $i; //输出字符数 fclose($File); //--------------------------------------------------------- //------------------------fopen()-------------------------- //"+"表示读写 r //只读 r+ w //只写,创建,重写 w+ a //只写,创建,追加 a+ b //二进制打开 (rb 读二进制 wb 写二进制) t //文本模式打开 //fopen返回文件资源 $File=fopen("./Test.txt","w"); for($i=0;$i < 10;$i++){ fwrite($File,"Hello\n"); } fclose($File); //========================文件指针============================ //------------------------------------------------------------ ftell($file); //返回指针位置 fseek($file,10); //指定指针位置 fseek($file,10,SEEK_SET); //开始位置后十个(默认) fseek($file,10,SEEK_CUR); //当前位置后十个 fseek($file,-10,SEEK_END); //结尾位置前十个 fread(); //读多少指针移动多少 rewind(); //回到文件头部 //--------------------------------------------------------- //----------------------ftell()---------------------------- $file=fopen("./Test.txt","r"); echo ftell($file)."<br>"; //输出指针位置 echo fread($file,10)."<br>"; echo ftell($file)."<br>"; fclose($file); //--------------------------------------------------------- //-----------------------fseek()--------------------------- $file=fopen("./Test.txt","r"); echo fread($file,6); fseek($file,2); //将文件指针移到文件开头后两个 echo fread($file,6); fclose($file); //--------------------------------------------------------- //------------------------rewind()------------------------- $file=fopen("./Test.txt","r"); echo ftell($file); echo fread($file,6); rewind($file); //将指针移到开头 echo ftell($file); fclose($file); //===========================文件锁============================ //------------------------------------------------------------ flock($file,LOCK_SH); //读文件锁 flock($file,LOCK_EX); //写文件锁 flock($file,LOCK_UN); //释放锁 //--------------------------------------------------------- //------------------------flock()-------------------------- //读文件加锁 if(flock($file,LOCK_SH)){ //加读文件锁 $str=fread($file,filesize($fileName)); flock($file,LOCK_UN); //开锁 } //写文件加锁 if(flock($file,LOCK_EX)){ //加写文件锁 fwrite($file,$contents); flock($file,LOCK_UN); //开锁 } //============================================================ //------------------------目录的操作------------------------- //目录遍历 opendir //打开目录 readdir //遍历目录 closedir //关闭目录 rewinddir //目录指针倒回 scandir //列出指定路径中的文件和目录 getcwd //取得当前工作目录 chdir //改变目录 chroot //改变根目录 //--------------------------------------------------------- //--------------------目录与文件遍历---------------------- //打开目录 $dir = opendir("./"); //循环目录 while ($fileName = readdir($dir)){ echo "filename: ".$fileName."<br/>"; //输出目录与文件 } //关闭目录 closedir($dir); //--------------------------------------------------------- //------------------判断是文件还是目录-------------------- $dirName="hello"; $dir = opendir($dirName); while ($fileName = readdir($dir)){ $subDirName=$dirName."./".$fileName; //$file当前目录下的文件 if(is_dir($subDirName)){ echo "dirname: ".$fileName."<br>"; }else{ echo "filename: ".$fileName."<br>"; } } closedir($dir); //--------------------------------------------------------- //-------------------统计目录大小------------------------- /** * 统计目录大小 * @param $dirName String 目录所在路径 * @return String 返回一个目录的大小 */ function dirSize($dirName){ $dirSize=0; //打开目录 $dir=opendir($dirName); //遍历目录 while($fileName = readdir($dir)){ $subDirName=$dirName.'/'.$fileName; if($fileName!="." && $fileName!=".."){ if(is_dir($subDirName)){ $dirSize+=dirSize($subDirName);//如果是文件夹则递归调用自己 }else{ $dirSize+=filesize($subDirName);//累加文件大小 } } } closedir($dir);//关闭目录 return $dirSize; } //函数调用 echo dirSize("www"); //--------------------------------------------------------- //------------------------mkdir()-------------------------- //创建目录 mkdir("dirName","755"); //--------------------------------------------------------- //------------------------删除目录------------------------ /** * 删除目录 * @param $dirName 目录所在路径 * @return boolean 删除是否成功 */ function delDir($dirName){ //判断是否存在 if(file_exists($dirName)){ $dir=opendir($dirName); //遍历目录 while($fileName=readdir($dir)){ if($fileName!="." && $fileName!=".."){ $subDirName=$dirName."/".$fileName; if(is_dir($subDirName)){ delDir($subDirName);//递归 }else{ unlink($subDirName);//删除文件 } } } closedir($dir);//关闭目录 $rmdir=rmdir($dirName); } return $rmdir; } //调用 delDir("hello"); //--------------------------------------------------------- //------------------------移动函数------------------------- rename("hello","hello/Test"); //------------------------------------------------------------ //-----------------------复制目录函数------------------------ //参数:源目录,目标目录 /** * 复制目录函数 * @param $dirSource 要拷贝的目录 * @param $dirDestination 将文件要拷贝到的目录 */ function copyDir($dirSource,$dirDestination){ //目标是文件则停止复制 if(is_file($dirDestination)){ echo "It is not Directory"; return ; } //目标文件不存在则复制文件 if(!file_exists($dirDestination)){ mkdir($dirDestination); } //打开文件夹 $dir=opendir($dirSource); //循环操作目录文件 while($fileName=readdir($dir)){ if($fileName!="." && $fileName!=".."){ //源文件夹的子文件夹 $subDirNameSource=$dirSource."/".$fileName; //目标文件夹的子文件夹 $subDirNameDestination=$dirDestination."/".$fileName; if(is_dir($subDirNameSource)){ copyDir($subDirNameSource,$subDirNameDestination);//递归 }else{ //如果是文件,则从源目录拷贝到目标目录 copy($subDirNameSource,$subDirNameDestination); } } } closedir($dir); } //调用函数 copyDir("hello","nihao"); //============================================================ //---------------------------文件下载------------------------- /* 1.请求(顺序) 1.HTTP 1.1 协议 版本 2.头信息 3.表单信息 2.响应(顺序) 1.状态 200ok(正常) 或 404 (页面没找到) 2.响应头信息 3.数据发送 */ //下载链接显示名 $fileName="hello.html"; //发送头信息 header('Content-Disposition: attachment; filename='.$fileName); //读取文件并直接发送 readfile('hello.html'); //============================================================ //-------------------------文件上传--------------------------- //php.ini配置文件中上传相关的选项 //开启上传功能 file_uploads = on //上传文件的最大值,勿超过内存大小 upload_max_filesize = 20M //文件临时存储的位置,脚本执行完文件自动删除,一般不指定默认即可 upload_tmp_dir = c:/upload/... //post所有值的最大尺寸,必须大于文件上传的值 post_max_size = 25M //上传表单书写方式 //1.必须用post方法提交 //2.表单类型为type="file" //3.表单数据的编码方式enctype="multipart/form-data" //4.用$_FILES 接收表单信息 //5.多文件上传时将表单name名改为数组形式name="pic[]" /* <form action="" method="post" enctype="multipart/form-data" > <input type="file" name="pic[]" /> <input type="file" name="pic[]" /> //上传文件超过指定值时的提示 <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> </form> */ //$_FILES 数组中的信息 /*Array ( [pic] => Array ( [name] => Angelababy03.jpg [type] => image/jpeg [tmp_name] => C:\Windows\Temp\phpE9FF.tmp [error] => 0 [size] => 78558 ) )*/ //------------------------------------------------------------ //--------------------------上传处理方法--------------------- //1.使用$_FILES['pic']['error']检查错误 if($_FILES["pic"]["error"] > 0){ //其值为 0,没有错误发生,文件上传成功 switch($_FILES["pic"]["error"]) { case 1: echo "其值为 1,上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值";break; case 2: echo "其值为 2,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";break; case 3: echo "其值为3,文件只有部分被上传";break; case 4: echo "其值为4,没有文件被上传";break; case 6: echo "其值为6,找不到临时文件夹";break; case 7: echo "其值为7,文件写入失败";break; default: echo "末知错误"; } exit; } //2.使用$_FILES['pic']['size']限制大小 单位字节 1M=1000 000(约) if($_FILES["pic"]["size"] > $maxsize ) { echo "上传的文件太大,不能超过{$maxsize}字节"; exit; } //3.判断文件类型 //使用$_FILES['pic']['type']或文件的扩展名限制类型 $types = ['jpg','jpeg','png','gif']; $hz = pathinfo($_FILES['pic']['name'],PATHINFO_EXTENSION); if(!in_array($hz,$types)){ echo "文件类型错误"; exit; } //4.让上传后的文件改名 $filepath="./uploads/"; $randname=date("YmdHis").uniqid().rand(100, 999).".".$hz; //将临时位置的文件移动到指定的目录上即可 if(is_uploaded_file($_FILES["pic"]["tmp_name"])){ if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){ echo "上传成功"; }else{ echo "上传失败"; } }else{ echo "不是一个上传文件"; } //============================================================ //------------------------------------------------------------ disk_free_space("url") //返回目录中的可用空间 disk_total_space("url") //返回一个目录的磁盘总大小 fscanf("$string","%s\t%s\t%s\n")//从文件中格式化输入 lstat(file) //返回文件属性等信息 tempnam() //建立一个具有唯一文件名的文件 symlink() //建立符号连接 fstat($file) //通过已打开的文件指针取得文件信息 linkinfo(url) //获取一个连接的信息 popen(command,mode) //打开进程文件指针 //command 命令 //mode r或w //============================================================= //------------------------------------------------------------- //****************************读取文件************** fgetcsv //从文件指针中读入一行并解析 CSV 字段 fgetss //从文件指针中读取一行并过滤掉 HTML 标记 //****************************文件操作************** clearstatcache //清除文件状态缓存 //****************************输出****************** fpassthru //输出文件指针处的所有剩余数据 //****************************新建****************** tmpfile //建立一个临时文件 tempnam //建立一个具有唯一文件名的文件 //**************************文件名或路径名********* pathinfo* //返回文件路径的信息 realpath //返回规范化的绝对路径名 glob //寻找与模式匹配的文件路径 readlink //返回符号连接指向的目标 //****************************文件中操作************ fscanf //从文件中格式化输入 fflush //将缓冲内容输出到文件 pclose //关闭进程文件指针 popen //打开进程文件指针 fputcsv //将行格式化为 CSV 并写入文件指针 ftruncate //将文件截断到给定的长度 //**************************取得文件信息************ fileinode //取得文件的 inode fileperms //取得文件的权限 fstat* //通过已打开的文件指针取得文件信息 linkinfo //获取一个连接的信息 lstat //给出一个文件或符号连接的信息 parse_ini_file //解析一个配置文件 //**************************其他********************* set_file_buffer //stream_set_write_buffer()的别名 fnmatch //用模式匹配文件名 link //建立一个硬连接 symlink //建立符号连接 //------------------------------------------------------------- //=============================================================