一、文件的创建与删除
touch($filename ,$time ,$atime):文件名为$filename的文件不存在时,新建该文件;文件存在时,函数可改变该文件的修改时间;成功返回true,失败返回false
$time:可选参数,将文件的修改时间设定为$time,如果未使用该参数则默认使用当前系统的时间
$atime:可选参数,将文件的访问时间设为$atime,如果未指定该参数则使用$time参数值,若二者均未指定,则默认使用当前系统时间
tmpfile():以读写模式创建一个具有唯一文件名的临时文件,文件创建后即为打开状态可直接进行内容读写,文件会在脚本结束或fclose()关闭后自动删除,创建成功返回文件句柄,失败返回false
tempnam($dir ,$prefix):在指定目录中创建一个具有唯一文件名的临时文件,创建完成后须使用fopen()打开该文件才可进行内容读写,文件不会自动删除须使用unlink()手动删除该文件,若指定目录不存在,会在系统的临时文件下生成该临时文件,创建成功返回新的临时文件名,失败返回false
$prefix:用于产生的该临时文件的前缀字符串,系统仅会取该段字符中的前3个字符作为前缀字符
unlink($filename):删除文件,成功返回true,失败返回false
二、文件的打开、关闭、锁定
fopen($filename ,$mode):打开本地文件或远程URL文件,成功返回文件指针资源,失败返回false
$mode:指定对文件的访问类型,包括:
"r":只读方式打开,将文件指针指向文件头
"r+":读写方式打开,将文件指针指向文件头
"w":写入方式打开,将文件指针指向文件头并将文件内容清空覆盖写入,若文件不存在则创建之
"w+":读写方式打开,将文件指针指向文件头并将文件内容清空覆盖写入,若文件不存在则创建之
"a":写入方式打开,将文件指针指向文件末尾接着已有内容后面写入,若文件不存在则创建之
"a+":读写方式打开,将文件指针指向文件末尾接着已有内容后面写入,若文件不存在则创建之
"x":创建并以写入方式打开,将文件指针指向文件头,若文件已存在则fopen()调用失败并返回false,文件不存在则创建之
"x+":创建并以读写方式打开,其他行为和"x"一样
若打开的是二进制文件,则参数$mode要加上"b"
例:
$filename="c:\files\demo.gif";
$handle=fopen($filename,"rb");
fclose($handle):关闭已打开的文件指针,成功返回true,失败返回false
popen($command ,$mode):打开指向进程的管道,该进程由$command给定的command命令执行而产生,成功返回文件指针资源,失败返回false
$mode:同函数fopen()的$mode参数
例:
$handle=popen("/bin/ls","r");
pclose($handle):关闭用popen()打开的指向管道的文件指针,成功返回进程的终止状态,失败返回-1
flock($handle ,$option):对文件进行加锁、解锁,文件资源句柄关闭或脚本结束后不会自动解锁,必须手动解锁,执行成功返回true,失败返回false
$option:可用以下值以“|”组合使用:
LOCK_SH:取得共享锁定(读取的程序)
LOCK_EX:取得独占锁定(写入的程序)
LOCK_UN:释放锁定(无论共享或独占)
若不希望flock()在锁定时堵塞,用LOCK_NB
三、文件的复制与移动
copy($path ,$newPath):拷贝文件,将文件从原路径$path复制到$newPath,如果目标路径下同名文件已存在则会被覆盖,成功返回true,失败返回false
rename($old ,$new):重命名文件或文件的路径,可利用该函数将文件移动到另一路径下,成功返回true,失败返回false
move_uploaded_file($filename ,$path):将上传的文件移动到新位置,本函数检查并确保文件$filename是通过HTTP POST上传机制上传的合法文件,若文件合法则将其移动到指定的路径$path下,成功返回true;若文件不是合法上传的,则不进行操作并返回false,若文件为合法上传但由于某些原因无法移动,也返回false
四、文件内容的写入、输出
fwrite($handle ,$str ,$length):写入文件内容,将字符串$str的内容写入文件指针$handle处,成功返回写入的字符数,失败返回false(可用于二进制文件)
$length:可选参数,当写入了$length个字节或写完了$str后,写入就会停止
例:
$filename="./demo.txt";
$handle=fopen($filename,"a");
fwrite($handle,"要添加到文件中的内容");
fclose($handle);
fputs($handle ,$str):写入文件内容,fwrite()函数的别名
fread($handle ,$length):读取文件内容,从当前文件指针所在位置读取最多$length个字节,成功返回读取到的内容字符串,失败返回false(可用于二进制文件)
例:
$filename="/usr/local/something.txt";
$handle=fopen($filename,"r");
$contents=fread($handle,filesize($filename));
fclose($handle);
若读取的内容为远程URL文件或popen()打开的进程文件返回的流,读取会在一个包可用之后停止,应将每段数据收集起来合并成块:
$handle=fopen("http://www.example.com/","rb");
$contents='';
while(!feof($handle)){
$contents.=fread($handle,8192);
}
fclose($handle);
file_put_contents($filename ,$data ,$flags):将数据写入到文件中,功能和依次调用fopen()、fwrite()、fclose()写入一样,若文件不存在则在指定的文件路径下创建该名称文件,成功则返回写入到文件中的字节数,失败返回false
$data:指定要写入的数据,类型可以为string、array(不能为多维数组)或stream资源
$flags:可选参数,以下值可用“|”组合使用:
FILE_USE_INCLUDE_PATH:在include目录中搜索$filename
FILE_APPEND:如果文件$filename已存在,追加写入数据而不是覆盖
LOCK_EX:在写入时获得一个独占锁
file_get_contents($filename):获得文件中的内容,以字符串形式返回,文件$filename须已存在,功能类似函数file(),但首选file_get_contents(),失败时返回false
若要指定开始读取的偏移量位置以及读取的最大长度:file_get_contents($filename ,NULL ,NULL ,$offset ,$maxlen)
file($filename ,$flags):将文件内容输出到一个数组中,返回的数组中的每个元素对应于文件中的一行,且附加了换行符,失败则返回false
$flags:可选参数,以下值可用“|”组合使用:
FILE_USE_INCLUDE_PATH:在include_path中查找文件
FILE_IGNORE_NEW_LINES:在数组的每个元素的末尾不要添加换行符
FILE_SKIP_EMPTY_LINES:跳过空行
fscanf($handle ,$format):将文件中的内容格式化输出,每调用一次函数fscanf()会从文件中读取一行,成功则以数组形式返回解析后的内容,失败返回false
$format:与函数sprintf()中的数据类型格式参数相同,同C语言下的数据占位符
%%:返回一个百分号 %
%b:二进制数
%c:字符类型
%d:包含正负号的十进制整型
%e:使用小写的科学计数法(103)
%E:使用大写的科学计数法(103)
%u:不包含正负号的十进制数无符号整型
%f:浮点数(本地设置)
%F:浮点数(非本地设置)
%g:较短的 %e 和 %f(不保留无效的0)
%G:较短的 %E 和 %f(不保留无效的0)
%o:八进制数
%s:字符串
%x:十六进制数(小写字母)
%X:十六进制数(大写字母)
例:
$handle=fopen("users.txt","r");
while($userinfo=fscanf($handle,"%s %s %s
")){
list($name,$profession,$countrycode)=$userinfo;
//... do something with the values
}
fclose($handle);
readfile($filename):将给定的文件的内容写到输出缓冲区,成功则返回从文件中读取并写到输出缓冲区的字符数,失败返回false
fpassthru($handle):将给定的文件指针从当前位置到EOF的内容写到输出缓冲区,成功则返回读取并写到输出缓冲区的字符数,失败返回false
若要输出已有数据的文件中的全部数据,须调用函数rewind()将文件指针指向文件头;若既不需要修改文件也不在特定位置检索,只想将文件全部内容输出到缓冲区,应该使用函数readfile();
fflush($handle):将缓冲区的内容写入到文件中,成功返回true,失败返回false
五、文件内指针操作
fseek($handle ,$offset ,SEEK_SET):设置文件指针的位置,新位置从文件头开始以字节数度量,成功返回0,失败返回-1
$offset:位置偏移量;若要移动到相对文件尾之前的位置,须将该参数设为负值,并设置第三个参数为SEEK_END
SEEK_SET:可选参数,默认值,设定位置等于$offset字节,其他值包括:
SEEK_CUR:设定位置为当前位置加上$offset
SEEK_END:设定位置为文件尾加上$offset
ftell($handle):返回文件指针的位置,即在文件流中的偏移量,失败返回false
feof($handle):检测文件指针是否到了文件结束的位置,如果文件指针到了EOF或出错时返回true,其他情况返回false
rewind($handle):将文件指针重新指向文件头,成功返回true,失败返回false
fgetc($handle):从文件指针中读取单个字符,每调用一次该函数则返回一个包含有一个字符的字符串,碰到EOF则返回false,但返回的值可能为读取到的“0”或“false”,故在循环判断时应使用“===”
fgets($handle ,$length):从文件指针中读取一行,将该行内容返回为字符串,失败则返回false
$length:可选参数,读取一行并返回长度最多为$length-1个字节的字符串,在碰到换行符、EOF或已经读取了$length-1个字节时停止,如果未指定该参数,则默认为1K(1024字节)
fgetss($handle ,$length ,$tags):从文件指针中读取一行并过滤掉HTML和PHP标记,将内容返回为字符串,失败则返回false
$length:可选参数,读取一行并返回长度最多为$length-1个字节的字符串
$tags:可选参数,指定哪些标记不被过滤掉
六、文件属性的获取与修改
clearstatcache():清除文件属性信息的缓存,当使用以下列出的函数时,PHP将自动缓存这些函数的返回信息以提供更快的性能,但如果文件在脚本执行期间被删除或被修改,此时缓存中的文件信息仍为之前的,即须清除缓存以重新获取即时信息
受影响的函数包括:
stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir(),is_link(),
filectime(),fileatime(),filemtime(),fileinode(),filegroup(),fileowner(),filesize(),filetype(),fileperms()
stat($filename):获取文件的属性信息,若$filename是符号连接,则返回的属性信息是被连接文件本身的,而不是符号连接;成功则以数组形式返回信息,失败返回false
返回的数组信息格式:
数字下标 关联键名 说明
0 dev 设备名
1 ino inode号码
2 mode inode保护模式
3 nlink 被连接数目
4 uid 所有者的用户ID
5 gid 所有者的组ID
6 rdev 设备类型
7 size 文件大小的字节数
8 atime 上次访问时间
9 mtime 上次修改时间
10 ctime 上次改变时间
11 blksize 文件系统IO的块大小
12 blocks 所占据块的数目
fstat($handle):获取已打开的文件的属性信息,以数组形式返回信息,与函数stat()一样,但仅作用于已打开的文件而不是文件名
fileatime($filename):返回文件上次被访问的时间,时间以Unix时间戳的方式返回,失败返回false
filectime($filename):返回文件被创建的时间,时间以Unix时间戳的方式返回,失败返回false
filemtime($filename):返回文件上次被修改的时间,时间以Unix时间戳的方式返回,失败返回false
fileowner($filename):返回文件所有者的用户ID,用户ID以数字格式返回,用函数posix_getpwuid()来将其解析为用户名,失败返回false
filegroup($filename):返回文件所属组的ID,组ID以数字格式返回,用函数posix_getgrgid()来将其解析为组名,失败返回false
fileperms($filename):返回文件的权限模式,以数字模式返回
filesize($filename):返回文件大小的字节数,失败返回false
filetype($filename):返回文件类型,参数必须为路径加文件名,不能仅为单独的文件名;返回的字符串包括:fifo、char、dir、block、link、file、unknown,失败返回false
chown($filename ,$user):改变文件的所有者,将文件$filename的所有者改成指定的用户名或用户ID,只有超级用户可以改变文件的所有者,成功返回true,失败返回false
chgrp($filename ,$group):改变文件所属的组,将文件$filename所属的组改成指定的组名或组ID,只有超级用户可以任意修改文件所在的组,其他用户只能将文件的组改成自己所在的组,成功返回true,失败返回false
chmod($filename ,$mode):改变文件的权限模式,成功返回true,失败返回false
$mode:该参数由4个数字组成,第一个数字永远是0,第二个数字规定所有者的权限,第三个数字规定所有者所在组的权限,第四个数字规定其他所有人的权限
1-执行权限,2-写权限,4-读权限 如需设置多个权限,对这三个数字相加
例:
chmod("test.txt",0600); //仅所有者可读可写,其他人无任何权限
chmod("test.txt",0644); //所有者可读可写,所有者所在组仅可读,其他所有人也仅可读
chmod("test.txt",0750); //所有者拥有所有权限,所有者所在组可执行、可读,其他所有人无任何权限
ftruncate($handle ,$size):将文件大小截为$size,成功返回true,失败返回false
七、对文件的判断
file_exists($filename):检查文件或目录是否存在,存在返回true,否则返回false
is_dir($filename):判断给定文件名是否是一个目录,如果文件名存在且是个目录,返回true,否则返回false
is_file($filename):判断给定文件名是否为一个正常的文件,如果文件存在且为正常的文件则返回true,否则返回false
is_link($filename):判断给定文件名是否为一个符号连接,如果文件存在且为一个符号连接则返回true,否则返回false
is_readable($filename):判断给定文件是否可读,如果文件存在且可读则返回true,否则返回false
is_writable($filename):判断给定文件是否可写,如果文件存在且可写则返回true,否则返回false
is_executable($filename):判断文件是否可执行,如果文件存在且可执行则返回true,否则返回false
is_uploaded_file($filename):判断文件是否是通过HTTP POST上传的,如果是则返回true,否则返回false
getimagesize($filename):可用于检测一个文件是否真正是图片类型,若不是则返回false,若是则以索引数组的形式返回图像信息,数组共4个元素,索引0包含图像宽度的像素值,索引1包含图像高度的像素值,索引2是图像的扩展名标识,索引3是内容为“height=" " width=" "”的字符串
八、文件名与路径目录
basename($path [,".后缀"]):返回文件全路径字符串中的文件名部分,如果指定第二个后缀参数,那么返回的文件名不包含“.”及后缀字符
dirname($path):返回文件全路径字符串中的目录部分
$path:若字符串$path中没有斜线,则返回点“.”表示在当前目录;否则返回去掉最后一个斜线及其后内容的字符串
例:
echo dirname("F:/phpEnv/php/index.php"); //F:/phpEnv/php
pathinfo($path ,$options):返回路径下文件的信息,若指定了参数$options则返回对应信息的字符串,未指定则返回关联数组
$options:可选参数,包含PATHINFO_DIRNAME、PATHINFO_BASENAME、PATHINFO_EXTENSION、PATHINFO_FILENAME
例:
$path_parts=pathinfo('/www/htdocs/inc/lib.inc.php');
echo $path_parts [ 'dirname' ], " " ;
echo $path_parts [ 'basename' ], " " ;
echo $path_parts [ 'extension' ], " " ;
echo $path_parts [ 'filename' ], " " ;
realpath($path):将相对路径转为绝对路径,返回绝对路径字符串,失败或文件不存在时返回false
例:echo realpath("./1.php");
fnmatch("含通配符的匹配字段" ,$str):检查传入的字符串$str是否与指定的含通配符的匹配字段相匹配,此函数对于文件名尤其有用,但也可用于普通字符串,匹配则返回true,否则返回false
例:
if ( fnmatch ( "*.txt",$filename)) {
}
glob("含通配符的匹配字段" ,$flags):查询与设定的含通配符的匹配字段相匹配的文件路径,返回一个包含有匹配文件/目录的数组,失败返回false
$flags:可选参数,包括:
GLOB_MARK:在每个返回的项目中加一个斜线
GLOB_NOSORT:按照文件在目录中出现的原始顺序返回(不排序)
GLOB_NOCHECK:如果没有文件匹配则返回用于搜索的模式
GLOB_NOESCAPE:反斜线不转义元字符
GLOB_BRACE:扩充 {a,b,c} 来匹配 'a','b' 或 'c'
GLOB_ONLYDIR:仅返回与模式匹配的目录项
GLOB_ERR:停止并读取错误信息(比如说不可读的目录),默认的情况下忽略所有错误
例:
foreach(glob("*.txt") as $filename){
echo "$filename"."size--".filesize($filename)." ";
}
九、目录的操作
mkdir($path ,$mode ,false):新建路径目录,成功返回true,失败返回false
$mode:可选参数,默认值为0777,表示所有用户最大访问权(可读可写可执行),该参数在Windows下被忽略
false:可选参数,默认值,仅供创建单级目录,若要创建多级目录则该参数必须为 true
例:
mkdir("./demo/"); //在同路径下创建一个名为demo的目录文件夹
mkdir("./autumn/test/demo",0777,true);
//在同路径下创建名为autumn的目录文件夹,在该文件夹下为test文件夹,在test文件夹中为demo文件夹
rmdir($dirname):删除目录,该目录必须是空的且要有相应的权限,成功返回true,失败返回false
rename($old ,$new):重命名目录名,可利用该函数将目录移动到另一路径下,成功返回true,失败返回false
opendir($path):打开目录路径,用于之后的readdir()、rewinddir()、closedir()调用,打开成功返回目录句柄,失败返回false
readdir($dirhandle):返回目录中的文件名,失败返回false
例:
if($dirhandle=opendir('/path/to/files')){
while(false!==($file=readdir($dirhandle))){
echo " $file " ;
}
closedir($dirhandle);
}
scandir($dir ,$order):列出指定路径中的文件和目录,以索引数组的形式返回,失败返回false
$order:可选参数,默认为按字母升序排序,设置该参数为1则按字母降序排序
例:
$dir='/tmp';
$files1=scandir($dir);
$files2=scandir($dir,1);
print_r($files1);
print_r($files2);
closedir($dirhandle):关闭opendir()打开的目录句柄
disk_free_space($str):返回系统目录或磁盘分区的可用空间,成功则返回可用字节的浮点数,失败返回false
disk_total_space($str):返回一个系统目录的磁盘总大小,成功则返回磁盘总大小字节的浮点数,失败返回false
十、连接
symlink("连接的目标","连接的名称"):建立符号连接,成功返回true,失败返回false
lstat($filename):获取符号连接的属性信息,返回的信息结构和函数stat()相同,成功则以数组形式返回信息,失败返回false
lchgrp($filename ,$group):改变符号连接所属的组,改成指定的组名或组ID,只有超级用户可以任意修改符号连接所在的组,其他用户只能将符号连接的组改成自己所在的组,成功返回true,失败返回false
lchown($filename ,$user):改变符号连接的所有者,改成指定的用户名或用户ID,只有超级用户可以改变符号连接的所有者,成功返回true,失败返回false
readlink($path):返回符号连接的路径内容,失败返回false
link("要连接的目标" ,"连接的名称"):建立一个硬连接,成功返回true,失败返回false
linkinfo("连接的路径"):获取一个连接的信息,本函数用来验证一个连接是否确实存在,成功返回lstat系统调用所返回的 UNIX C stat 结构中的 st_dev 字段,失败返回0或false