$_FILES 预定义变量解析
name : 上传文件的名称
type : 上传文件的MIME类型
tmp_name: 上传到服务器上的临时文件
size : 上传文件的大小
error : 上传文件的错误号
上传文件使用到的函数:
move_uploaded_file($filename,$destination); copy($filename,$destination);
--此处的$filename 指的是tmp_name(很重要)
--$destination 指的是上传文件存放的目录
服务器端配置:
file_uploads = On 支持HTTP上传
upload_tmp_dir = , 临时文件保存路径
upload_max_filesize = 2M 允许上传文件的最大值
max_file_uploads = 20 允许一次上传文件的最大数量
post_max_size = 8M POST方式发送数据的最大值
error 错误信息说明
UPLOAD_ARR_OK --0-- 文件上传成功
UPLOAD_ERR_INI_SIZE: --1-- 上传文件超过了php中upload_max_filesize选项的限制值。
UPLOAD_ERR_FORM_SIZE --2-- 上传文件超过了HTML中表单MAX_FILE_SIZE选项中制定的值。
UPLOAD_ERR_PARTAL --3-- 文件只有部分上传
UPLOOAD_ERR_NO_FILE --4-- 没有文件被上传
UPLOAD_ERR_NO_TMP_DIE --6-- 找不到临时文件
UPLOAD_ERR_CANT_WRITE --7-- 文件写入失败
UPLOAD_ERR_EXTENSION --8-- 上传文件被PHP扩展程序中断
通过表单隐藏限制文件上传的大小
<inptut type="hudden" name="MAX_FILE_SIZE" value="字节数">
通过accept属性限制上传文件的类型
<input type="file" name="myFile" accept="MIME类型">
获取文件扩展名:
strtolower(pathinfo($_FILES[''myFile]['name'],PATHINFO_EXTENSION));
指定目录不存在的情况下用这样的方式创建目录:
$path = 'uploads';
if(!file_exists($path))
{
mkdir($path,0777,true);
chmod($path,0777);
}
确保文件名唯一:
$uniname = md5(uniqid(microtime(true),true)).'/'.$_FILE['name'];
是否是真实的图片类型:
getimagesize($_FILE['tmp_name'])
下载文件
$filename=$_GET['filename'];
header('content-disposition:attachment;filename='.basename($filename));
header('content-length:'.filesize($filename));
readfile($filename);
检验文件的 6 步骤:
检验错误
检验文件扩展名 pathinfo($_FILE['myFile']['name'],PATHINFO_EXTENSION);
检验文件的size
检验文件是否是真实的图片 getimagesize();
检验文件是否是HTTP POST上传的 is_uploaded_file();
检验上传的文件路径是否存在
$path = 'uploads';
if(!file_exists($path))
{
mkdir($path,0777,true);
chmod($path,0777);
}