php文件上传详解

16 篇文章 0 订阅

1.PHP配置文件

首先,我们文件上传需要设定一下 php.ini 的配置文件。这是最基本的设置,如果这里设置不成功,那么代码写得再正确也没有用。基本的配置项目如下

file_uploads = on  #文件上传开启
upload_max_filesize= 200M  #文件上传的最大尺寸
upload_tmp_dir = c:/uploads/  #临时文件目录
post_max_size = 250M  #POST时最大尺寸,必须要大于 upload_max_filesize

2.上传时注意事项

1) 文件上传操作表单提交方法必须为 post

2)文件上传时,input type 必须为 file 类型

3)文件上传的表单中,需要增加一个隐含内容,代码如下,value 的单位是 B(字节)

<input type="hidden" name="MAX_FILE_SIZE" value="100000000">
      PS : MAX_FILE_SIZE限制文件上传大小总是被人忽略,我们在使用文件上传的时候总是会限制文件大小,然而我们通常通过$_FILES['thisfile']['error']判断文件是否上传成功是文件已经被发送到服务器端的临时文件夹里面,而我们想要看到的情况是在POST过程之前判断文件大小是否符合我们设置的范围,也就是不向服务器发送文件内容,而是直接在客户端提醒文件大小不符。这是一个非常棒的想法,不过MAX_FILE_SIZE仅仅是PHP对浏览器的一个建议,事实上目前主流的浏览器都没有采纳这个建议,所以使用MAX_FILE_SIZE来约束上传文件的大小形同虚设,可有可无。

      MAX_FILE_SIZE还有一个用场:后台PHP会判断接收到的文件大小是否大于这个值,如果大于,$_FILES['thisfile']['error']值为2,同时放弃保存临时文件,将$_FILES['thisfile']['size']置0。

4)enctype=”multipart/form-data ” 只有文件上传时才使用这个值,用来设置表单的MIME编码,默认情况这个编码格式是application/x-www-form-urlencoded,不能用于文件上传,只有使用了multipart/form-data,才能完整的传递文件数据,让服务器知道我们要传递一个文件并带有一些常规的表单信息。如下

<form action="upload.php" method="post" enctype="multipart/form-data">
</form>

如果不加 enctype=”multipart/form-data”,文件上传是不会成功的。

3.文件上传(简单示例)

HTML:

<form action="" method="post" enctype="multipart/form-data">
    <input type="hidden" name="MAX_FILE_SIZE" value="300000">
    <input type="file" name="file">
    <input type="submit" name="submit" value="提交">
</form>
       PHP:

<?php 
    if (!empty($_FILES['file'])) {//判断上传内容是否为空
        if ($_FILES['file']['error'] > 0) {//判断上传错误信息
            echo "上传错误:";
            switch ($_FILES['file']['error']) {
                case 1:
                    echo "上传文件大小超出配置文件规定值";
                    break;
                case 2:
                    echo "上传文件大小超出表单中的约定值";
                    break;
                case 3:
                    echo "上传文件不全";
                    break;
                case 4:
                    echo "没有上传文件";
                    break;
            }
        } else {
            list($maintype, $subtype) = explode("/", $_FILES['file']['type']);
            if ($maintype != "image" || $subtype != "jpeg") {
                echo "上传文件格式不正确";
            } else {
                if (!is_dir("./upfile")) {//判断指定目录是否存在
                    mkdir("./upfile");//创建目录
                }
                $path = './upfile/' . time() . strtolower(strstr($_FILES['file']['name'], "."));//定义上传文件名和存储位置
                if (is_uploaded_file($_FILES['file']['tmp_name'])) {//判断文件上传是否为HTTP POST上传
                    if (!move_uploaded_file($_FILES['file']['tmp_name'],$path)) {//执行上传操作
                        echo "上传失败";
                    } else {
                        echo "文件:" . time() . strtolower(strstr($_FILES['file']['name'], ".")) . "上传成功,大小为:" . $_FILES['file']['size'] . "字节";
                    }
                } else {
                    echo "上传文件:".$_FILES['file']['name']."不合法";
                }
            }
        }
    }





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值