PHP中需要把本地文件上传到服务器中,这就需要的对于文件的进行处理,虽然对于文件的上传可以通过相关的库来完成,但是对于文件上传的整个流程也要有一个清晰的认知,这里就从这方面出发,来看看文件的上传需要做哪些事情。
对于表单上传文件必须的属性
method
属性 :必须是 method='post'
enctype
属性 :对上传文件进行编码处理 :enctype ='multipart/form-data'
查看上传的临时文件
windows10的temp文件可能有权限问题,若有,需要修改上传临时文件地址
修改上传的临时文件地址
修改php.ini中的upload_tmp_dir的文件目录
超全局变量$_FILES
$_FILES是一个二维数组
对于上传文件的判断需要考虑到的问题
构建临时文件
判断是否是HTTP
POST上传的
判断是否有错误
判断文件大小
获取文件扩展名
开启php_fileinfo.dll扩展
获取mime类型
判断文件类型
构建目标文件
构建临时文件
数组中的临时文件名称
//临时文件名
//构建临时文件
$filename =
$_FILES['upload']['tmp_name'];
判断是否是HTTP POST上传
is_uploaded_file(文件) //判断文件是否是通过HTTP POST 上传的, 返回值为布尔
说明:
文件是上传的临时文件
$_FILES['upload']['tmp_name'];
//判断是否是HTTP POST上传的
if (!is_uploaded_file($filename)) {
die('非法上传');
}
判断是否有错误
//
判断是否有错误,error = 0 表示上传成功
if
($_FILES['myfile']['error']!=0) {
die('上传有错误,请重新上传');
}
判断文件大小
upload_max_filesize
//上传允许的单文件的最大值
max_file_uploads
//上传文件的允许最大数量
post_max_size
//上传所有文件字节允许的最大值
//
判断文件大小 php最大是2M
//
要求上传文件的大小小于2M
//
2M转换为字节2*1024*1024
if
($_FILES['myfile']['size']>2*1024*1024) {
die('上传文件过大');}
获取文件扩展名
使用strrpos()和substr()
//
获取文件扩展名
$index
= strrpos($filename,'.');
$ext
= substr($_FILES['myfile']['name'],$index);
使用strrchr()
$ext
= strchr($_FILES['myfile']['name'],'.');
上传文件类型的判断
利用php_fileinfo.dll对MIME类型进行严格检查:
首先在php.ini中开启
开启php_fileinfo.dll扩展
$fs = finfo_open(FILEINFO_MIME_TYPE);
$mime
= finfo_file($fs,$_FILE['upload']['tmp_name']);
上传文件
move_uploaded_file
将上传的文件移动到新的路径move_uploaded_file($tmp_name,$dst_name);//返回布尔值
说明:
$tmp_name
//是临时文件
$dst_name
//目标文件路径及自定义文件名和得到的文件扩展名.