php最新学习-----文件的操作

一、文件:文件和目录

(1)判断文件的类型用:filetype()

filetype("文件路径+文件名")  //判断文件的类型

例如:我这里查找的的上一级目录中的json文件,输出看下结果(这些文件都是我盘中有的,可以是随便的一个文件)

var_dump(filetype("../json"));  //上一级目录中的json文件

(2)判断文件是不是目录用:is_dir()

is_dir("文件路径+文件名")   //判断文件是不是目录

例如:我这里查找的的当前目录中的11.txt文件,判断文件是不是目录,输出看下结果 

var_dump(is_dir("./11.txt"));   //当前目录中的11.txt文件

  :返回的false说明这个不是目录

(3)判断是不是文件用:is_file()

is_file("路径+文件名")     //判断文件是不是文件

例如:判断下这个文件是文件不?看下输出效果

var_dump(is_file("./11.txt"));   //当前目录中的11.txt文件

二、文件属性

(1)获取文件上次的访问时间用:fileatime()

fileatime("路径+文件名")   //获取文件上次的访问时间

例如:我这里查找11.txt的文件,我先将文件的属性截图看下,后面的会用到这个属性框

查看这个文档的上一次访问时间:

echo date("Y-m-d H:i:s",fileatime("./11.txt"));   //用时间戳可以看得清楚时间,查的是当前目录下的11.txt文件

查看下是不是属性框中,结果是一样的

(2)获取文件的修改时间用:filectime()

filectime("路径+文件名")     //获取文件的创建时间

例如:查看11.txt文件的创建时间

echo date("Y-m-d H:i:s",filectime("./11.txt")); 

查看属性框中的创建时间是不是一样呢?

(3)获取文件的修改时间用:filemtime()

filemtime("路径+文件名")   //获取文件的修改时间

例如:查看11.txt文件的修改时间 

echo date("Y-m-d H:i:s",filemtime("./11.txt"));

 查看属性框中的修改时间是不是一样?

(4)获取文件的大小用:filesize()  

filesize("路径+文件名")   //获取文件的大小  

例如:查看11.txt文件的大小

echo filesize("./11.txt");  

是不是和属性框中的文件大小是不是一样?

(5)获取文件是否存在用:file_exists()

file_exists("路径+文件名")   //获取文件是否存在

例如:查看12.txt文件是否存在吧

var_dump( file_exists("./12.txt"));

   这个文件是不存在的,多以是false,存在的话就是true

三、文件路径

文件路径以下几种:
1 ./代表当前目录
2 ../代表上一级目录
3 /代表根目录
      (3.1)网页里面的根:代表www目录
      (3.2)php里面的根:代表磁盘目录

下面看各种方法的用处:

(1)获取当前服务器的根www

$_SERVER['DOCUMENT_ROOT']   //获取当前服务器的根www

直接输出看下

(2)获取路径中的文件名

basename("文件")   //一个参数:就是文件的路径

例如:获取一个文件中的一个文件

echo basename("./touxiang/test.php");   //touxiang文件中的test文件

结果就是:文件名+后缀名

(3)获取去掉后缀的文件名

basename("文件",".后缀名")    //有两个参数:第一个是文件的路径,第二个就是去掉后缀名是什么

例如:还是找一个文件中的一个文件

echo basename("./touxiang/test.php",".php");

结果就是:只有文件名

(4)获取路径中除去文件名的部分

dirname("文件")  //一个参数,正常的文件路径就可以

例如:还是查找上面的那个文件

echo dirname("../touxiang/test.php");

结果就是没有文件名只剩下路径了

(5)获取文件信息,返回数组

pathinfo("文件名")

例如:还是touxiang文件中的test文件

var_dump(pathinfo("../touxiang/test.php"));

(6)将相对路径转换成绝对路径

realpath("文件")

例如,当前文件中的一个文件

echo realpath("./11.txt");

四、遍历目录

(1)返回目录下的所有文件 :glob()

var_dump(glob("./touxiang/*"));  //文件,*代表所有

文件中的文件都有显示:

 (2)循环遍历下这个文件夹

$attr = glob("./touxiang/*");
foreach($attr as $v)
{
	echo $v."<br>";
}
					

输出下的结果

例题::显示文件夹中的文件数量(包括子文件夹中的文件)

找一下touxiang文件中的文件数量吧,一共是6个,两个文件,一个子文件,子文件中有3张图片,所以是六个文件

   

function ShuLiang($fname)
{
  $attr = glob($fname."/*");   //路径中的所有
  $n = count($attr);  //文件的总数
				
  foreach($attr as $v)
  {
    if(is_dir($v)) //判断是否是文件
    {
	  $n = $n+ShuLiang($v);  //是的话调用方法再继续加
    }
					
  }	
  return $n;
}
echo ShuLiang("./touxiang");	

输出的结果就是6

(3)目录资源

为了以后写方便,可以先定义一个文件目录

$fname = "./touxiang";  //将touxiang文件定义

打开目录资源:opendir()

$dir = opendir($fname);

有打开就会有关闭:closedir()

将打开的目录遍历,得到目录中的文件

while($url = readdir($dir))   //循环读取
{
	echo $fname."/".$url."<br>";   //路径拼上
}
			

然后就是关闭目录资源

closedir($dir); //关闭目录资源

运行查看下结果

  在结果中出现了“.”和“..” 一定要注意,这是代表下一层和上一层目录

例题::获取某一个目录下所有文件的大小

这里还是获取touxiang文件夹的大小吧

还是定义一个方法,然后是打开目录资源,相应的关闭目录资源,然后遍历目录找到文件,累计大小,肯定会有子目录,也要找到子目录的文件,结算子目录文件中的大小

function Fsize($fname)
{
	$size = 0;
	$dir = opendir($fname);
				
	//遍历目录,找到文件,累加大小
	while($u = readdir($dir))
	{
		if($u=="." || $u=="..")  //判断,一定要有,如果没判断有这个磁盘的内容都没有了
		{
		}
		else
		{
			$zfname = $fname."/".$u;
			if(is_file($zfname))
			{
				$size += filesize($zfname);  //文件大小累计加
			}
		}
	}
				
	//找到子目录,获取子目录下文件大小
	rewinddir($dir);
	while($u = readdir($dir))
	{
		if($u=="." || $u=="..")
		{
		}
		else
		{
		  $zfname = $fname."/".$u;
		  if(is_dir($zfname))
		  {
			$size += Fsize($zfname);  //调用方法继续加
		  }
	     }
	}
				
	closedir($dir);
	return $size;
}
			
echo Fsize("./touxiang");

得到的结果是:

这个和文件的属性中的大小是一样的

(4)创建一个新的文件夹(现在的文件夹内的内容)

想要创建个新的文件夹

mkdir("./bb");   //创建文件夹

文件中这样就创建了个文件夹:

(5)有创建就有删除(把刚才创建的文件夹删除)

注意:只能删除空的文件夹

rmdir("./bb");   //删除文件夹(只能删除空的文件夹)

这样刚才创建的文件已经删除了:

(6)移动目录文件(我这里把名字也改成了aa)

rename("./touxiang1","../aa")  //第一个参数是要移动的文件,第二个参数是移动到哪里,然后也可以改个名字

文件已经移出来了: 

五、文件整体操作

touch("./22.txt"); //创建文件
copy("./11.txt","../11.txt"); //复制文件
unlink("../11.txt"); //删除文件
echo file_get_contents("./11.txt"); //*获取本地文件内容
echo file_get_contents("http://www.baidu.com");  //还可以获取远程文件内容
readfile("11.txt"); //读取文件内容并输出
var_dump(file("./11.txt")); //读取文件内容,每行放在数组里面当做一个元素

六、文件内容操作

$f = fopen("./11.txt","r"); //打开文件并返回文件资源:两个参数:可以选择打开模式:r只读,r+读写入,w写入新内容,并且清空原来的内容,a追加新内容
fwrite($f,"hello world"); //写入内容

echo fgetc($f);
echo fgetc($f);
echo fgetc($f); //读取文件内容,一个字符一个字符的读
echo fgets($f);
echo fgets($f); //读取文件内容,每次读一行
echo fread($f,10); //读取文件内容,按照长度来读:两个参数,一个是文件,另一个是长度,可以控制读取

fclose($f); //关闭文件资源

例题:删除文件

function ShanChu($fname)
{
	//遍历该文件夹,找到所有文件删除
	$dir = opendir($fname);
	while($n = readdir($dir))
	{
		if($n!="." && $n!="..")  //这是必须有的,不然这个磁盘上的内容群都会被删除
		{
			$zname = $fname."/".$n;
			if(is_file($zname))
			{
			  unlink($zname);  //删除文件
			}
			else
			{
			  ShanChu($zname);  //如果有子文件夹也要删除,这里调用这个方法
			}
		}
	}
	closedir($dir);
			
	//删除文件夹
	rmdir($fname);
}
			
ShanChu("../aa");

文件夹aa被删除了  

文件的操作,到此结束~~~

原文地址:https://www.cnblogs.com/nuanai/p/6287222.html