PHP常用的文件操作函数经典收藏
复制代码代码如下:
$path="/home/httpd/html/index.php";$file=basename($path,".php");//$fileissetto"index"
2得到目录部分:dirname();给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。eg:
复制代码代码如下:
$path="/etc/passwd";$file=dirname($path);//$fileissetto"/etc"
3得到路径关联数组pathinfo();得到一个指定路径中的三个部分:目录名,基本名,扩展名。eg:
复制代码代码如下:
$pathinfo=pathinfo("www/test/index.html");var_dump($pathinfo);//$path[''dirname'']$path[''basename'']$path[''extenssion'']
二、文件类型1.filetype();返回文件的类型。可能的值有fifo,char,dir,block,link,file和unknown。eg:
复制代码代码如下:
echofiletype(''/etc/passwd'');//fileechofiletype(''/etc/'');//dir
三、得到给定文件有用信息数组(很有用)1.fstat();通过已打开的文件指针取得文件信息获取由文件指针handle所打开文件的统计信息。本函数和stat()函数相似,除了它是作用于已打开的文件指针而不是文件名。eg:
复制代码代码如下:
//打开文件$fp=fopen("/etc/passwd","r");//取得统计信息$fstat=fstat($fp);//关闭文件fclose($fp);//只显示关联数组部分print_r(array_slice($fstat,13));
2.stat()获取由filename指定的文件的统计信息(类比fstat())四、计算大小1.filesize()返回文件大小的字节数,如果出错返回FALSE并生成一条E_WARNING级的错误。eg:
复制代码代码如下:
//输出类似:somefile.txt:1024bytes$filename=''somefile.txt'';echo$filename.'':''.filesize($filename).''bytes'';2.disk_free_space()获得目录所在磁盘分区的可用空间(字节单位)eg[code]//$df包含根目录下可用的字节数$df=disk_free_space("/");//在Windows下:disk_free_space("C:");disk_free_space("D:");
3.disk_total_space()返回一个目录的磁盘总大小eg:(同上,换掉函数)另:如需要计算一个目录大小,可以编写一个递归函数来实现代码
复制代码代码如下:
functiondir_size($dir){$dir_size=0;if($dh=@opendir($dir)){while(($filename=readdir($dh))!=false){if($filename!=''.''and$filename!=''..''){if(is_file($dir.''/''.$filename)){$dir_size+=filesize($dir.''/''.$filename);}elseif(is_dir($dir.''/''.$filename)){$dir_size+=dir_size($dir.''/''.$filename);}}}#endwhile}#endopendir@closedir($dh);return$dir_size;}#endfunction
五、访问与修改时间1.fileatime():最后访问时间2.filectime():最后改变时间(任何数据的修改)3.filemtime():最后修改时间(指仅是内容修改)六、文件的I/O操作1.fopen--打开文件或者URLmode说明''r''只读方式打开,将文件指针指向文件头。''r+''读写方式打开,将文件指针指向文件头。''w''写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。''w+''读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。''a''写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。''a+''读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。''x''创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,''x+''创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSEeg:
复制代码代码如下:
$handle=fopen("/home/rasmus/file.txt","r");
2.file--把整个文件读入一个数组中(此函数是很有用的)和file_get_contents()一样,只除了file()将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败file()返回FALSE。eg:代码
复制代码代码如下:
$lines=file(''http://www.example.com/'');//在数组中循环,显示HTML的源文件并加上行号。foreach($linesas$line_num=>$line){echo"Line#{$line_num}:".htmlspecialchars($line)." \n";}//另一个例子将web页面读入字符串。参见file_get_contents()。$html=implode('''',file(''http://www.example.com/''));
3.fgets--从文件指针中读取一行从handle指向的文件中读取一行并返回长度最多为length-1字节的字符串。碰到换行符(包括在返回值中)、EOF或者已经读取了length-1字节后停止(看先碰到那一种情况)。如果没有指定length,则默认为1K,或者说1024字节。eg:
复制代码代码如下:
$handle=@fopen("/tmp/inputfile.txt","r");if($handle){while(!feof($handle)){$buffer=fgets($handle,4096);echo$buffer;}fclose($handle);}
4.fgetss--从文件指针中读取一行并过滤掉HTML标记和fgets()相同,只除了fgetss尝试从读取的文本中去掉任何HTML和PHP标记。可以用可选的第三个参数指定哪些标记不被去掉另:对的目录的操作:1.opendir--打开目录句柄,打开一个目录句柄,可用于之后的closedir(),readdir()和rewinddir()调用中。2.readdir--从目录句柄中读取条目,返回目录中下一个文件的文件名。文件名以在文件系统中的排序返回。eg:代码
复制代码代码如下:
//注意在4.0.0-RC2之前不存在!==运算符if($handle=opendir(''/path/to/files'')){echo"Directoryhandle:$handle\n";echo"Files:\n";while(false!==($file=readdir($handle))){echo"$file\n";}while($file=readdir($handle)){echo"$file\n";}closedir($handle);}[code]3.scandir--列出指定路径中的文件和目录(很有用),返回一个array,包含有directory中的文件和目录。默认的排序顺序是按字母升序排列。如果使用了可选参数sorting_order(设为1),则排序顺序是按字母降序排列。eg:[code]$dir=''/tmp'';$files1=scandir($dir);$files2=scandir($dir,1);print_r($files1);print_r($files2);
另外注:七、对文件属性的操作(操作系统环境不同,可能有所不一样,这点要注意)1文件是否可读:boolis_readable(stringfilename)如果由filename指定的文件或目录存在并且可读则返回TRUE。记住PHP也许只能以运行webserver的用户名(通常为''nobody'')来访问文件。不计入安全模式的限制。2文件是否可写boolis_writable(stringfilename)如果文件存在并且可写则返回TRUE。filename参数可以是一个允许进行是否可写检查的目录名。记住PHP也许只能以运行webserver的用户名(通常为''nobody'')来访问文件。不计入安全模式的限制3检查文件是否存在boolfile_exists(stringfilename)如果由filename指定的文件或目录存在则返回TRUE,否则返回FALSE=====================================PHP文件操作类=========================================
复制代码代码如下:
fileName_str=$fileName_str;$this->fileOpenMethod_str=$fileOpenMethod_str;}function__destruct(){//析构函数}publicfunction__get($valName_val)//欲取得的数据成员名称{//特殊函数,取得指定名称数据成员的值return$this->$valName_val;}privatefunctionon_error($errMsg_str=''UnkownError!'',$errNo_int=0)//错误信息,错误代码{echo''程序错误:''.$errMsg_str.''错误代码:''.$errNo_int;//出错处理函数}publicfunctionopen(){//打开相应文件,返回文件资源标识//根据fileOpenMethod_str选择打开方式switch($this->fileOpenMethod_str){case''readOnly'':$openMethod_str=''r'';//只读,指针指向文件头break;case''readWrite'':$openMethod_str=''r+'';//读写,指针指向文件头break;case''writeAndInit'':$openMethod_str=''w'';//只写,指针指向文件头将大小截为零,不存在则创建break;case''readWriteAndInit'':$openMethod_str=''r+'';//读写,指针指向文件头将大小截为零,不存在则创建break;case''writeAndAdd'':$openMethod_str=''a'';//只写,指针指向文件末尾,不存在则创建break;case''readWriteAndAdd'':$openMethod_str=''a+'';//读写,指针指向文件末尾,不存在则创建break;default:$this->on_error(''Openmethoderror!'',310);//出错处理exit;}//打开文件if(!$fp_res=fopen($this->fileName_str,$openMethod_str)){$this->on_error(''Can\''topenthefile!'',301);//出错处理exit;}return$fp_res;}publicfunctionclose($fp_res)//由open返回的资源标识{//关闭所打开的文件if(!fclose($fp_res)){$this->on_error(''Can\''tclosethefile!'',302);//出错处理exit;}}publicfunctionwrite()//$fp_res,$data_str,$length_int:文件资源标识,写入的字符串,长度控制{//将字符串string_str写入文件fp_res,可控制写入的长度length_int//判断参数数量,调用相关函数$argNum_int=func_num_args();//参数个数$fp_res=func_get_arg(0);//文件资源标识$data_str=func_get_arg(1);//写入的字符串if($argNum_int==3){$length_int=func_get_arg(2);//长度控制if(!fwrite($fp_res,$data_str,$length_int)){$this->on_error(''Can\''twritethefile!'',303);//出错处理exit;}}else{if(!fwrite($fp_res,$data_str)){$this->on_error(''Can\''twritethefile!'',303);//出错处理exit;}}}publicfunctionread_line()//$fp_res,$length_int:文件资源标识,读入长度{//从文件fp_res中读入一行字符串,可控制长度//判断参数数量$argNum_int=func_num_args();$fp_res=func_get_arg(0);if($argNum_int==2){$length_int=func_get_arg(1);if($string_str=!fgets($fp_res,$length_int)){$this->on_error(''Can\''treadthefile!'',304);//出错处理exit;}return$string_str;}else{if(!$string_str=fgets($fp_res)){$this->on_error(''Can\''treadthefile!'',304);//出错处理exit;}return$string_str;}}publicfunctionread($fp_res,$length_int)//文件资源标识,长度控制{//读入文件fp_res,最长为length_intif(!$string_str=fread($fp_res,$length_int)){$this->on_error(''Can\''treadthefile!'',305);//出错处理exit;}return$string_str;}publicfunctionis_exists($fileName_str)//文件名{//检查文件$fileName_str是否存在,存在则返回true,不存在返回falsereturnfile_exists($fileName_str);}/取得文件大小//取得文件fileName_str的大小$fileName_str是文件的路径和名称返回文件大小的值/publicfunctionget_file_size($fileName_str)//文件名{returnfilesize($fileName_str);}/转换文件大小的表示方法//$fileSize_int文件的大小,单位是字节返回转换后带计量单位的文件大小/pubwww.visa158.com_size_express($fileSize_int)//文件名{if($fileSize_int>1024){$fileSizeNew_int=$fileSize_int/1024;//转换为K$unit_str=''KB'';if($fileSizeNew_int>1024){$fileSizeNew_int=$fileSizeNew_int/1024;//转换为M$unit_str=''MB'';}$fileSizeNew_arr=explode(''.'',$fileSizeNew_int);$fileSizeNew_str=$fileSizeNew_arr[0].''.''.substr($fileSizeNew_arr[1],0,2).$unit_str;}return$fileSizeNew_str;}/重命名文件//将oldname_str指定的文件重命名为newname_str$oldName_str是文件的原名称$newName_str是文件的新名称返回错误信息/publicfunctionrename_file($oldName_str,$newName_str){if(!rename($oldName_str,$newName_str)){$this->on_error(''Can\''trenamefile!'',308);exit;}}/删除文件//将filename_str指定的文件删除$fileName_str要删除文件的路径和名称返回错误信息/publicfunctiondelete_file($fileName_str)//{if(!unlink($fileName_str)){$this->on_error(''Can\''www.hunanwang.net309);//出错处理exit;}}/取文件的扩展名//取filename_str指定的文件的扩展名$fileName_str要取类型的文件路径和名称返回文件的扩展名/publicfunctionget_file_type($fileName_str){$fileNamePart_arr=explode(''.'',$fileName_str);while(list(,$fileType_str)=each($fileNamePart_arr)){$type_str=$fileType_str;}return$type_str;}/判断文件是否是规定的文件类型//$fileType_str规定的文件类型$fileName_str要取类型的文件路径和名称返回false或true/publicfunctionis_the_type($fileName_str,$fileType_arr){$cheakFileType_str=$this->get_file_type($fileName_str);if(!in_array($cheakFileType_str,$fileType_arr)){returnfalse;}else{returntrue;}}/上传文件,并返回上传后的文件信息//$fileName_str本地文件名$filePath上传文件的路径,如果$filePath是str则上传到同一目录用一个文件命名,新文件名在其加-1,2,3..,如果是arr则顺序命名$allowType_arr允许上传的文件类型,留空不限制$maxSize_int允许文件的最大值,留空不限制返回的是新文件信息的二维数组:$reFileInfo_arr/publicfunctionupload_file($fileName_str,$filePath,$allowType_arr='''',$maxSize_int=''''){$fileName_arr=$_FILES[$fileName_str][''name''];//文件的名称$fileTempName_arr=$_FILES[$fileName_str][''tmp_name''];//文件的缓存文件$fileSize_arr=$_FILES[$fileName_str][''size''];//取得文件大小$reFileInfo_arr=array();$num=count($fileName_arr)-1;for($i=0;$i<=$num;$i++){if($fileName_arr[$i]!=''''){if($allowType_arr!=''''and!$this->is_the_type($fileName_arr[$i],$allowType_arr))//判断是否是允许的文件类型{$this->on_error(''Thefileisnotallowedtype!'',310);//出错处理break;}if($maxSize_int!=''''and$fileSize_arr[$i]>$maxSize_int){$this->on_error(''Thefileistoobig!'',311);//出错处理break;}$j=$i+1;$fileType_str=$this->get_file_type($fileName_arr[$i]);//取得文件类型if(!is_array($filePath)){$fileNewName_str=$filePath.''-''.($j).''.''.$fileType_str;}else{$fileNewName_str=$filePath_arr[$i].''.''.$fileType_str;}copy($fileTempName_arr[$i],$fileNewName_str);//上传文件unlink($fileTempName_arr[$i]);//删除缓存文件//---------------存储文件信息--------------------//$doFile_arr=explode(''/'',$fileNewName_str);$doFile_num_int=count($doFile_arr)-1;$reFileInfo_arr[$j][''name'']=$doFile_arr[$doFile_num_int];$reFileInfo_arr[$j][''type'']=$fileType_str;$reFileInfo_arr[$j][''size'']=$this->change_size_express($fileSize_arr[$i]);}}return$reFileInfo_arr;}/备份文件夹/}?>
|
|