您的位置:首页 > 编程语言 > PHP开发

php 其他常用文件处理函数

2016-05-09 10:43 477 查看
5.6 其他常用文件处理函数

前面介绍了最常用的文件处理的函数,接下来介绍其他的一些常用函数,这些函数能够

帮助进行文件处理。

(1)filesize()函数。filesize 函数用于获取一个文件的大小。该函数声明如下:

int filesize ( string filename)

该函数返回文件大小的字节数,如果出错返回FALSE。

提示

因为 PHP 的整数类型是有符号的,并且大多数平台使用32 位整数,filesize()

函数在碰到大于2GB 的文件时可能会返回非预期的结果。对于2~4GB 之间的

文件,通常可以使用sprintf("%u", filesize($file))来克服此问题。

178 PHP 网络编程技术与实例

(2)unlink()函数。unlink 函数用于删除一个文件。该函数的声明如下:

bool unlink (string filename)

如果成功则返回TRUE,失败则返回FALSE。

(3)rmdir()函数。rmdir 函数用于删除一个目录。该函数声明如下:

bool rmdir (string dirname)

该函数尝试删除dirname 所指定的目录。该目录必须是空的,而且要有相应的权限。如

果成功则返回TRUE,失败则返回FALSE。

(4)mkdir()函数。mkdir 函数用于创建一个目录。该函数的声明如下:

bool mkdir (string pathname [, int mode])

尝试新建一个由pathname 指定的目录。mode 是指操作权限,默认的mode 是0777,表

示最大可能的访问权。

(5)basename 函数。该函数返回路径中的文件名部分。声明如下:

string basename ( string path [, string suffix])

path 参数给出一个包含有指向一个文件的全路径的字符串,函数返回基本的文件名。如

果文件名是以suffix 结束的,则这一部分也会被去掉。

在Windows 中,斜线(/)和反斜线(\)都可以用作路径分隔符。在其他环境下是斜线(/)。

该函数的示例如下:

<?php

$path = "/home/httpd/html/index.php";

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

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

?>

(6)dirname()函数。该函数返回路径中的目录部分。声明如下:

string dirname ( string path)

path 参数给出一个包含有指向一个文件的全路径的字符串,函数返回去掉文件名后的目

录名。示例如下:

<?php

$path = "/etc/passwd";

$file = dirname ($path); // $file is set to "/etc"

?>

提示

PHP 4.0.3 中,dirname()被修正为POSIX 兼容。本质上就意味着如果在path

中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把path 中结尾

的/component(最后一个斜线以及后面部分)去掉之后的字符串。这意味着在

老的函数返回一个空字符串的情形下从dirname()得到的是斜线或者一个点。

(7)pathinfo()函数。该函数返回文件路径的信息。声明如下:

array pathinfo ( string path)

pathinfo()返回一个数组包含有path 的信息,包括以下的数组单元dirname、basename 和

extension。示例如代码5-21 所示。

【代码 5-21】 pathinfo.php

<?php

$path_parts = pathinfo("/www/htdocs/index.html");

echo $path_parts["dirname"] ."<br>";

第5 章 PHP 中的文件处理技术 179

echo $path_parts["basename"]."<br>";

echo $path_parts["extension"]."<br>";

?>

以上代码输出结果为:

/www/htdocs

index.html

html

(8)realpathf()函数。该函数返回规范化的绝对路径名。函数声明如下:

string realpath ( string path)

realpath()扩展所有的符号连接并且处理输入的path 中的'/./', '/../'以及多余的'/'并返回规范

化后的绝对路径名。返回的路径中没有符号连接,'/./'或'/../'成分。

realpath()失败时返回FALSE,例如如果文件不存在的话。

(9)copy()函数。该函数复制文件。声明如下:

bool copy ( string source, string dest)

该函数将文件从source 复制到dest。如果成功则返回TRUE,失败则返回FALSE。

实例 5-19 文件复制

本实例演示如何进行文件复制,如代码5-22 所示。

【代码 5-22】 copy.php

<?php

if (!copy("readfile.php", 'temp.bak'))

print ("文件复制失败<br>\n");

else

print("文件复制成功!");

?>

执行结果如下所示:

文件复制成功!

(10)disk_free_space()函数。该函数返回目录中的可用空间。声明如下:

float disk_free_space ( string directory)

该函数给出一个包含有一个目录的字符串,函数将根据相应的文件系统或磁盘分区返回

可用的字节数。

实例 5-20 获取磁盘剩余空间

本实例使用disk_free_space 函数获取指定磁盘或者目录的剩余空间,如代码5-23

所示。

【代码 5-23】 disk_free_space.php

<?php

// $df 包含根目录下可用的字节数

$df = disk_free_space("/");

echo $df;

?>

执行结果如下:

12835323904

180 PHP 网络编程技术与实例

提示 本函数不能用于远程文件,被检查的文件必须通过服务器的文件系统访问。

(11)disk_total_space()函数。该函数返回目录的磁盘总大小。声明如下:

float disk_total_space ( string directory)

directory 参数给出一个包含有一个目录的字符串,函数将根据相应的文件系统或磁盘分

区返回所有的字节数。

实例 5-21 获取磁盘总空间

本实例使用disk_total_space 函数获取指定磁盘的总空间,如代码5-24 所示。

【代码 5-24】 disk_total_space.php

<?php

// $df 包含 "/" 目录的磁盘大小

$df = disk_total_space("/");

echo $df;

?>

执行结果如下:

20003848192

(12)file_put_contents()函数。该函数将一个字符串写入文件。声明如下:

int file_put_contents ( string filename, string data [, int flags [, resource

context]])

和依次调用fopen()、fwrite()以及fclose()功能一样。本函数返回写入文件的字节数。flags 可以

是FILE_USE_INCLUDE_PATH 和/或FILE_APPEND,但是使用FILE_USE_INCLUDE_PATH 选项

时要多加小心。

(13)fileatime()函数。该函数取得文件的上次访问时间。声明如下:

int fileatime ( string filename)

函数返回文件上次被访问的时间,如果出错则返回FALSE。时间以UNIX 时间戳的方式

返回。

注意

一个文件的 atime 应该在不论何时读取了此文件中的数据块时被更改。当一

个应用程序定期访问大量文件或目录时很影响性能。有些UNIX 文件系统在加

载时关闭atime 的更新以提高这类程序的性能。

实例 5-22 获取文件的上次访问时间

本实例演示了如何通过fileatime 函数获取文件的上次访问时间,如代码5-25 所示。

【代码 5-25】 fileatime.php

<?php

// 输出类似:December 29 2002 22:16:23.

$filename = 'hello/student.txt';

if (file_exists($filename)) {

echo "$filename 文件最近一次访问时间: " . date ("F d Y H:i:s.",

fileatime($filename));

}

第5 章 PHP 中的文件处理技术 181

?>

执行结果如下:

hello/student.txt 文件最近一次访问时间: December 04 2005 00:00:00.

(14)filemtime()函数。该函数取得文件修改时间,声明如下:

int filemtime ( string filename)

该函数返回文件上次被修改的时间,出错时返回FALSE。

实例 5-23 获取文件的最近修改时间

本实例演示了如何获取文件的最近修改时间,如代码5-26 所示。

【代码 5-26】 filemtime.php

<?php

// 输出: December 29 2002 22:16:23.

$filename = 'hello/student.txt';

if (file_exists($filename)) {

echo "$filename 最近修改时间: " . date ("F d Y H:i:s.", filemtime($filename));

}

?>

执行结果如下:

hello/student.txt 最近修改时间: October 02 2005 13:56:44.

(15)stat()函数。该函数给出文件的信息,函数声明如下:

array stat ( string filename)

该函数获取由filename 指定的文件的统计信息。如果filename 是符号连接,则统计信息

是关于被连接文件本身的,而不是符号连接。lstat()和stat()相同,除了stat 函数会返回符号

连接的状态。如果出错,stat()返回FALSE,并且发出一条警告。

返回一个数组包含的文件的统计信息,则该数组具有以下列出的单元,数组下标从 0 开

始。除了数字索引之外自PHP 4.0.6 以后还可以通过关联索引来访问。

stat()和fstat()返回格式如表5-2 所示。

表 5-2 stat()和fstat()返回格式

数字下标

关联键名

(自 PHP 4.0.6)

说 明数字下标

关联键名

(自 PHP 4.0.6)

说 明

0 dev 设备名7 size 文件大小的字节数

1 ino Inode 号码8 atime 上次访问时间(UNIX 时间戳)

2 mode inode 保护模式9 mtime 上次修改时间(UNIX 时间戳)

3 nlink 被连接数目10 ctime 上次改变时间(UNIX 时间戳)

4 uid 所有者的用户id 11 blksize 文件系统IO 的块大小

5 gid 所有者的组id 12 blocks 所占据块的数目

6 rdev 设备类型,如果是inode 设备

(16)fstat()函数。该函数通过已打开的文件指针取得文件信息,声明如下:

array fstat ( resource handle)

该函数获取由文件指针handle 所打开文件的统计信息。此函数和stat()函数相似,但fstat

函数用于已打开的文件指针而不是文件名。

函数的示例如代码 5-27 所示。

182 PHP 网络编程技术与实例

【代码 5-27】

<?php

// 打开文件

$fp = fopen("/etc/passwd", "r");

// 取得统计信息

$fstat = fstat($fp);

// 关闭文件

fclose($fp);

// 只显示关联数组部分

print_r(array_slice($fstat, 13));

?>

输出结果如下:

Array

(

[dev] => 771

[ino] => 488704

[mode] => 33188

[nlink] => 1

[uid] => 0

[gid] => 0

[rdev] => 0

[size] => 1114

[atime] => 1061067181

[mtime] => 1056136526

[ctime] => 1056136526

[blksize] => 4096

[blocks] => 8

)

(17)filetype()函数。该函数取得文件类型,声明如下:

string filetype ( string filename)

返回文件的类型。可能的值有fifo,char,dir,block,link,file 和unknown。如果出错则

返回FALSE。如果stat 调用失败或者文件类型未知,filetype()还会产生一个E_NOTICE 消息。

(18)is_dir()函数。该函数判断给定文件名是否是一个目录,声明如下:

bool is_dir ( string filename)

如果文件名存在并且为目录则返回TRUE。如果filename 是一个相对路径,则按照当前

工作目录检查其相对路径。

(19)flock()函数。该函数进行文件锁定,声明如下:

bool flock ( int handle, int operation [, int &wouldblock])

PHP 支持以咨询方式(也就是所有访问程序必须使用同一方式锁定,否则它不会工作)

锁定全部文件的一种轻便方法。

flock()操作的handle 必须是一个已经打开的文件指针。operation 可以是以下值之一。

要取得共享锁定(读取程序),将operation 设为LOCK_SH。

第5 章 PHP 中的文件处理技术 183

要取得独占锁定(写入程序),将operation 设为LOCK_EX。

要释放锁定(无论共享或独占),将operation 设为LOCK_UN。

如果不希望 flock()在锁定时堵塞,则可以给operation 加上LOCK_NB。

flock()允许执行一个简单的可以在任何平台中使用的读取/写入模型,(包括大部分的

UNIX 派生版甚至是Windows)。如果锁定堵塞(EWOULDBLOCK 错误码情况下),可将可

选的第三个参数设置为TRUE。

函数 flock 的示例如代码5-28 所示。

【代码 5-28】 flock.php

<?php

$fp = fopen("hello/student.txt", "w+");

if (flock($fp, LOCK_EX)) { // 进行排它型锁定

fwrite($fp, "Write something here\n");

flock($fp, LOCK_UN); // 释放锁定

} else {

echo "Couldn't lock the file !";

}

fclose($fp);

?>

提示

由于 flock()需要一个文件指针,因此可能需要一个锁定文件来保护到打算

通过写模式打开来截断的文件的访问(在fopen()函数中加入"w"或"w+")。

(20)is_uploaded_file 函数。该函数判断文件是否是通过HTTP POST 上传的。

bool is_uploaded_file ( string filename)

如果filename 所给出的文件是通过HTTP POST 上传的,则返回TRUE。这可以用来确保

恶意的用户无法欺骗脚本去访问本不能访问的文件。

(21)move_uploaded_file()函数。该函数将上传的文件移动到新位置。声明如下:

bool move_uploaded_file ( string filename, string destination)

本函数检查并确保由filename 指定的文件是合法的上传文件(即通过PHP 的HTTP POST

上传机制所上传的)。如果文件合法,则将其移动为由destination 指定的文件。

如果 filename 不是合法的上传文件,不会出现任何操作,move_uploaded_file()将返回

FALSE。

如果 filename 是合法的上传文件,但出于某些原因无法移动,不会出现任何操作,

move_uploaded_file()将返回FALSE。此外还会发出一条警告。

如果目标文件已经存在,将会被覆盖。

提示

当安全模式(safe mode)被激活,PHP 将检查将要操作的文件或者目录与

正在执行的脚本是否有相同的UID。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: