5月24 文件操作
php中文件包含文件和文件夹,其中文件夹又称为目录
以下的操作都是在同一级目录(test0524)下新建文件:aa.txt以及文件夹test,并且test中含有文件bb.txt
一:判断文件类型(都是以数组形式输出)
filetype("./test"); //判断文件类型,返回dir目录
filetype("./aa.txt"); //判断文件类型,返回file文件
由上可知判断文件类型,如果是文件返回file,如果是目录返回dir
is_dir("./test"); //判读给定的路径是不是目录,返回bool型
is_file("./aa.txt"); //判读给定的路径是不是文件,返回bool型
二:判断文件属性
echo date("Y-m-d H:i:s",fileatime("./aa.txt")); //获取文件的上次访问时间
echo date("Y-m-d H:i:s",filectime("./aa.txt")); //获取文件的创建时间
echo date("Y-m-d H:i:s",filemtime("./aa.txt")); //获取文件的修改时间
echo filesize("./aa.txt"); //获取文件的大小
var_dump(file_exists("./aa.txt")); //判断文件名是否存在
三:文件的路径
1. 当前目录:./ 或者不写
2. 上级目录: ../
3. 下级目录:文件夹名/
4. 根目录:/
根目录/有两层意思:如果/是在php程序里面的话代表:硬盘根目录,如果/是在网页里的话代表:代表服务器的根目录(www)。
做文件上传(头像,产品图片),保存在数据的路径一定要写绝对路径
例题:
var_dump(file_exists("/wamp")); //代表是硬盘的根目录(是e盘下的文件)
<img src="/2.jpg" /> 代表的是服务器的目录(www)外面的2.jpg
echo $_SERVER['DOCUMENT_ROOT']; //取服务器www的根目录 返回结果 E:/wamp/www/
echo basename("./aa.txt"); //从路径中获取文件名 aa.txt
echo basename("./aa.txt",".txt"); //返回没有后缀的文件名 aa
echo dirname("./test/bb.txt"); //返回路径中的目录 ./test
var_dump(pathinfo("./test/bb.txt")); //返回文件信息
echo realpath("./test/bb.txt"); //将相对路径转为绝对路径 E:\wamp\www\test0524\test\bb.txt
但是当已经为绝对路径是返回为空
四:目录操作
(1)遍历目录的第一种方法
var_dump(glob("./ueditor/utf8-php/*")); //返回目录下所有的文件
var_dump(glob("./ueditor/utf8-php/*.js")); //可以根据后缀筛选
例题:(1)获取文件的个数
function ShuLiang($filename) { if(is_dir($filename))//判断是否是目录 { $attr = glob($filename."/*"); $sl = 0; foreach($attr as $v) { if(is_dir($v)) { $sl = $sl+ShuLiang($v); } else { $sl = $sl+1; } } return $sl; } else if(is_file($filename))//判断是否是文件 { return 1; } else { return 0; } } echo ShuLiang("../FUXI");
(2)获取文件的大小
方法一(1)网上找来的
<?php //计算文件的大小 echo dir_size("../test0521"); function dir_size($dir) { $dh = opendir($dir); //打开目录,返回一个目录流 $size = 0; //初始大小为0 while(false !== ($file = @readdir($dh))) { //循环读取目录下的文件 if($file!='.' and $file!='..') { $path = $dir.'/'.$file; //设置目录,用于含有子目录的情况 if(is_dir($path)) { $size += $this->dir_size($path); //递归调用,计算目录大小 } elseif(is_file($path)) { $size += filesize($path); //计算文件大小 } } } closedir($dh); //关闭目录流 //return $size; //返回大小 } ?>
方法二(2)自己做的
<?php //获取文件的大小 //filesize("./aa.txt"); function Size($filename) { if(is_dir($filename))//判断是否是目录 { $attr = glob($filename."/*"); $size = 0; foreach($attr as $v) { if(is_dir($v)) { $size = $size+Size($v); } else { $size = $size+filesize($v); } } return $size; } else if(is_file($filename))//判断是否是文件 { return filesize($filename); } else { return 0; } } echo Size("../test0521"); ?>
(2)遍历目录的第二种方法(有开启和关闭)
打开目录资源
$dir = opendir("./liucheng");
操作
echo readdir($dir)."<br>";//读文件 . 当前目录
echo readdir($dir)."<br>";//读文件 ..上级目录
echo readdir($dir)."<br>";//读文件
输出的结果:
while($v=readdir($dir))
{
if($v=="."||$v=="..")
{
}
else
{
echo $v."<br>";
}
}
将上级和当前目录去掉,遍历文件名
关闭目录资源
closedir($dir);
rewinddir($dir);//重置目录资源的指针
目录操作
mkdir("./aa"); //创建目录
rmdir("./aa"); //删除是有要求的必须是空的文件夹
rename("./test","./aa/test1"); //移动 老的路径和新的路径(在移动过程中可以重命名)
五:文件操作
touch("cc.php"); //创建文件可以.php .txt .dox
copy("./aa.txt","../aa.txt"); //复制文件
unlink("./cc.txt"); //删除文件
echo file_get_contents("./aa.txt"); //读取文件的内容
echo file_get_contents("http://www.baidu.com"); //读取本地或者远程
file_put_contents("./aa.txt","权志龙"); //往文件里面写入内容
file_put_contents("aa.txt",file_get_contents("http://www.baidu.com")); //写入远程文件内容(覆盖)
readfile("./aa.txt"); //读取文件内容并显示,不用输出
var_dump(file("./aa.txt")); //读取文件内容并且返回数组,数组里面是每一行
六:对文件内容的具体操作
打开文件资源:
$fp = fopen("文件名","模式 r w");
r只读;r+读写;w写清空;w+读写;a写入文件末尾;a+读写;x创建并以写入打开;x+创建并以读写打开;加一个b代表可操作二进制文件(建议加)
打开文件资源
$fp = fopen("./aa.txt","a");
操作
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp); //输出以字节方式耗时较长
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
循环遍历的方式
while($v=fgetc($fp))
{
echo $v; //一个一个来的
}
获取文件内容一行一行的来,用处并不是很大
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
echo fgets($fp);
echo fread($fp,5); //读取文件内容,可以读取一定长度的内容
fwrite($fp,"hello"); //写入内容,会将原有的内容覆盖(a方式会追加,w方式会覆盖)
关闭文件资源
fclose($fp);
摘自PHP手册