1、文件检测1.1、存在性检测:bool ?file_exists(string $filename);1.2、类型检测:string filetype(string $filename),可能的返回值有 fifo,char,dir,block,link,file 和 unknown,出错返回falsebool ?is_file(string $filename);判断是否是文件bool ?is_dir(string $filename);判断是否是目录1.3、文件大小检测:filesize(string $filename);文件大小或目录大小2、打开和关闭文件2.1、resource fopen(string filename,string mode):打开文件或URL,mode可设置文件的打开模式打开模式:"r" ??只读方式打开,将文件指针指向文件头"r+" ?读写方式打开,将文件指针指向文件头"w" ??写入方式打开,将文件指针指向文件头并将文件大小截为零,文件不存在则新建文件"w+" ?读写方式打开,将文件指针指向文件头并将文件大小截为零,文件不存在则新建文件"a" ??写入方式打开,将文件指针指向文件结尾,如果文件不存在则创建文件"a+" ?读写方式打开,将文件指针指向文件结尾,如果文件不存在则创建文件返回值:函数执行成功返回一个文件句柄,否则返回 FALSE。fopen()函数也用于创建文件:如果用 fopen() 打开并不存在的文件,则会创建文件例:创建名为 "testfile.txt" 的新文件:$myfile = fopen("testfile.txt", "w");2.2、bool fclose(resource $handle):关闭一个已打开的文件3、文件指针操作3.1、bool rewind(resource $handle);将指针设为文件流的开头3.2、int fseek(resource $handle,int $offset[,int $whence = SEEK_SET] );将指针在文件中定位,成功则返回 0;否则返回 -13.3、ftell(resource $handle);返回文件指针的读/写位置4、读取文件内容4.1、读取相关检测函数is_readable(string $filename);判断给定文件名是否可读feof(resource $handle);检查是否已到达文件末尾 "end-of-file" (EOF)如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括 socket 超时),其它情况则返回 FALSE。4.2、读取fopen打开的文件资源string fread(resource $handle,int $length)从文件读取最多length个字节。length参数常搭配filesize()函数使用应用:读取图片内容并输出header(‘content-type:image/jpeg‘);$file=‘test.jpg‘;$fr=fopen($file,‘r‘) or die("Unable to open file!");echo fread($fr,filesize($file));fclose($fr);string fgets(resource $handle[, int $length ])从文件资源中读取一行,调用此函数后,文件指针会移动到下一行。拓展:fgetss函数从文件指针中读取一行并过滤掉 HTML 标记string fgetc(resource $handle)从文件资源中读取一个字符,调用此函数后,文件指针会移动到下一个字符。应用:逐字符读取文件,直到 end-of-file:$myfile = fopen("test.txt", "r") or die("Unable to open file!");while(!feof($myfile)) {echo fgetc($myfile);}fclose($myfile);4.3、不需要资源,直接读取int readfile(string $filename[, bool $use_include_path = false[,resource $context ]])读取文件并写入到输出缓冲,不用echo,读取后直接输出array file(string $filename);将文件的每一行作为一个元素存入数组中返回$f_arr = file(‘test.txt‘);foreach($f_arr as $cont){echo $cont."";}string file_get_contents(string $filename[,bool $use_include_path=false[,resource $context[,int $offset = -1[,int $maxlen ]]]])将整个文件读入一个字符串,此函数性能比fread函数性能好应用:网站数据采集器$url=‘http://www.baidu.com‘;$str=file_get_contents($url);echo $str;5、写入文件5.1、int fwrite(resource $handle,string $string[,int $length ])将字符串写入指定文件,返回写入的字符数,出现错误时则返回 FALSE 5.2、int file_put_contents(string $filename, mixed $data[,int $flags=0[,resource $context]])覆盖写入:file_put_contents($file,‘abc‘);追加写入:file_put_contents($file,‘abc‘,FILE_APPEND);等同于依次调用 fopen(),fwrite()以及fclose() 应用:页面静态化$url=‘http://www.baidu.com‘;$str=file_get_contents($url);file_put_contents(‘baidu.html‘,$str);6、重命名、复制、删除、移动重命名:bool rename(string $oldname,string $newname[,resource $context])复制:bool copy(string $source,string $dest[,resource $context])删除:bool unlink(string $filename[,resource $context])移动(先复制,再删除)$sfile=‘1.jpg‘; $dfile=‘img/‘.$sfile;copy($sfile,$dfile);sleep(3);unlink($sfile);7、文件上传与下载7.1、常见数据格式图片文件image/gif、image/jpg、image/jpeg、image/png纯文件和htmltext/plain、text/html二进制文件application/octet-stream音频格式audio/mpeg视频格式video/avi、video/x-ms-wmv7.2、HTML部分7.1.1、上传文件一般使用POST方法提交7.1.2、上传文件必须设置enctype="multipart/form-data"
7.3、PHP部分7.3.1、上传的文件在PHP中可以通过$_FILES获取超全局数组$_FILES存储的相关数据:$_FILES[‘myfile‘][‘name‘]$_FILES[‘myfile‘][‘type‘]$_FILES[‘myfile‘][‘size‘]$_FILES[‘myfile‘][‘tmp_name‘]$_FILES[‘myfile‘][‘error‘]0 ??//表示没有发生任何错误1 ??//表示上传文件的大小超出了约定值,约定值是upload的值,但不能超过post的值2 ??//上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值3 ??//文件只有部分被上传4 ??//表示没有上传任何文件7.3.2、PHP中文件默认会上传到一个临时目录, 接收完毕之后会自动删除7.3.3、PHP上传文件四部曲a.获取上传文件对应的信息:$fileInfo = $_FILES["upFile"];b.获取上传文件的名称:$fileName = $fileInfo["name"];c.获取上传文件保存的临时路径:$filePath = $fileInfo["tmp_name"];d.移动文件:move_uploaded_file($filePath, "./source/".$fileName);7.4、限制上传7.3.1、php文件上传相关配置(pho.ini)file_uploads = On; 是否允许上传文件 On/Off 默认是Onupload_max_filesize = 2048M ; 上传文件的最大限制post_max_size = 2048M; 通过Post提交的最多数据max_execution_time = 30000; 脚本最长的执行时间 单位为秒max_input_time = 3000; 接收提交的数据的时间限制 单位为秒memory_limit = 2048M; 最大的内存消耗7.3.2、限制大小客户端限制:
服务端限制:$filesize=$_FILES[‘files‘][‘size‘];if($filesize>1000000){echo "对不起,您上传的文件超过规定的大小!!";echo "将在3秒钟后返回前页...";}7.3.3、限制类型获取文件后缀$farr=explode(‘.‘,$_FILES[‘upFile‘][‘name‘]);$fext=array_pop($farr);限制文件上传类型$allows=array(‘jpg‘,‘png‘,‘gif‘);if(in_array($fext,$allows)){···}else{echo "‘文件类型不允许,只允许上传png|jpg|gif!";}7.5、上传文件管理创建上传日期目录$year=date(‘Y‘);$month=date(‘m‘);$day=date(‘d‘);$datedir=$uploaddir.‘/‘.$year.‘-‘.$month.‘-‘.$day;if(!file_exists($datedir)){mkdir($datedir);}获取文件后缀$farr=explode(‘.‘,$_FILES[‘img‘][‘name‘]);$fext=array_pop($farr);文件名中加入时间戳和随机数,预防文件同名和猜测攻击$frand=time().mt_rand();最终上传路径和文件名$dfile=$datedir.‘/‘.$frand.‘.‘.$fext;7.6、多文件上传使用数组格式的表单元素,例:
‘;}}}?>7.7、文件下载$file=$_GET[‘file‘];$downfile=‘img/‘.$file;$filesize=filesize($downfile);header(‘content-type:application/octet-stream‘);header("content-disposition:attachment;filename={$file}");header("content-length:{$filesize}");readfile($downfile);8、目录操作8.1、创建目录bool mkdir(string $pathname[,int $mode=0777[,bool $recursive=false[,resource $context]]])尝试新建一个由 pathname 指定的目录$dir=‘css‘;file_exists($dir)||mkdir($dir);8.2、遍历目录resource opendir(string $path [,resource $context ]);打开目录句柄string readdir([resource $dir_handle]);返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回,失败时返回 FALSE closedir(resource $dir_handle);关闭目录句柄array scandir(string $directory[,int $sorting_order[,resource $context]])返回指定路径中的文件和目录数组,,失败返回false$arr=scandir($dir);foreach($arr as $key=>$val){if($key>1){echo $val.‘
‘;}}8.3、删除空目录rmdir(string $pathname);file_exists($dir)||mkdir($dir);sleep(3);rmdir($dir);8.4、删除非空目录操作步骤:遍历、递归function delDir($dir){$files=scandir($dir);foreach($files as $key=>$val){if($key>1){$file=$dir.‘/‘.$val;if(is_dir($file))delDir($file);elseunlink($file);}}rmdir($dir);}延伸:清空目录及所有子目录文件function clearDir($dir){$files=scandir($dir);foreach($files as $key=>$val){if($key>1){$file=$dir.‘/‘.$val;if(is_dir($file)){clearDir($file);}else{unlink($file);}}}}8.5、复制完整目录function copyDir($dir1,$dir2){mkdir($dir2);$files=scandir($dir1);foreach($files as $key=>$val){if($key>1){$file1=$dir1.‘/‘.$val;$file2=$dir2.‘/‘.$val;if(is_dir($file1)){copyDir($file1,$file2);}else{copy($file1,$file2);}}}}8.6、移动完整目录=>先执行8.5->后执行8.48.7、取得当前工作目录:string getcwd ( void )8.8、改变当前目录:bool chdir(string $directory)
PHP文件系统
原文地址:https://www.cnblogs.com/chuanzi/p/10358684.html