一、判断普通文件和目录
1.is_file()//判断给定文件名是否为一个正常的文件
2.is_dir()//判断给定文件名是否是一个目录
二、文件的属性
1.file_exists()//检查文件或目录是否存在
2.filesize()//取得普通文件大小 注意是普通文件的大小不是目录
3.is_readable()//判断给定文件名是否可读
4.is_writable()//判断给定的文件名是否可写
5.filectime()//获取文件的创建时间
6.filemtime()//获取文件的修改时间
7.fileatime()//取得文件的上次访问时间
8.stat()//获取文件大部分属性值
三、目录的基本操作
1.basename()//返回路径中的文件名部分
2.dirname()//返回路径中的目录部分
3.pathinfo()//返回文件路径的信息
4.opendir()//打开目录句柄
5.readdir()//从目录句柄中读取条目,返回目录中下一个文件的文件名
6.rewinddir()//倒回目录句柄 相当于回到最初那个状态
7.closedir()//关闭目录句柄
8.mkdir()//新建目录
9.rmdir()//删除指定的空目录
10.scandir()//列出指定路径中的文件和目录
四、文件的基本操作
1.fopen()//打开文件或者 URL
‘r’ 只读方式打开,将文件指针指向文件头。
‘r+’ 读写方式打开,将文件指针指向文件头。
‘w’ 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘w+’ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
‘a’ 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘a+’ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
‘x’ 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
‘x+’ 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
<?php header('Content-type:text/html;charset=utf-8'); $file=fopen('test.txt','r'); var_dump(fread($file,3));//中文在utf-8里占了3个字节
2.fread()//读取文件
3.fgets()//从文件指针中读取一行
4.feof()//测试文件指针是否到了文件结束的位置
<?php
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','r');//返回资源句柄
var_dump(fgets($file)); //一次读一行
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(feof($file));
var_dump(fgets($file));
var_dump(feof($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(fgets($file));
var_dump(feof($file));//4.feof()//测试文件指针是否到了文件结束的位置 想到与输出孙胜利有没有到最后一个,到最后一个为true
?>
5.fwrite()//写入文件
6.rewind()//倒回文件指针的位置
7.flock()//轻便的咨询文件锁定
要取得共享锁定(读取的程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。
◾ 要取得独占锁定(写入的程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。
◾ 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。
◾ 如果不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
<?php
//写入test.txt文件
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','a+'); //a+将文件指针指向文件末尾k
if(flock($file,LOCK_EX)){ //判断加锁是否成功 //独占锁 先读它 和另一个页面一起,会先等它执行完,下个页面也能执行 这个是相当于排队
sleep(10); //延时几秒执行 ,等待10秒
var_dump(fwrite($file,'我是2.php文件写的!'));
flock($file,LOCK_UN);//解锁
}else{
echo '文件加锁失败!';
}
?>
<?php
header('Content-type:text/html;charset=utf-8');
$file=fopen('test.txt','a+');
if(flock($file,LOCK_EX+LOCK_NB)){//不希望在加锁的时候发生堵塞 //直接文件加锁失败
var_dump(fwrite($file,'我是3.php文件写的!'));
flock($file,LOCK_UN);
}else{
echo '文件加锁失败!';
}
fclose($file);//关闭文件句柄
?>
8.ftruncate()//将文件截断到给定的长度
9.fclose()//关闭一个已打开的文件指针
10.file() //把整个文件读入一个数组中
11.copy()//拷贝文件
12.unlink()//删除文件
13.file_get_contents()//将整个文件读入一个字符串
14.file_put_contents()//将字符串写入文件中
<?php
header('Content-type:text/html;charset=utf-8');
//var_dump(file_get_contents('http://baidu.com'));
file_put_contents('test.txt',file_get_contents('http://sifangku.com'));
?>
15.rename()//重命名一个文件或目录
16.readfile()//读入一个文件并写入到输出缓冲
五、文件的上传
文件的上传的过程这些细节我们是不需要管的,都是自动的,上传的文件默认是放在一个临时的目录里面的,我们要做的就是把这些临时目录
里面的文件移动到我们需要的地方就OK啦!
五、文件的上传
1.html标签需要做的上传设置
1) form标签属性设置
1>method设置为post
2>enctype设置为multipart/form-data
3>form表单中设置隐藏类型的input,其中name值设置为MAX_FILE_SIZE,VALUE值设置为需要限制的上传文件的大小(单位为字节)
2.在服务器端通过PHP处理上传文件,涉及到下面的几条信息
1)与上传有关的 php配置选项(php.ini)
配置项 可能值 功能描述
file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传
memory_limit 8M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_filesize 2M 限制PHP处理上传文件的最大值,此值必须小于post_max_size值
post_max_size 8M 限制通过POST方法可以接受的信息最大量
upload_tmp_dir F:/wamp/tmp 上传文件存放的临时路径,可以是一个绝对路径。这个目录对于拥有此服务器进程用户必须是可写的。
2)$_FILES多维数组:用于存储各种与上传有关的信息
$_FILES[‘file’][‘name’] 客户端机器文件的原名称,包含扩展名
$_FILES[‘file’][‘size’] 已上传文件的大小,单位为字节
$_FILES[‘file’][‘tmp_name’] 文件上传之后,在服务器端存储的临时文件名
$_FILES[‘file’][‘error’] 文件上传时产生的错误
0:表示没有发生任何错误,文件上传成功
1:表示上传文件的大小超出了再PHP配置文件中upload_max_filesize选项限制的值
2:表示上传文件大小超出了HTML表单中MAX_FILE_SIZE选项所指定的值
3:表示文件只被部分上传
4:表示没有上传任何文件
$_FILES[‘file’][‘type’] 获取客户端上传文件的MIME类型,MIME类型规定了各种文件格式的类型。每种MIME类型都是由/分隔的主类型和子类型组成
3)PHP的文件上传处理函数:用于上传文件的后续处理
1>is_uploaded_file()判断指定的文件是否通过HTTP POST上传的
2>move_uploaded_file()文件上传后,首先会存储于服务器的临时目录中,可以使用该函数将上传的文件移动到新位置
<?php
header('Content-type:text/html;charset=utf-8');
if(isset($_POST['submit'])){ //判断是否有这个变量 判断是否点了这个 看html代码里 post信息里会有的
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){//is_uploaded_file()判断指定的文件是否通过HTTP POST上传的
//myfile 是name的值,tmp_name 路径传过去判断是否通过 判断一下是比较安全的
//9-19是移动临时文件 在移动的时候把扩展名获取到 还有设置一个新的文件名,不然文件名都是一样的,会被替换掉
$arr=pathinfo($_FILES['myfile']['name']); //获取扩张名
$newName=date('YmdGis').rand(1000,9999);//获取当天时间就会不冲突了,后面是随机数
//move_uploaded_file移动的地方 $_FILES['myfile']['tmp_name']把临时的文件移动到新的地方 //移到uploads文件下 后面是扩张名
//uploads/a 不能全叫a 为了不把上传上来的文件把上一次上传进来的文件替换掉,那我们就要不一样 获取当天时间uploads/'.$newName 也可以这样
if(move_uploaded_file($_FILES['myfile']['tmp_name'],"uploads/{$newName}.{$arr['extension']}")){//之所以要.{$arr['extension'] 是因为扩展名前面有.
echo '恭喜你!上传成功!';
}else{
echo '对不起移动文件失败!';
}
}else{
exit('可能有攻击,请你做合法的事情!');
}
}
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="utf-8" />
<title>上传页面</title>
</head>
<body>
<form action="" method="post" enctype="multipart/form-data">
<input type="file" name="myfile" />
<input type="submit" name="submit" value="开始上传" />
</form>
</body>
</html>
六、文件的下载
获取文件的MIME类型
http://localhost/demo10_4/index.php
就相当于
localhost/demo10_4/a.rar
1)发送指定的文件MIME类型的头信息
header(‘Content-type:MIME类型’);
2)指定下载文件的描述
header(‘Content-Disposition:attachement;filename=文件名称’);
3)指定下载文件的大小
header(‘Content-Length:文件大小’);
4)读取文件内容至输出缓冲区
readfile();
<?php
//通过php文件来模仿另外一个文件
//提示判断是否开启扩张
if(!function_exists('finfo_open')){
header('Content-type:text/html;charset=utf-8');
exit('请先开启PHP扩展:fileinfo!');
}
//扩张要 安装
//并不希望用户看到放的这个文件的路径,通过php文件访问a.rar文件,
$file='a.rar';
$fileinfo=finfo_open(FILEINFO_MIME_TYPE);//开始的时候传进一个标识符这样一个预定义常量进去常量,来表示它做什么事情,这里表示我要一个资源句柄,我要用它来返回一个MIME类型
$mimeType=finfo_file($fileinfo,$file);//现在保存起来就可以
finfo_close($fileinfo);//释放资源
//发送指定的文件MIME类型的头信息
header('Content-type:'.$mimeType);//返回这样的一个类型的文件
//指定下载文件的描述
header('Content-Disposition:attachment;filename='.basename($file));//.basename获取文件的名字
//指定文件的大小
header('Content-Length:'.filesize($file)); //filesize获取文件的大小
//读取文件内容至输出缓冲区,返回这个文件 也就是发送给用户
readfile($file);