PHP常用的文件操作函数经典收藏


Posted in PHP onApril 02, 2013

以下是个人总结的PHP文件操作函数。当然,这只是部分,还有很多,我没有列出来。
一 、解析路径
1 获得文件名:
basename();
给出一个包含有指向一个文件的全路径的字符串,本函数返回基本的文件名。如果文件名是以 suffix 结束的,那这一部分也会被去掉。
eg:

$path = "/home/httpd/html/index.php"; 
$file = basename($path,".php"); // $file is set to "index"

2 得到目录部分:
dirname();
给出一个包含有指向一个文件的全路径的字符串,本函数返回去掉文件名后的目录名。
eg:
$path = "/etc/passwd"; 
$file = dirname($path); // $file is set to "/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:
echo filetype('/etc/passwd'); // file 
echo filetype('/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: 1024 bytes 
$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:(同上,换掉函数)
另:如需要计算一个目录大小,可以编写一个递归函数来实现
代码
function dir_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); 
}else if(is_dir($dir.'/'.$filename)){ 
$dir_size +=dir_size($dir.'/'.$filename); 
} 
} 
}#end while 
}# end opendir 
@closedir($dh); 
return $dir_size; 
} #end function

五、访问与修改时间
1. fileatime(): 最后访问时间
2. filectime(): 最后改变时间(任何数据的修改)
3. filemtime(): 最后修改时间(指仅是内容修改)
六、 文件的I/O操作
1. fopen -- 打开文件或者 URL
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'x' 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,
'x+' 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE
eg:
$handle = fopen("/home/rasmus/file.txt", "r");

2. file -- 把整个文件读入一个数组中(此函数是很有用的)
和 file_get_contents() 一样,只除了 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返回 FALSE。
eg:
代码
$lines = file('http://www.example.com/'); 
// 在数组中循环,显示 HTML 的源文件并加上行号。 
foreach ($lines as $line_num => $line) { 
echo "Line #<b>{$line_num}</b> : " . htmlspecialchars($line) . "<br />\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 "Directory handle: $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 ( string filename )
如果由 filename 指定的文件或目录存在并且可读则返回 TRUE。
记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制。
2 文件是否可写
bool is_writable ( string filename )
如果文件存在并且可写则返回 TRUE。filename 参数可以是一个允许进行是否可写检查的目录名。
记住 PHP 也许只能以运行 webserver 的用户名(通常为 'nobody')来访问文件。不计入安全模式的限制
3 检查文件是否存在
boolfile_exists ( string filename )
如果由 filename 指定的文件或目录存在则返回 TRUE,否则返回 FALSE
=====================================PHP文件操作类=========================================
<?php 
/*************************************************************************************** 
文件名:File.cls.php 
文件简介:类clsFile的定义,对文件操作的封装 
版本:2.0 最后修改日期:2011-8-23 
****************************************************************************************/ 
!defined('INIT_PHPV') && die('No direct script access allowed'); 
class clsFile 
{ 
private $fileName_str; //文件的路径 
private $fileOpenMethod_str; //文件打开模式 
function __construct($fileName_str='',$fileOpenMethod_str='readOnly')//路径,默认为空;模式,默认均为只读 
{ 
//构造函数,完成数据成员的初始化 
$this->fileName_str=$fileName_str; 
$this->fileOpenMethod_str=$fileOpenMethod_str; 
} 
function __destruct() 
{ 
//析构函数 
} 
public function __get($valName_val)//欲取得的数据成员名称 
{ 
//特殊函数,取得指定名称数据成员的值 
return $this->$valName_val; 
} 
private function on_error($errMsg_str='Unkown Error!',$errNo_int=0)//错误信息,错误代码 
{ 
echo '程序错误:'.$errMsg_str.'错误代码:'.$errNo_int;//出错处理函数 
} 
public function open() 
{ 
//打开相应文件,返回文件资源标识 
//根据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('Open method error!',310);//出错处理 
exit; 
} 
//打开文件 
if(!$fp_res=fopen($this->fileName_str,$openMethod_str)) 
{ 
$this->on_error('Can\'t open the file!',301);//出错处理 
exit; 
} 
return $fp_res; 
} 
public function close($fp_res)//由open返回的资源标识 
{ 
//关闭所打开的文件 
if(!fclose($fp_res)) 
{ 
$this->on_error('Can\'t close the file!',302);//出错处理 
exit; 
} 
} 
public function write()//$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\'t write the file!',303);//出错处理 
exit; 
} 
} 
else 
{ 
if(!fwrite($fp_res,$data_str)) 
{ 
$this->on_error('Can\'t write the file!',303);//出错处理 
exit; 
} 
} 
} 
public function read_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\'t read the file!',304);//出错处理 
exit; 
} 
return $string_str; 
} 
else 
{ 
if(!$string_str=fgets($fp_res)) 
{ 
$this->on_error('Can\'t read the file!',304);//出错处理 
exit; 
} 
return $string_str; 
} 
} 
public function read($fp_res,$length_int)//文件资源标识,长度控制 
{ 
//读入文件fp_res,最长为length_int 
if(!$string_str=fread($fp_res,$length_int)) 
{ 
$this->on_error('Can\'t read the file!',305);//出错处理 
exit; 
} 
return $string_str; 
} 
public function is_exists($fileName_str)//文件名 
{ 
//检查文件$fileName_str是否存在,存在则返回true,不存在返回false 
return file_exists($fileName_str); 
} 
/******************取得文件大小*********************/ 
/* 
取得文件fileName_str的大小 
$fileName_str 是文件的路径和名称 
返回文件大小的值 
*/ 
public function get_file_size($fileName_str)//文件名 
{ 
return filesize($fileName_str); 
} 
/******************转换文件大小的表示方法*********************/ 
/* 
$fileSize_int文件的大小,单位是字节 
返回转换后带计量单位的文件大小 
*/ 
public function change_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是文件的新名称 
返回错误信息 
*/ 
public function rename_file($oldName_str,$newName_str) 
{ 
if(!rename($oldName_str,$newName_str)) 
{ 
$this->on_error('Can\'t rename file!',308); 
exit; 
} 
} 
/******************删除文件*********************/ 
/* 
将filename_str指定的文件删除 
$fileName_str要删除文件的路径和名称 
返回错误信息 
*/ 
public function delete_file($fileName_str)// 
{ 
if(!unlink($fileName_str)) 
{ 
$this->on_error('Can\'t delete file!',309);//出错处理 
exit; 
} 
} 
/******************取文件的扩展名*********************/ 
/* 
取filename_str指定的文件的扩展名 
$fileName_str要取类型的文件路径和名称 
返回文件的扩展名 
*/ 
public function get_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 
*/ 
public function is_the_type($fileName_str,$fileType_arr) 
{ 
$cheakFileType_str=$this->get_file_type($fileName_str); 
if(!in_array($cheakFileType_str,$fileType_arr)) 
{ 
return false; 
} 
else 
{ 
return true; 
} 
} 
/******************上传文件,并返回上传后的文件信息*********************/ 
/* 
$fileName_str本地文件名 
$filePath上传文件的路径,如果$filePath是str则上传到同一目录用一个文件命名,新文件名在其加-1,2,3..,如果是arr则顺序命名 
$allowType_arr允许上传的文件类型,留空不限制 
$maxSize_int允许文件的最大值,留空不限制 
返回的是新文件信息的二维数组:$reFileInfo_arr 
*/ 
public function upload_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('The file is not allowed type!',310);//出错处理 
break; 
} 
if($maxSize_int!='' and $fileSize_arr[$i]>$maxSize_int) 
{ 
$this->on_error('The file is too big!',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; 
} 
/******************备份文件夹*********************/ 
} 
?>

希望对你有用.
PHP 相关文章推荐
如何利用php+mysql保存和输出文件
Oct 09 PHP
PHP 批量更新网页内容实现代码
Jan 05 PHP
通用PHP动态生成静态HTML网页的代码
Mar 04 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
php自动给网址加上链接的方法
Jun 02 PHP
Zend Framework教程之Application和Bootstrap用法详解
Mar 10 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
May 07 PHP
CodeIgniter记录错误日志的方法全面总结
May 17 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
ThinkPHP框架分布式数据库连接方法详解
Mar 14 PHP
精美漂亮的php分页类代码
Apr 02 #PHP
php更新mysql后获取影响的行数发生异常解决方法
Mar 28 #PHP
php页面跳转代码 输入网址跳转到你定义的页面
Mar 28 #PHP
PHP 数组和字符串互相转换实现方法
Mar 26 #PHP
php中将html中的br换行符转换为文本输入中的换行符
Mar 26 #PHP
PHP字符过滤函数去除字符串最后一个逗号(rtrim)
Mar 26 #PHP
自定义php类(查找/修改)xml文档
Mar 26 #PHP
You might like
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
Jquery 1.42 checkbox 全选和反选代码
2010/03/27 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
JavaScript中使用stopPropagation函数停止事件传播例子
2014/08/27 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
2014/10/31 Javascript
jQuery修改li下的样式以及li下的img的src的值的方法
2014/11/02 Javascript
JavaScript分析、压缩工具JavaScript Analyser
2014/12/31 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
canvas实现探照灯效果
2017/02/07 Javascript
AngualrJs清除定时器遇到的坑
2017/10/13 Javascript
NodeJs实现定时任务的示例代码
2017/12/05 NodeJs
layui 数据表格 点击分页按钮 监听事件的实例
2019/09/02 Javascript
解决layui laydate 时间控件一闪而过的问题
2019/09/28 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
Vue实现验证码功能
2019/12/03 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
Python安装官方whl包和tar.gz包的方法(推荐)
2017/06/04 Python
python实现音乐下载的统计
2018/06/20 Python
使用Template格式化Python字符串的方法
2019/01/22 Python
NumPy 数组使用大全
2019/04/25 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
PyCharm专业最新版2019.1安装步骤(含激活码)
2019/10/09 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
Keras: model实现固定部分layer,训练部分layer操作
2020/06/28 Python
win10安装python3.6的常见问题
2020/07/01 Python
印度最大的网上花店:Ferns N Petals(鲜花、礼品和蛋糕)
2017/10/16 全球购物
英国综合网上购物商城:The Hut
2018/07/03 全球购物
北京大学自荐信范文
2014/01/28 职场文书
小学教师读书活动总结
2014/07/08 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang