PHP:文件的上传下载



$_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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值