您的位置:晶晶的博客>PHP>PHP中文件操作相关的函数和方法总结

PHP中文件操作相关的函数和方法总结

写PHP已有七八年时间,一直都是半吊子货,从没总结过相关知识点,最近可能要换行不干微生物发酵行业的工作,转做PHP开发;书到用时方恨少,算是提前为offer做准备吧~~~

php文件系统操作

话说“换工作穷仨月,换行穷仨年”,最近呆家里确实非常纠结,本科专业是生物,可惜生物专业不好找工作,好不容易坚持了四年的一家农业微生物公司,却死活没有起色,再待几年恐怕整个人就废了;没有money就没生活;毕业哪年严重抵触做IT,伤身伤神不说,写代码做coder也不是一个长久之计,总不可能做一辈子coder吧......

现在想想毕业哪会儿真是太单纯了,人往高处走水往低处流,不断的打破自己再重建或许就是一个提升的过程吧~

Linux理念:“一切皆文件”,所以注意这里的文件含义包含了传统意义上的单个文件也包含了文件夹。

一、相关函数和方法

函数、关键字 含义 作用
file_exists(string $FILE_NAME) 检查$FILE_NAME指定的文件(包括文件夹[目录]和文件)是否存在 Linux一切皆文件
is_file(string $FILE_NAME) 检查$FILE_NAME指定的文件是否是正常的文件 超大文件可能无法判断;单纯的判断文件是否存is_file()较佳,file_exists某种意义上等同于is_dir()加is_file()
bool is_dir(string $FILE_NAME) 检查$FILE_NAME指定的文件是否是正常的文件夹(目录)
$FILE_NAME是目录且存在返回true,其他返回false;与file_exists、is_file、is_dir相关的函数filetype,用于判断给定的路径的类型,可能的返回值:fifo,char,dir,block,link,file 和 unknown
bool is_link(string $FILE_NAME) 检查$FILE_NAME是否为一个符号链接 符号链接又称“软链接”,是一个包含另外一个文件的路径名(相对或绝对)的文件;符号链接可以指向文件也可以指向目录,对符号链接进行读、写操作时直接操作的是源该符号链接所链接的原始文件,删除符号链接时仅删除该符号链接而不会删除所链接的源文件;若删除或移动(改名)源文件,符号链接文件依然存在,但却指向了一个不存在的位置;而对应的“硬链接”就是一个文件的一个或多个文件名,不允许对目录设置硬链接,当某一个源文件有多个硬链接时,只有删除掉所有该源文件的硬链接,该源文件才会被删除,硬链接对应的源文件移动或改名,不影响硬链接。
bool is_executable(string $FILE_NAME)
检查$FILE_NAME是否可执行
null
bool is_readable(string $FILE_NAME)
检查$FILE_NAME是否可读
null
bool is_writable(string $FILE_NAME)
检查$FILE_NAME是否可写
is_writeable(string $FILE_NAME)的别名函数
fopen()、fread()、fgets()、fgetc()、feof()、fwrite()、fclose()等与C语言类似的文件操作函数
fopen打开指定文件,打开时第二个参数指定打开模式,返回资源类型供其他方法调用;fread则读取由fopen打开的文件资源,并且可以通过第二个参数指定一次读取的文件长度,返回读取的指定长度的字符串;fgets从文件资源所处指针处读取一行---简单理解就是读取一行;fgetc则是从文件指针处读取一个字符;feof用于判断文件指针是否已达到文件结尾,若已达到结尾或出错返回true,其他返回false;fwrite(或fputs同名函数)则用于写入文件,第一个参数为fopen打开的资源类型引用,第二个参数为写入文件的字符串;fclose则用于关闭fopen打开的资源。还有fflush写入所有缓冲的输出写入指定的资源中;fpassthru输出文件指针处所有的剩余内容;fstat通过打开的文件指针获取该文件的信息;readfile读取一个文件并写入到输出缓冲区---简单点理解,就是读取文件发给客户端浏览器...
opendir()、readdir()、closedir()、scandir()等目录操作函数

遍历目录的基本函数方法群---可使用glob替代;或通过dir方法实例化Directory类,Directory类的read、close、rewind方法配合使用,功效一致;scandir可以快速的列出指定目录中的文件和目录,最佳的遍历目录的方法,可惜许多虚拟主机禁用了这个函数。
dirname()、basename()、pathinfo()、realpath()、filesize()等路径信息函数
dirname返回路径中的目录部分、basename()有两个参数,返回路径中的文件名部分,第二个参数可以指定过滤掉的文件名后缀,第二个参数留空返回带后最的文件名部分,pathinfo则返回路径的关联数组信息,可以指定第二个参数的常量仅返回指定部分;realpath返回规范化的绝对路径,php脚本中一般是相对于入口文件的的相对路径。
copy()、unlink()、mkdir()、rmdir()、rename()等文件改名、移动、删除函数
copy复制第一个参数的文件到第二个参数的位置,一般用于文件复制,若文件(或文件夹)改名(或移动)使用rename即可;unlink用于删除文件,mkdir用于建立目录,rmdir则用于删除空目录,非空目录无法直接调用删除。
file_get_contents()、file_put_contents()字符串到文件以及文件到字符串
一般html静态化常用的两个函数,读取文件成字符串,和将字符串写入文件,两个函数的第一个参数均为路径,而file_put_contents的第二个参数则是需要写入的字符串。
$_FILES超全局数组、is_uploaded_file()、move_uploaded_file()等文件上传相关函数
$_FILES包含post方式文件上传时被上传的临时文件的信息,是一个超全局二维数组,is_uploaded_file用于检测文件是不是被上传的,参数为$_FILES中的临时文件路径,move_uploaded_file则用于将表单上传的临时文件保存至合适的位置,比如图片。
Fileinfo、FilesystemIterator、DirectoryIterator内置文件类

php5.3.0及其以上使用,面向对象的文件操作类
fileatime()、filectime()、filegroup()、fileinode()、filemtime()、fileowner()、fileperms()、filesize()、filetype()等文件属性函数

fileatime取得文件的上次访问时间,filectime取得文件的inode修改时间,filegroup取得文件的组,fileinode取得文件的inode,filemtime取得文件修改时间,fileowner取得文件的所有者,fileperms取得文件的权限,filesize取得文件大小,filetype取得文件类型

二、相关代码片段

遍历目录的方法:

<?php
/**
 * 列出指定目录中的所有文件(不再深入该文件夹下的子文件夹)
 * @params  $dir 相对路径或绝对路径的目录名
 * @authors Jea杨
 * @date    2015-07-16 18:00:00
 * @version $Id$
 */
function list_dir($dir) {
	$dir = rtrim($dir,'/').'/';	
	$dirArray = array();
	//glob方法遍历
	if(function_exists('glob')) {
		if(false != ($handle = glob($dir.'*'))) {
			//glob列出文件信息是与$dir格式相一致的
			foreach ($handle as $key => $value) {
				$dirArray[$key] = $value;
			}
		}
	//opendir、readdir方法遍历----倘若用户禁止了opendir后台是无法运行的!!
	}else if(function_exists('opendir') && function_exists('readdir')) {
		if(false != ($handle = @opendir($dir))) {
			$i = 0;
			while (false !== ($file = readdir($handle))) {
				//readdir读取出的文件仅文件名(包括后缀)
				if(is_file($dir.$file)) {
					if($file=='.' || $file=='..') {continue;}
					$dirArray[$i] = $dir.$file;
					//若需转为绝对路径 realpath下即可
					//$dirArray[$i] = realpath($dir.$file);
					$i ++;
				}
			}
			closedir($handle);
		}
	//dir方法实例化Directory类进行遍历;Directory类仅能通过dir方法实例化,new关键字无法进行
	}else if(function_exists('dir')){
		if(false != ($handle = @dir($dir))){  
			//列出目录中的文件
			$i = 0;
			while(($file = $handle->read())!==false){  
				if(is_file($dir.$file)) {   
					if($file=='.' || $file=='..') {continue;}
					$dirArray[$i] = $dir.$file;
					//若需转为绝对路径 realpath下即可
					//$dirArray[$i] = realpath($dir.$file);
					$i ++;
				}
			}  
			$handle->close();
		}
	}
	//假设仅需返回该文件夹下的的图片文件夹
	$ImageArry  		 = array();
	foreach ($dirArray as $key => $value) {
		if(in_array(pathinfo($value,PATHINFO_EXTENSION), array('jpg','jpeg','gif','bmp','png'))) {
			$ImageArry[] = $value;
		}
	}
	return $ImageArry;
}
//function End
//当php版本大于5.3.0时还可以使用DirectoryIterator或FilesystemIterator迭代器类遍历
//FilesystemIterator是继承至DirectoryIterator的
function php53_list_dir($dir) {
	$dir 	  = rtrim($dir,'/').'/';	
	$dirArray = array();
	$iterator = new DirectoryIterator($dir);
	while($iterator->valid()) {
	    $i 	  = 0;
	    if($iterator->isFile()){
	    	$dirArray[$i] = $dir.$iterator->getFilename();
	    }
	    $iterator->next();
	}
	return $dirArray;
}
转载请注明本文标题和链接:《PHP中文件操作相关的函数和方法总结

相关推荐

网友评论1

路人甲 表情
Ctrl+Enter快速提交
  1. #1

    沙发

    额额额 2年前 (2015-09-06) 回复