搜索
首页后端开发php教程PHP常用的文件操作函数经典收藏_php技巧

以下是个人总结的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 #{$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 "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文件操作类=========================================
复制代码 代码如下:

/***************************************************************************************
文件名: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{
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;
}
/******************备份文件夹*********************/
}
?>

希望对你有用.
声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
PHP和Python:解释了不同的范例PHP和Python:解释了不同的范例Apr 18, 2025 am 12:26 AM

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP和Python:深入了解他们的历史PHP和Python:深入了解他们的历史Apr 18, 2025 am 12:25 AM

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

在PHP和Python之间进行选择:指南在PHP和Python之间进行选择:指南Apr 18, 2025 am 12:24 AM

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP和框架:现代化语言PHP和框架:现代化语言Apr 18, 2025 am 12:14 AM

PHP在现代化进程中仍然重要,因为它支持大量网站和应用,并通过框架适应开发需求。1.PHP7提升了性能并引入了新功能。2.现代框架如Laravel、Symfony和CodeIgniter简化开发,提高代码质量。3.性能优化和最佳实践进一步提升应用效率。

PHP的影响:网络开发及以后PHP的影响:网络开发及以后Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?PHP类型提示如何起作用,包括标量类型,返回类型,联合类型和无效类型?Apr 17, 2025 am 12:25 AM

PHP类型提示提升代码质量和可读性。1)标量类型提示:自PHP7.0起,允许在函数参数中指定基本数据类型,如int、float等。2)返回类型提示:确保函数返回值类型的一致性。3)联合类型提示:自PHP8.0起,允许在函数参数或返回值中指定多个类型。4)可空类型提示:允许包含null值,处理可能返回空值的函数。

PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?PHP如何处理对象克隆(克隆关键字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone关键字创建对象副本,并通过\_\_clone魔法方法定制克隆行为。1.使用clone关键字进行浅拷贝,克隆对象的属性但不克隆对象属性内的对象。2.通过\_\_clone方法可以深拷贝嵌套对象,避免浅拷贝问题。3.注意避免克隆中的循环引用和性能问题,优化克隆操作以提高效率。

PHP与Python:用例和应用程序PHP与Python:用例和应用程序Apr 17, 2025 am 12:23 AM

PHP适用于Web开发和内容管理系统,Python适合数据科学、机器学习和自动化脚本。1.PHP在构建快速、可扩展的网站和应用程序方面表现出色,常用于WordPress等CMS。2.Python在数据科学和机器学习领域表现卓越,拥有丰富的库如NumPy和TensorFlow。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用