笔记
文件操作的分类
1.目录操作:用来存放文件的文件
2.文件操作:存放文件本身
----------------------------------
目录中的增删改查
创建
mkdir(路径名字):创建成功返回true,失败false
$res = @mkdir(); @为错误抑制符
删除
rmdir();
读取目录
opendir();打开资源,返回一个路径资源包含指定目录下的所有文件
readdir();从资源中读取指针所在位置的文件名,指针下移,直到移除
关闭
close();
------------------------------------
读取所有内容
遍历
------------------------------------
其他目录操作
1.dirname(一个路径):得到路径的上一层,获取路径的前缀
2.realpath(一个路径):得到真实路径
3.is_dir(一个路径):判断是否是路径
4.scandir():封装版的opendir\readdir\closedir
获取指定路径下的所有文件信息
以数组方式返回
----------------------------------------------
目录操作
递归遍历目录
指定目录下,将所有的文件和目录以及目录内部所有的内容输出出来
递归遍历目录
1.设计一个能够遍历一层文件的函数
2.找到递归点:遍历得到的文件是目录,调用当前函数
得到的结果是文件名字不是目录
需要排除.和..
判断是否是路径
3.递归出口:没有发现任何子文件夹
-------------------------------------------
file_get_contents(路径):获取指定文件的所有内容
文件不存在会自动创建新文件但是目录不会创建
file_put_contents(路径,内容):指定内容写入到指定文件内
PHP4中文件操作
PHP4会依赖文件指针位置
1.fopen(文件路径)
2.fread(资源,长度)
3.fwrite(资源,内容)
4.fclose(资源)
------------------------------------------------
其他文件操作函数
is_file():判断文件是否正确
filesize():获取文件大小
file_exists():判断文件是否存在
unlink():取消文件名字与磁盘地址的链接(删除文件)
filemtime():获取文件最后一次修改时间
fseek():设置fopen打开文件的指针位置
fgetc():一次获取一个字符
fgets():一次获取一个字符串(默认一行)
----------------------------------------------------
文件下载
<a href='aa'>下载</a>
使用a标签下载的缺点:
浏览器是发现如果解析不了才会下载
如果能解析浏览器直接解析
下载路径需要使用href属性写出来,爆出路径
php采用读取文件内容,以文件流的形式给浏览器
并且不会让浏览器解析
1.指定字符集
2.设置响应头
文件返回类型:image/jpg application/octem-stream
返回文件计算方式 accept
下载提示 content-disposition
文件大小accept-length
字符集转码:
iconv(当前字符集,转换字符集,文件)
01.php
<?php
//创建目录,只在当前文件夹下创建文件夹
$res = @mkdir('open');
var_dump($res);
//删除目录
//@rmdir('open');
//读取目录,这里读取的是文件夹
$r = opendir('open');
//ar_dump($r);
//读取资源,这里读取的是文件
//echo readdir($r),'<br/>';
//循环遍历
while($file = readdir($r)){
echo $file,'<br/>';
}
//关闭资源
closedir($r);
//其他函数
$dir = 'E:\phpstudy\WWW\PHP\GJ\10\open';
$dir1 = 'E:\phpstudy\WWW\PHP\GJ\10\open\1.txt';
//var_dump(dirname($dir),dirname($dir1));
//var_dump(realpath($dir),realpath($dir1));
//var_dump(is_dir($dir),is_dir($dir1));
echo "<prev>";
//以数组的方式打印目录下所有文件的信息
var_dump(scandir('open'))
?>
02.php
<?php
//遍历文件目录
//定义路径
$dir = 'WWW';
/*
能够访问指定路径下所有文件且判断出目录还是文件
@parem1 string $dir 指定路径
@parem2 int $level = 0 层级,默认顶层
*/
function myscandir($dir,$level=0){
//首先检验dir是不是路径
if(!is_dir($dir)){
die($dir.'<br/>');
}
//是路径的话我们获取文件夹下的所有文件保存在数组中
$files = scandir($dir);
//遍历数组也是遍历文件名并且依次打印出来
foreach($files as $file){
//所有文件名
//echo $file."<br/>";
//排除 ./..
if($file == '.' || $file == '..') continue;//结束当前循环
//构造对应的路径
$file_dir = $dir.'\\'.$file;
echo str_repeat(" ",$level),$file_dir."<br/>";
//判断路径
if(is_dir($file_dir)){
//递归点
myscandir($file_dir,$level+10);
}
}
}
//测试
myscandir($dir);
?>
03.php
<?php
//获取所有文件以及写入内容
header('content-type:text/html;charset=utf-8');
//读取文件
$file = '01.txt';
$conn = @file_get_contents($file);
var_dump($conn);
//写入
$text = '123';
$res = file_put_contents($file, $text);
var_dump($res);
//PHP4操作
//打开
$f = fopen($file,'r');
var_dump($f);
//读取
$r = fread($f, 10);
echo $r;
//关闭
fclose($f);
//写入
$w = fopen('02.txt', 'w');
$e = fopen('03.txt', 'a');
fwrite($w, "asdadsad");
fwrite($e, "asdadsad");
//下载
header('Content-type:text/html;charset=utf-8');
//设定下载响应头
$file = '01.php';
//文件流形式
header('Content-type:application/octem-stream');
//计算方式
header('Accept-ranges:bytes');
//下载位置文件名
header('Content-disposition:attachment;filename='.$file);
//文件大小
header('Accept-length:'.filesize($file));//在这里进行判断,小文件php5大文件php4
//输出文件php5
echo file_get_contents($file);
//针对大文件下载或者网络延时高php4
$f = @fopen($file, 'r') or die();
while($row = fread($f, 1024)){
echo $row;
}
//关闭资源
fclose($f);
?>