判断普通文件和目录
is_file()
:判断给定文件名是否为一个正常的文件is_dir()
:判断给定文件名是否为一个目录
文件的属性
file_exists()
:检查文件或目录是否存在filesize()
:取得普通文件的大小is_readable()
:判断给定文件名是否可读is_writable()
:判断给定文件名是否可写filectime()
:获取文件的创建时间filemtime()
:获取文件的修改时间fileatime()
:取得文件的上次访问时间stat()
:获取文件大部分属性值
目录的基本操作
basename()
:返回路径中的文件名部分dirname()
:返回路径中的目录部分pathinfo()
:返回文件路径的信息opendir()
:打开目录句柄readdir()
:从目录句柄中读取条目,返回目录中下一个文件的文件名rewinddir()
:倒回目录句柄closedir()
:关闭目录句柄mkdir()
:新建目录rmdir()
:删除指定的空目录scandir()
:列出指定路径中的文件和目录
文件的基本操作
fopen()
:打开文件或者URLfread()
:读取文件fgets()
:从文件指针中读取一行feod()
:测试文件指针是否到了文件结束的位置fwrite()
:写入文件rewind()
:倒回文件指针的位置flock()
:轻便的咨询文件锁定ftruncate()
:将文件截断到给定的长度fclose()
:关闭一个已打开的文件指针file()
:把整个文件读入一个数组中copy()
:拷贝文件unlink()
:删除文件file_get_contents()
:将整个文件读入一个字符串file_put_contents()
:将字符串写入文件中rename()
:重命名一个文件或目录readfile()
:读入一个文件并写入到输出缓冲
文件的上传
HTML标签需要做的上传设置
form标签属性设置
method
设置为post
enctype
设置为multipart/form-data
- form表单中设置隐藏类型的input,其中
name
值设置为MAX_FILE_SIZE
,VALUE
值设置为需要限制的上传文件的大小(单位为字节)
在服务器端通过PHP处理文件,涉及到下面的几条信息
1、设置PHP配置文件(php.ini)
配置项 | 可能值 | 功能描述 |
---|---|---|
file_uploads | ON | 确定服务器上的PHP脚本是否可以接收HTTP文件上传 |
memory_limit | 256M | 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存 |
upload_max_filesize | 50M | 限制PHP处理上传文件的最大值,此值必须小于post_max_size值 |
post_max_size | 100M | 限制通过POST方法可以接受的信息最大值 |
upload_tmp_dir | D:/phpstudy_pro/WWW/tmp | 上传文件存放的临时路径,可以是一个绝对路径。这个目录对于拥有此服务器进程用户必须是可写的 |
2、$_FILE多维数组:用于存储各种与上传有关的信息
-
$_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的文件上传处理函数:用于上传文件的后继处理
is_uploaded_file()
:判断指定的文件是否通过HTTP POST上传的move_uploaded_file()
:文件上传后,首先会存储与服务器的临时目录中,可以使用该函数将上传的文件移动到新位置
<?php
header("Content-type:text/html; charset=utf-8");
if(isset($_POST['submit'])){//如果点击上传执行如下代码
if(is_uploaded_file($_FILES['myfile']['tmp_name'])){
$arr = pathinfo($_FILES['myfile']['name']); //获取文件后缀
$newName = date("YmdGis").rand(1000, 9999);//获取当前日期
if(move_uploaded_file($_FILES['myfile']['tmp_name'], "uploads/{$newName}.{$arr['extension']}")){
echo "恭喜你!上传成功!";
}else{
echo "对不起!上传失败!";
}
}else{
exit("可能有攻击,请你做合法的事情!");
}
// var_dump($_FILES);
}
?>
<!DOCTYPE html>
<html lang="en">
<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" value="开始上传" name="submit">
</form>
</body>
</html>
文件的下载
发送指定的文件MIME类型的头信息
header(“Content-type:MIME类型”);
指定下载文件的描述
header(“Content-Disposition:attachement; filename=文件名称”));
指定下载文件的大小
header(‘Content-Length:文件大小’);
读取文件内容至输出缓冲区
readfile();
<?php
$file = 'test.zip'; //文件路径
$fileinfo = finfo_open((FILEINFO_MIME_TYPE));//创建一个fileinfo资源,返回MIME类型
$mimeType = finfo_file($fileinfo, $file);//返回一个文件的信息
finfo_close($fileinfo);//关闭fileinfo资源
//发送指定的文件MIME类型的头信息
header('Content-type:'.$mimeType);
// 指定下载文件的描述
header("Content-Disposition:attachement; filename=".basename($file));
// 指定文件的大小
header("Content-Length:".filesize($file));
// 读取文件内容至输出缓冲区,返回这个文件
readfile($file);
?>