php 之 文件操作(0524)
php中文件包含两种:文件,文件夹。文件夹又称目录
新建一个文件aa.txt和一个文件夹text,text文件夹下又包含bb.txt
一、判断文件类型
filetype("./aa.txt"); //取文件类型 : 返回file 文件
filetype("./text"); //取文件类型 : 返回dir 目录
is_dir("./text"); //判断是否是目录 : 返回true
is_dir("./aa.txt"); // 判断是否是目录 : 返回false
is_file("./aa.txt"); //判断是否是文件 :返回true
二、文件属性
echo date("Y-m-d H:i:s",fileatime("./aa.txt")); //文件上次访问时间 :2016-05-24 09:05:01
echo date("Y-m-d H:i:s",filectime("./aa.txt")); //文件创建时间 :2016-05-24 09:05:01
echo date("Y-m-d H:i:s",filemtime("./aa.txt")); //文件修改时间 :2016-05-24 11:05:27
echo filesize("./aa.txt"); //文件大小 : 返回2
var_dump(file_exists("aa.txt")); //文件是否存在 : 返回boolean true
三、文件路径:
1. 当前目录: ./ 或者 不写
2. 上级目录: ../
3. 下级目录: 文件夹名/
4. 根目录: /
根目录/有两层意思:如果/是在php程序里面的话代表:硬盘根目录, 如果/是在网页里的话代表:服务器的根目录(www)。
做文件上传(头像,产品图片),保存在数据的路径一定要写绝对路径
echo $_SERVER['DOCUMENT_ROOT']; //取服务器(www)根路径 : 返回E:/PHP/wampserver/wamp/www/
echo basename("./aa.txt"); //路径中获取文件名 : 返回aa.txt
echo basename("./aa.txt", ".txt"); //路径中获取文件名(去掉后缀) : 返回aa
echo dirname("./text/bb.txt"); //路径中目录名 : 返回:./text
var_dump(pathinfo("./aa.txt")); //返回文件信息 : 返回数组
例子:
显示结果:array (size=4)
'dirname' => string '.' (length=1)
'basename' => string 'aa.txt' (length=6)
'extension' => string 'txt' (length=3)
'filename' => string 'aa' (length=2)
var_dump(pathinfo("./text/bb.txt"));//返回文件信息 : 返回数组
显示结果:array (size=4)
'dirname' => string './text' (length=6)
'basename' => string 'bb.txt' (length=6)
'extension' => string 'txt' (length=3)
'filename' => string 'bb' (length=2)
echo realpath("./text/bb.txt"); // 返回规范化的绝对路径.把相对路径转换为绝对路径 : E:\PHP\wampserver\wamp\www\0524\text\bb.txt
echo realpath("./aa.txt"); // E:\PHP\wampserver\wamp\www\0524\aa.txt
四、目录操作:
1.遍历目录:第一种方法
var_dump(glob("./ueditor/utf8-php/*")); //返回目录下所有的文件
var_dump(glob("./ueditor/utf8-php/*.js")); //可以根据后缀筛选
例子:
var_dump(glob("../0503lianxi/*.php")); //返回该目录下所有.php文件数组.*代表所有,可以根据后缀筛选
显示结果: array (size=6)
0 => string '../0503lianxi/Add1.php' (length=22)
1 => string '../0503lianxi/AddChu.php' (length=24)
2 => string '../0503lianxi/Delete1.php' (length=25)
3 => string '../0503lianxi/Update1.php' (length=25)
4 => string '../0503lianxi/UpdateChu.php' (length=27)
5 => string '../0503lianxi/Zhu1.php' (length=22)
例题1 :获取文件夹下所有文件个数
echo ShuLiang("../0503lianxi"); 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++; } } return $sl; } else if(is_file($filename)) { return 1; } else { return 0; } }
遍历目录:第二种方式
$dir = opendir("../0503lianxi"); //打开目录资源
echo readdir($dir); //返回目录的一个文件,读一次指针向下走,注意前两个
echo readdir($dir)."<br>"; //返回.
echo readdir($dir)."<br>"; //返回..
echo readdir($dir)."<br>"; //返回Add1.php
echo readdir($dir)."<br>"; //返回AddChu.php
平时用这种方法去取目录时要注意去掉前两个 . 和 ..
while($v = readdir($dir))
{
if($v=="." || $v=="..")
{
}
else
{
echo $v."<br>";
}
}
若想再重新输出一次:
echo rewinddir($dir); //指针返回最初
echo readdir($dir)."<br>"; //返回.
echo readdir($dir)."<br>"; //返回..
echo closedir($dir); //关闭目录资源*/
作业:写方法计算文件夹大小:
echo dir_size("../0513lianxi"); 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; //返回大小 }
运行结果:返回5631(字节)
2.创建目录
mkdir("./cc.php");
3.删除目录
rmdir("aa");//删除目录,目录必须为空才可以删除
4.重命名或移动
rename("老路径","新路径");
五、文件整体操作:
touch("./ss.php"); //创建文件
copy("源","目标"); //复制文件
unlink("./aa.txt"); //删除文件
echo file_get_contents("./text/bb.txt"); //读取文件内容(本地)
echo file_get_contents("http://www.baidu.com"); //读取远程内容(远程)
file_put_contents("aa.txt",file_get_contents("http://www.baidu.com")); //写入文件内容(覆盖)
readfile("aa.txt"); //读取文件并输出
$attr = file("aa.txt"); //将文件中每行数据放到数组
var_dump($attr);
六、文件内容操作:
打开文件资源:
$fp = fopen("文件名","模式 r w");
r只读;r+读写;w写清空;w+读写;a写入文件末尾;a+读写;x创建并以写入打开;x+创建并以读写打开;加一个b代表可操作二进制文件(建议加)
'r' | 只读方式打开,将文件指针指向文件头。 |
'r+' | 读写方式打开,将文件指针指向文件头。 |
'w' | 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
'w+' | 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。 |
'a' | 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
'a+' | 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。 |
'x' | 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE ,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给 底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。 |
'x+' | 创建并以读写方式打开,其他的行为和 'x' 一样。 |
$fp = fopen("./aa.txt", "r+");
fwrite($fp,"123456"); //写入内容
echo fgetc($fp); //获取文件内容(一个字符一个字符读)
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
echo fgetc($fp);
fgets($fp); //一次读一行
fread($fp,10); //读多长
feof($fp); //如果文件出错或到末尾返回true