PHP文件和目录操作总结

PHP进行文件和目录操作,熟悉PHP的文件管理系统。

PHP的目录与文件操作与Linux中的终端命令操作很相似,但都是以函数形式进行的操作
这里将分为目录操作文件操作两类进行总结

目录操作

1.创建新目录mkdir()

在指定的路径创建一个新的目录操作。

函数有三个参数

  • 第1参数:路径及目录名称
  • 第2参数:目录访问权限
  • 第3参数:bool,上层目录不存在时,是否递归创建
$dirname = "./public/a/b/c/d"; // "./"是在当前路径下创建

mkdir($dirname,0777,true);

这里的第二个参数是八进制的表示文件权限的mode,windows下会弱化文件权限的特点,所以这里将类比Linux进行文件访问权限的介绍。

PS.文件访问权限简介


文件权限分为3类

  • 可读
  • 可写
  • 可执行

由3位二进制来表示,0代表否,1代表是。
而3位二进制,从左往右依次代表,读权限,写权限,执行权限。

eg. 111 就是文件的最高权限,可读、可写、可执行,对应二进制转换为10进制就是7
101 对应的文件权限就是,可读、不可写、可执行,对应的二进制转换为5
以此类推

访问限制由由3类使用者组成

  • 所有者(用户)
  • 所有者所在的组
  • 全部用户

文件访问权限是由3位八进制数字来表示当前文件相应用户的使用权限。
每一个八进制数字就是文件权限转换为十进制的数字。
代表着对应不同使用者的权限,从左往右依次是,文件创建用户,用户所在组,所有用户。

eg. 777 每一位都是最高权限,及当前文件,所有者 可读可写可执行,所有者所在组 可读可写可执行,全部用户 可读可写可执行。
755 的权限就为:所有者 可读可写可执行,所有者所在组 可读不可写可执行,全部用户 可读不可写可执行


2.判断是目录is_dir(),目录文件是否存在file_exists()

这两个函数经常一起使用。

is_dir()判断当前字符串是否是一个目录,file_exists()判断当前文件是否存在。

$dirname = "./path";
if(file_exists($dirname))
{
	echo "{$dirname}文件存在!";
	if(is_dir($dirname))
	{
		echo "{$dirname}是一个目录";
	}
	else
	{
		echo "{$dirname}不是一个目录";
	}	
}
else
{
	echo "{$dirname}文件不存在!";
}


3.删除目录rmdir()

rmdir($path)只能删除空目录,如果目录中有其他文件,则删除失败。

$dirname = "./path";
if(file_exists($dirname))
{
	if(is_dir($dirname))
	{
		rmdir($dirname);
	}
}


4.更改目录访问权限chmod()

chmod($path,$mode),改变文件访问权限。
访问权限简介见 PS.文件访问权限简介

$dirname = "./path";
chmod($dirname,0444); //将所有用户的权限都设为只读

注意:因为windows对文件权限功能进行了弱化,所以windows最终输出的权限可能有输入的权限不相同。


5.取得文件的访问权限fileperms()

fileperms()以 十进制返回当前文件的权限。

$dirname = "./path";
$mode = fileperms($dirname);
$mode = decoct($mdoe); //将十进制转换为8进制
substr($mode,-4); //从后往前第四个数开始截取数字


6.重命名或移动文件rename()

rename($oldname,$newname),使用很简单
但是注意
如果原路径与新路径在一个目录下,则认为是改名
如过原路径与新路径不再一个目录下,则认为是移动操作

7.打开目录opendir()

用目录句柄接受打开的目录,参数为文件路径。

$dirname = "./path";
//打开目录,成功返回文件句柄,失败返回FALSE
$handle = opendir($dirname);


8.读取文件中条目readdir()

从目录句柄中读取条目,参数为目录句柄。

$dirname = "./path";
//打开目录,成功返回文件句柄,失败返回 FALSE
$handle = opendir($dirname);
//每次循环指向下一个条目,直到所有条目读完,返回 FALSE
while($line = readdir($handle))
{
	echo $line();
}


9.文件名字符编码转换iconv()

将字符串按要求的字符编码来转换。
参数为,输入的字符集,输出的字符集,要转换的字符串

while($line = readdir($handle))
{
	echo iconv('gbk','utf-8',$line);
}

windows操作系统的字符编码是GBK或GB2312,而通常网页的编码是UTF-8

10.关闭目录句柄closedir()

关闭指定目录流,释放资源,参数为目录句柄$handle。

文件操作


1.打开文件fopen()

可以打开文件或URL,fopen($filename , $mode),$filename指定打开的目标文件或URL,$mode文件打开方式

文件打开方式 含义
"r"只读 输入数据,打开一个已经存在的文件
“r+读写 读和写,打开一个文件
"w"只写 输出数据,打开一个文件
“w+”写读 读和写,打开一个文件
“a”追加 写入打开,文件指针指向末尾
“a+读写 读写打开,文件指针指向末尾


2.关闭文件fclose()

关闭已打开的文件指针


3.读取文件内容fread()

读取文件(可用于二进制文件),fread($handle,$length),$handle打开文件时的文件句柄,$length最多读取的字节数
读取图片为例

$filename = "./img.png";
$handle = fopen($filename,'rb')//图片,视频,音频,全是二进制文件
$fout = fread($handle,filesize($filename));
header("Content-Type:image");
echo $fout;
fclose($handle);


4.读取一行内容fgets()

从文件指针中读取一行,fgets($handle,$length),$handle是文件指针,$length从文件中读取一行,并返回长度最多为length-1字节的字符串,可以不指定值,默认为1k
读取文本文档为例

$filename = "./1.txt";
$handle = fopen($filename,'r');

while($str = fgets($handle))
{
	echo iconv('gbk','utf-8',$str);
}

循环读取所有行的数据,碰到换行符、文件结束符终止读取,操作系统默认字符集为“gbk”,而网页默认字符集为“utf-8”,所以需要字符集转换

5.读取文件内容到数组file()

将整个文件读入到一个数组中 ,可以不用创建文件的句柄,第一个参数为文件路径或网页URL。
第二参数为附件选项

  • FILE_USE_INCLUDE_PATH(1):在include_path查找文件;
  • FILE_IGNORE_NEW_LINES(2):在数组的每个元素末尾不添加换行符
  • FILE_SKIP_EMPTY_LINES(4):跳过空行

1,2,4分别代表20,21,22
打开新浪新闻为例

$filename = "https://news.sina.com.cn/";
$arr = file($filename,2|4);

print_r($arr);

返回的结果,网页的每一个标签都是数组中的一个元素

6.写入文件fwrite()

写入文件,fwrite($handle,$string) $string为需要写入的字符串

$filename = "./1.txt"
$handle = fopen($filename,'a');
$str = "ABCDE\r\n";
fwrite($handle,$str);
fclose($handle);

写入中文字符时,注意字符集转换

7.拷贝文件copy()

copy($old,$new),参数分别代表文件的路径,和要拷贝到的路径及副本名称

$old = "./1.txt";
$new = "./2.txt";

copy($old,$new);


8.删除文件unlink()

返回布尔值,成功时返回TRUE,失败是返回FALSE

其他文件操作函数

函数 功能
filesize() 以字节为单位获取文件大小
is_writable() 判断文件是否可写
is_readable() 判断文件是否可读
feof() 判断文件指针是否到达文件结尾
filectime() 获取创建文件的时间
fileatime() 获取文件最新访问时间
filemtime() 获取文件最后修改时间
发布了52 篇原创文章 · 获赞 13 · 访问量 5452

猜你喜欢

转载自blog.csdn.net/MPF1230/article/details/103992675