文件上传与下载

文件上传原理

将客户端的文件上传到服务器端,再将服务器端的临时文件移动到指定目录即可

文件上传配置

客户端配置:
1)表单页面 2)表单的发送方式为post 3)添加enctype=”multipart/form-data”属性
服务器配置:
1)file_uploads = on
2)upload_tmp_dir = 临时文件保存的目录
3)upload_max_filesize = 2M 允许上传文件的最大值
4)max_file_uploads = 20 允许一次上传的最大文件数
5)post_max_size = 8M post方式发送数据的最大值

文件上传配置Resoutce Limits

1)max_execution_time = -1 设置脚本被解析器终止之前允许的最大执行时间,单位秒,防止程序写的不好而占尽服务器资源
2)max_input_time = 60 脚本解析输入数据允许的最大时间,单位秒
3)max_input_nesting_level = 64 设置输入变量的嵌套深度
4)max_input_vars = 1000 接受多少输入的变量(相纸分别应用于 GET, _POST和$_COOKIE超全局变量)指令的使用减轻了以哈希碰撞来进行拒绝服务器共计的可能性,如有超指令数量的变量,将会导致E_WARNING的产生,更多的输入变量将会从请求中截断;
5)memory_limit = 128M 最大单线程的独立内存使用量,也就是一个web请求,给予线程最大的内存使用量的定义

错误信息说明

1)upload_err_ok 其值为0,没有发生错误,文件上传成功;
2)upload_err_ini_size 其值为1,上传的文件超过了php.ini中upload_max_filesize选项限制的值
3)upload_err_form_size 其值为2,上传文件的大小超过了HTML表单中max_file_size选项指定的值
4)upload_err_partial 其值为3,文件只有部分被上传
5)upload_err_no_file 其值为4,没有文件被上传
6)upload_err__no_tmp_dir 其值为6,找不到临时文件夹
7)upload_err_extension 其值为8,上传的文件被php扩展程序中断

文件上传限制

客户端限制:
1)通过表单隐藏域吸纳之上传文件的最大值

<input type='hidden' name='MAX_FILE_SIZE' value='字节数' />

2)通过accept属性限制上传文件的类型

<input type='file' name='myfile' accept='文件的MIME类型' />

服务器端限制:
1)限制上传文件大小
2)限制上传文件类型
3)检测是否为真实图片类型
4)检测是否为HTTP POST方式上传

<?php  
    header('content-type:text/html;charset=utf-8');
    $myfile=$_FILES['myfile'];

    $tmp=$myfile['tmp_name'];
    $path="./images/".$myfile['name'];
    if(!move_uploaded_file($tmp,$path)) die('上传失败');
    mysql_connect('www.phpc.com','root','root');
    mysql_query('use dbname');
    mysql_query('set names utf8');
    //图片路径
    $sql="insert into img values(null,'$path')";
    $res=mysql_query($sql);
    if($res){
        echo "ok";
        header('refresh:1;show.php');
    }else{
        echo "no";
    }
?>

文件下载

<?php 
    //传值 
    $path=$_GET['path'];
    //获取文件名
    $filename=basename($path);
    //获取文件的类型
    header('content-type:image/jpeg');
    //激活下载窗口
    header("Content-Disposition: attachment; filename=$filename");
    header('content-length:'.filesize($filename));
    //读取文件
    readfile($path);
?>

应用函数:

$_FILES()  获取文件信息
basename()  返回路径中的文件名部分
dirname(__FILE___) 函数返回的是脚本所在在的路径
pathinfo()  返回文件路径的信息
strtolower()    将字符串转化为小写
end()    将数组的内部指针指向最后一个单元
explode()   使用一个字符串分割另一个字符串
filesize()  取得文件大小
array_filter()  用回调函数过滤数组中的单元
array_values()  返回数组中所有的值
getimagesize()  取得图像大小
uniqid()     生成一个唯一ID
microtime() 返回当前 Unix 时间戳和微秒数
mkdir($path,0777,true)  新建目录
is_uploaded_file()  判断文件是否是通过 HTTP POST 上传的
move_uploaded_file()     将上传的文件移动到新位置
in_array()  检查数组中是否存在某个值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值