php文件操作(最后进行文件常用函数封装)
文件信息相关API $filename="./1-file.php"; //filetype($filename):获取文件的类型,返回的是文件的类型 echo '文件类型为:',filetype($filename),"n";file //filesize($filename):获得文件的大小,返回字节 echo '文件大小为:',1)">filesize(1214 //filectime($filename):获取文件的创建时间 echo '文件创建时间为:',1)">filectime(1578719729 date('Y年m月d日 H:i:s',1)">$filename)),1)">2020年01月11日 13:15:29 //filemtime($filename):文件的修改时间 echo '文件的修改时间为:',1)">date("Y/m/d H:i:s",1)">filemtime(2020/01/11 14:28:20 //fileatime($filename):文件的最后访问时间 echo '文件的最后访问时间为:',1)">fileatime(2020/01/11 14:28:20 检测文件是否可读、可写、可执行is_readable()、is_writeable()、is_executable(); var_dump( is_readable(bool(true) is_writable(is_writeable(is_executable($filename)bool(false) ); is_file($filename):检测是否为文件,并且文件存在 var_dump(is_file($filename));bool(true) pathinfo():文件路径相关信息 $filename="./test1.txt"; $pathinfo=pathinfo($filename); print_r($pathinfo/* Array ( [dirname] => . [basename] => test1.txt [extension] => txt [filename] => test1 ) */ echo '文件扩展名:',1)">$filename,PATHINFO_EXTENSION),1)">txt $filename=__FILE__; echo D:phpstudy_proWWWphptest 2-path.php php 2-path //basename():返回路径中的文件名部分 basename(2-path //dirname():返回文件名中路径部分 dirname(D:phpstudy_proWWWphptest //file_exists():检测文件或者目录是否存在 file_exists(D:phpstudy_proWWWphptest2-path.php:31:bool(true) touch('aa.txt'); 文件相关操作 touch($filename):创建文件 $filename='test1.txt'touch(bool(true) //unlink($filename):删除指定文件 unlink(bool(true) //检测文件存在则删除 if()){ )){ echo '文件删除成功'; }else{ echo '文件删除失败'; } }{ echo '要删除的文件不存在';要删除的文件不存在 } rename($filename,$newname):重命名或者剪切文件 $newname='test111.txt'rename($newnameecho '重命名成功';重命名成功 }echo '重命名失败'; } 将test123.txt剪切到test目录下test123.txt $filename='test123.txt'; $path='./test/test123.txt'; )){ $path)){ echo '文件剪切成功'; }{ echo '文件剪切失败';文件剪切失败 } }{ echo '文件不存在'; } copy($source,$dest):复制文件 $source='2-path.php'$dest='test123/2-path.php'copy($source,1)">$destecho '文件拷贝成功'; }echo '文件拷贝失败';文件拷贝失败 } 拷贝远程文件需要开启PHP配置文件中的allow_url_fopen=On copy('http://blog.phpfamily.org/wp-content/uploads/2016/09/king-1.jpg','./king-1.jpg'));bool(false) 文件内容相关操作 fopen():打开指定文件,以指定的方式来打开 $handle=fopen(); var_dump($handle);resource(5) of type (stream) //fread():读取文件内容 一个中文3个字节 $res=fread($handle,3echo $res,1)">这 是(接着上一次继续读取) //filesize() 函数返回指定文件的大小 55 )); (接着上一次继续读取)读取全部内容 //一段测试文本 //这是另一段测试文本hh //ftell返回文件指针读/写的位置 ftell($handle),1)">55 string(0) "" //fseek($handle,$num):重置指针 fseek(string(21) "这是一段测试文" //fclose($handle):关闭文件句柄 fclose($handlebool(false) 文件写入 $filename=__DIR__.'/aa.txt'rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在 fwrite()/fputs():写入内容 //注意:fwrite向文件写入内容,如果之前有内容,会产生覆盖 fwrite(abc是一段测试文本 //这是另一段测试文本hh 文件追加 如果文件不存在会创建, //如果文件存在,会先将文件内容截断为0,接着在开始写入 $filename="./aa.txt"ab+ 追加模式 PHP_EOL.'hello king'abc是一段测试文本 //这是另一段测试文本hh //hello king 截断文件 $filename='aa.txt'ftruncate():截断文件 ftruncate(abc? 第四个中文被截断后的奇葩效果哈哈哈哈 检测文件指针是否到了文件末尾 feof():检测文件指针是否到了文件末尾 while(!feof()){ 一个字符一个字符读取 // echo fgetc($handle); //一行一行读取 fgets($handle)."n"; 一行一行读取,并且过滤HTML标记 strip_tags($handle))."n"fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记 fgetss(); } fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段 $filename='user.csv'); $rows=[]; while($row=fgetcsv()){ $rows[]=$row; } $rows); fopen('user1.csv','-'); } fputcsv() 函数将行格式化为 CSV 并写入一个打开的文件 $filename='user3.csv'); $data=[ ['id'=>1,'courseName'=>'ios','courseDesc'=>'this is ios'],1)"> ['id'=>2,'courseName'=>'android','courseDesc'=>'this is android'],1)"> ['id'=>3,'courseName'=>'swift','courseDesc'=>'this is swift'] ]; foreach($data as $val){ fputcsv($val,1)">); } $handle); 获取到文件中的文本 $string=file_get_contents($stringabc是一段测试文本 //这是另一段测试文本hh //hello king 向文件中写入内容 $filename='./aa.txt'file_put_contents($filename,$data):向文件中写入内容 //$data是字符串格式 file_put_contents(); $res);this is a test echo "n"如果不想覆盖之前的内容,可以先把文件中读取出来,接着再来写入 $data=$string.'this is a test'$datathis is a testthis is a test //如果文件不存在,file_put_contents()会创建这个文件 $filename='aaa.txt'[ ['a','b','c'],1)"> ['d','e','f'] ]; ); 数组或者对象序列化之后写入文件 $data=['a','c']; serialize(print_r(unserialize($res)); ( //[0] => a //[1] => b //[2] => c //) // 将数组或者对象转换成json之后写入文件 ] ]; $data=json_encode($res=json_decode( //Array //( // [0] => Array // ( // [0] => a // [1] => b //[2] => c // ) // // [1] => Array //( // [0] => d // [1] => e //[2] => f // ) // //) 常用函数封装: 【文件常用操作函数封装】 * * 创建文件操作 * @method create_file * @param string $filename 文件名 * @return boolean true|false function create_file(string ){ 检测文件是否存在,不存在则创建 return false; } 检测目录是否存在,不存在则创建 if(!file_exists())){ 创建目录,可以创建多级 mkdir(true); } ){ ; } var_dump(create_file('2.txt'));bool(true) var_dump(create_file('a/4.txt'));bool(true) * * 删除文件操作 * @method del_file * @param string $filename 文件名 * @return boolean true|false function del_file(检测删除的文件是否存在,并且是否有权限操作 $filename)||!var_dump(del_file('a/3.txt'));bool(false) * * 拷贝文件操作 * @method copy_file * @param string $filename 文件名 * @param string $dest 指定目录 * @return boolean true|false function copy_file(检测$dest是否是目标并且这个目录是否存在,不存在则创建 is_dir(mkdir($dest,1)">); } $destName=$dest.DIRECTORY_SEPARATOR.); 检测目标路径下是否存在同名文件 $destName拷贝文件 ; } var_dump(copy_file('2.txt','a'));* * 重命名操作 * @method rename_file * @param string $oldName 原文件 * @param string $newName 新文件名 * @return boolean true|false function rename_file($oldName,1)">$newName检测原文件并且存在 $oldName得到原文件所在的路径 $path=); $path.DIRECTORY_SEPARATOR. var_dump(rename_file('2.txt','333.txt')); * * 剪切文件操作 * @method cut_file * @param string $filename 原文件 * @param string $dest 目标路径 * @return boolean true|false function cut_file(var_dump(cut_file('333.txt','a'var_dump(cut_file('22.txt','a')); 【文件信息相关函数封装】 * * 返回文件信息 * @method get_file_info * @param string $filename 文件名 * @return mixed 文件信息相关数组|false function get_file_info(return [ 'atime'=>date("Y-m-d H:i:s",'mtime'=>) ]; } var_dump(get_file_info('22.txt')); * * 字节单位转换的函数 * @method trans_byte * @param int $byte 字节 * @param integer $precision 默认精度,保留小数点后2位 * @return string 转换之后的字符串 function trans_byte(int $byte,int $precision=2){ $kb=1024; $mb=1024*$kb$gb=1024*$mb$tb=1024*$gbif($byte<return $byte.'B'; }elseif(round($byte/$kb,1)">$precision).'KB'$mb,1)">$precision).'MB'$tb$gb,1)">$precision).'GB'$tb,1)">$precision).'TB'; } } var_dump(trans_byte(12345678));string(7) "11.77MB" 【文件读写函数封装】 * * 读取文件内容,返回字符串 * @method read_file * @param string $filename 文件名 * @return mixed 文件内容|false function read_file(检测是否是一个文件并且文件已存在 $filename) && var_dump(read_file('232.txt'));* * 读取文件中的内容到数组中 * @method read_file_array * @param string $filename 文件名 * @param boolean $skip_empty_lines 是否过滤空行 * @return mixed array|false function read_file_array($skip_empty_lines=$filename)&&$skip_empty_lines){ file(FILE_SKIP_EMPTY_LINES); }{ ); } } var_dump(read_file_array('22.txt',1)">* * 向文件中写入内容 * @method write_file * @param string $filename 文件名 * @param mixed $data 数据,数组和对象需要处理 * @return boolean true|false function write_file($dirname=检测目标路径是否存在 $dirname$dirname,1)">判断内容是否是数组或者对象 is_array($data)||is_object(序列化数据 向文件中写入内容 $data)!==var_dump(write_file('c/1.txt',['a',1)">])); * * 向文件中写入内容,之前内容不清空 * @method write_file1 * @param string $filename 文件名 * @param mixed $data 数据 * @param boolean $clearFlag 是否清空文件 * @return boolean true|false function write_file1($data,1)">$clearFlag=检测文件是否存在并且可读 读取文件内容,之后和新写入的内容拼装到一起 $filename)>0){ $srcData=); } } 拼装到一起 $srcData.var_dump(write_file1('22.txt','hello world'* * 截断文件到指定大小 * @method truncate_file * @param string $filename 文件名 * @param int $length 长度 * @return boolean true|false function truncate_file($length检测是否是文件 )){ ); $length=$length<0?0:; ); var_dump(truncate_file('22.txt',2)); 【文件下载函数封装】 * * 下载文件 * @method down_file * @param string $filename 文件名 * @param array $allowDownExt 允许下载的文件类型 * @return void function down_file(array $allowDownExt=array('jpeg','jpg','png','gif','txt','html','php','rar','zip'检测下载文件是否存在,并且可读 检测文件类型是否允许下载 $ext=strtolower(PATHINFO_EXTENSION)); in_array($ext,1)">$allowDownExt通过header()发送头信息 //告诉浏览器输出的是字节流 header('Content-Type:application/octet-stream'); 告诉浏览器返回的文件大小是按照字节进行计算的 header('Accept-Ranges: bytes'告诉浏览器返回的文件大小 header('Accept-Length: '.)); 告诉浏览器文件作为附件处理,告诉浏览器最终下载完的文件名称 header('Content-Disposition: attachment;filename=king_'.读取文件中的内容 readfile(exit; } 规定每次读取文件的字节数为1024字节,直接输出数据 function down_file1(通过header()发送头信息 //告诉浏览器输出的是字节流 ); $filesize=header('Accept-Length: '.$filesize读取文件中的内容 //规定每次读取文件的字节数为1024字节,直接输出数据 $read_buffer=1024$sum_buffer=0$handle) && $sum_buffer<$read_buffer$sum_buffer+=在具体页面调用时 require_once 'file.func.php'$filename=$_GET['filename']; down_file1($filename); 【文件上传函数封装】 * * 单文件上传 * @method upload_file * @param array $fileInfo 上传文件的信息,是一个数组 * @param string $uploadPath 文件上传默认路径 * @param boolean $imageFlag 是否检测真实图片 * @param array $allowExt 允许上传的文件类型 * @return mixed 成功返回文件最终保存路径及名称,失败返回false function upload_file($fileInfo,1)">$uploadPath='./uploads',1)">$imageFlag=true,1)">$allowExt=$maxSize=2097152define('UPLOAD_ERRS',1)">[ 'upload_max_filesize'=>'超过了PHP配置文件中upload_max_filesize选项的值','form_max_size'=>'超过了表单MAX_FILE_SIZE选项的值','upload_file_partial'=>'文件部分被上传','no_upload_file_select'=>'没有选择上传文件','upload_system_error'=>'系统错误','no_allow_ext'=>'非法文件类型','exceed_max_size'=>'超出允许上传的最大值','not_true_image'=>'文件不是真实图片','not_http_post'=>'文件不是通过HTTP POST方式上传上来的','move_error'=>'文件移动失败' ]); 检测是否上传是否有错误 $fileInfo['error']===UPLOAD_ERR_OK){ 检测上传文件类型 $fileInfo['name'],1)">PATHINFO_EXTENSION)); $allowExt)){ echo UPLOAD_ERRS['no_allow_ext']; ; } 检测上传文件大小是否符合规范 $fileInfo['size']>$maxSizeecho UPLOAD_ERRS['exceed_max_size'检测是否是真实图片 $imageFlagif(@!getimagesize($fileInfo['tmp_name'])){ echo UPLOAD_ERRS['not_true_image']; ; } } 检测文件是否通过HTTP POST方式上传上来的 is_uploaded_file(])){ return UPLOAD_ERRS['not_http_post']; } 检测目标目录是否存在,不存在则创建 $uploadPath$uploadPath,1)">); } 生成唯一文件名,防止重名产生覆盖 $uniName=md5(uniqid(microtime(true),1)">true)).'.'.$ext; $dest=$uploadPath.DIRECTORY_SEPARATOR.$uniName; 移动文件 move_uploaded_file($fileInfo['tmp_name'],1)">echo UPLOAD_ERRS['move_error'echo '文件上传成功'switch($fileInfo['error']){ case 1: $mes='超过了PHP配置文件中upload_max_filesize选项的值'; $mes=UPLOAD_ERRS['upload_max_filesize'break; case 2: $mes=UPLOAD_ERRS['form_max_size'case 3: $mes=UPLAOD_ERRS['upload_file_partial'case 4: $mes=UPLOAD_ERRS['no_upload_file_select'case 6: case 7: case 8: $mes=UPLAOD_ERRS['upload_system_error'$mes; } } $fileInfo=$_FILES['myFile']; var_dump(upload_file($fileInfo)); 【文件压缩与解压缩函数封装】 * * 压缩单个文件 * @method zip_file * @param string $filename 文件名 * @return boolean true|false function zip_file(; } $zip=new ZipArchive(); $zipName=$filename).'.zip'打开指定压缩包,不存在则创建,存在则覆盖 $zip->open($zipName,ZipArchive::CREATE|ZipArchive::OVERWRITE)){ 将文件添加到压缩包中 $zip->addFile()){ $zip->close(); @); ; } } var_dump(zip_file('22.txt')); // func_get_args // test1.zip * * 多文件压缩 * @method zip_files * @param string $zipName 压缩包的名称,.zip结尾 * @param string $files 需要压缩文件名,可以是多个 * @return boolean true|false function zip_files($files检测压缩包名称是否正确 $zipExt=if('zip'!==$zipExt ZipArchive(); $files $file)){ ); } } close(); var_dump(zip_files('test1.zip','22.txt')); // var_dump(zip_files('test2.zip','doUpload.php','downLoad.html','upload.html')); * * 解压缩 * @method unzip_file * @param string $zipName 压缩包名称 * @param string $dest 解压到指定目录 * @return boolean true|false */ function unzip_file(检测要解压压缩包是否存在 $zipName; } 检测目标路径是否存在 ); } ZipArchive(); $zip->extractTo(); close(); ; } var_dump(unzip_file('test2.zip','a')); $_FILES 参数详解:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |