PHP 学习第七课 文件系统
文件系统
文件系统的操作函数:
1、创建文件,touch();
返回值:boolean 成功 true 错误 false
例:touch(./index.php); //在当前目录下创建一个index.php文件
函数格式:touch(‘文件名’);
2、移动文件:rename();
函数格式:rename('当前文件目录',‘目标文件目录’)
返回值:true or false
注:目标文件目录可以是当前文件目录,也可以是其他的目录,而且目标目录里面的文件名称可以修改。
例:1、rename(‘./index.php’,’../admin/index.php’)
2、rename(‘./index.php’,’../admin.php’);
3、rename(‘./index.php’,’./admin.php’);
3、删除文件:unlink();
返回值:true or false
函数格式:unlink(‘文件名或者文件路径+文件名’);
例: 1、unlink(‘./text.php’);
2、unlink(‘text.php’);
4、复制文件:copy();
返回值:true or false
函数格式:copy(‘原文件名’,’目标文件名’);
例: copy(‘./admin/images/a.gif’,’./admin/pic/a.gif’);
5、文件打开:fopen()
返回值:成功返回资源,出错返回false
函数格式:fopen(‘文件名或者文件路径+文件名’,’第二个参数代表以什么模式打开’);
例:fopen(./index.php);
6、关闭文件:fclose();
返回值:boolean false
函数格式:fclose($file);
例: $file=fopen(‘./index.php’);//先打开一个文件,返回一个值给$file
fclose($file); //关闭打开的文件。
7、读取文件:fread();
返回值:返回读取出来的字符串或者出错时返回boolean 型的false
注:读取文件需要先打开才可以,后面详细完整的案例即可看到fread();的函数使用方法。
8、判断文件指针是否在结尾:feof();
返回值:布尔类型的 true or false
9、写入文件:Fwrite();
返回值:返回写入的字符串,出错时返回的布尔型的false
Fopen()函数的打开模式:
R:只读的方式打开
a:追加或者累加的方式打开
重点掌握这两个即可,下面介绍几个其他的参数
R+读写方式打开文件(可以执行部分的写入功能)
W 写入方式打开
W+读写的方式打开(可以执行部分读取功能)
a+增强的追加模式打开(可以执行部分的读取功能)
X 异或方式打开
X+增强的异或模式
文件系统操作函数的完整例子:
假设以下所有文件均存在:
<?php
$file=Fopen(‘./demo.php’,’c+’); //以追加的模式打开当前目录下面的demo.php返回给一个变量$file
Fwrite($file,’这是一个测试文件系统的demo.php文件’);
//$content=Fread($file,1); //读取被打开的文件,每次读取一个字节返回给//$content
While(!feof($file)){//feof()函数判断文件是否读取到最后,直到最后停止while循环,否则一直读取到文件结尾。
$content=fread($file,1);
Echo $content;
}
Fclose($file); //操作完毕后关闭文件
?>
复制以上脚本直接运行查看效果!
10、返回目录名称:Dirname();
返回值:字符串,一个文件的路径
函数格式:dirname(‘一个路径’);
例: dirname(‘./amdin/index.php’);
11、返回文件名:basename();
返回值:返回字符串(被得到的文件名称)
函数格式:basename(‘一个路径’);
例:basename(‘./demo/php/index.php’);
12、返回文件路径信息:pathinfo();
返回值:数组
函数格式:pathinfo(‘一个要解析的路径’‘第二个参数’);
例:pathinfo(‘./demo/index.php’PATHINFO_BASENAME);
第二个参数包括四个常量:
1、 PATHINFO_DIRNAME:只返回一个目录名称
2、 PATHINFO_BASENAME:只返回一个文件名称
3、 PATHINFO_EXTENSION:只返回文件的后缀名称
4、 PATHINFO_FILENAME:只返回文件的名称,不包括文件的后缀名
13、判断是否是文件:is_file();
返回值:boolen布尔类型(true or false)
函数格式:is_file(‘一个文件路径’);
例如:is_file(‘./demo/pic.jpg’);
14、判断文件或者目录是否存在:file_exists();
返回值:true or false
函数格式:file_exists(‘文件名或者目录’);
例:file_exists(‘./demo/’); //判断demo目录是否存在
File_exists(‘./demo/pic.jpg’); //判断demo/pic.jpg文件是否存在
15、判断是否是目录:is_dir();
返回值:true or false
函数格式:is_dir(‘给定的一个文件路径或者文件名称’);
例:is_dir(‘./demo/pic.jpg’); //返回false
Is_dir(‘./demo/’); //返回true;
16、创建目录:mkdir();(不能创建多层的目录,仅支持一层目录的创建)
返回值:true or false
函数格式:mkdir(‘要创建的目录名称和路径’,’第二个参数可选,并且在windows 下面无效,默认是0777’);
例:mkdir(‘./demo/test/’); /创建了一个test文件夹
17、删除目录:rmdir(); (不能删除非空目录)
返回值:true or false
函数格式:rmdir(‘目录的路径’);
例: rmdir(‘./demo/test/’); //删除demo下面的test/文件夹
18、打开文件目录:opendir();
返回值:resource 资源类型
函数格式:opendir(‘./demo/’);
例:opendir(‘./demo/’); //打开demo文件夹
19、读取文件夹(从目录句柄中读取条目):readdir();
返回值:成功返回文件名,失败返回false
函数格式:readdir(‘目录路径’);
例:readdir(‘./demo/’); //读取文件夹demo
20、关闭文件夹(关闭目录句柄):closedir();
函数格式:closedir(‘目录路径’);
例: closedir(‘./demo/’); //关闭demo文件夹
文件的上传与下载
文件上传的php.ini配置文件的修改地方
1、 file_uploads=on; 开启文件上传功能
2、 upload_max_filesize=2m 控制上传的文件的大小,最大2M
3、 upload_tmp_dir:文件上传的临时文件存放目录
4、 post_max_size:表单上传的大小限制
注意:post_max_size一定要大于upload_max_size的值。
在上传文件的时候html的form表单里面需要添加一个新的属性
Enctype=’multipart/form-data’
文件上传要注意以下几点:
1、 注意要修改上传后的文件名称,避免覆盖已经有的文件,及服务器的安全。
2、 控制被上传的文件的大小(节省服务器资源,带宽,硬盘的开销)
3、 注意控制上传的文件类型,例如php,asp,js,exe等文件不能被上传。
文件上传的完整实例:(已经封装为函数,直接调用即可)
function Myupload($file_name,$file_type,$file_size,$file_path){
$file=$_FILES[$file_name];
if($file[‘error’]>0){
switch($file[‘error’]){
case 1 :
die(‘您上传的文件过大’);
case 2 :
die(‘您上传的文件还是过大’);
case 3 :
die(‘文件只能被部分上传’);
case 4 :
die(‘文件不能为空’);
default :
die(‘未知的错误’);
}
}
// $file_type=array(‘image/jpeg’,’image/gif’,’image/png’);
if(!in_array($file[‘type’],$file_type))
die(‘你上传的文件类型不正确’);
//计算图片大小
// $size=1000000;
if($file[‘size’]>$file_size)
die(‘上传的文件过大’);
//获取后缀名,重新命名文件
$newname=explode(‘.’,$file[‘name’]);
$suffix=array_pop($newname);
$newfile=md5(date(‘YmdHis’)).’.’.$suffix;
//$path=’./upload/’;
if(move_uploaded_file($file[‘tmp_name’],$file_path.$newfile)){
echo ‘文件上传成功’.$file_path.$newfile;
}else{
‘文件上传失败!’;
}
}
$file_name=’file’;
$file_type=array(‘image/png’,’image/jpg’,’image/gif’);
$file_size=10000000;
$file_path=’./upload/images/’;
if(!file_exists($file_path)){
mkdir($file_path);
}
Myupload($file_name,$file_type,$file_size,$file_path);