php—文件上传

  1. 对文件上传,不需要使用传统的编码之后上传,所以在form的属性要加上enctype = "multipart/form-data",即不对文件编码。
    默认情况下是 enctype = "application/x-www-form-urlencoded"

    使用 enctype = "text/plain",只对空格编码,编程 +
  2. php使用$_FILES来接收文件。
  3. php端保存的5个信息:
    • name:文件在客户端本地的文件名字。
    • type:文件的类型。
    • tmp_name:文件在服务器端操作系统接收后保存的临时文件名字:默认是操作系统临时文件目录(可以通过php配置文件修改)。
    • error:错误代码
    • 0:没有错误,上传成功。
    • 1:上传的文件超过了php.ini中upload_max_filesize选项的值。
    • 2:上传的文件超过了HTML表单中MAX_FILE_SIZE的值。
    • 3:文件只有部分被上传。
    • 4:没有文件被上传。
    • 6:找不到临时文件夹。php 4.3.10和php5.0.3引入。
    • 7:文件写入失败。php 5.1.0引入。
    • size:文件大小。
  4. 文件从临时目录移动到上传目录
<?php
    // 取出文件
    $file = $_FILES["file"];
    // 简单判定
    if($file["error"] == 0) {
        // 移动文件
        move_upload_file($file["tmp_name"], "目标位置目标文件");
    }
?>
  1. 文件上传函数
<?php
// 1. 明确函数可能变化的内容:文件来源,文件保存的位置,文件大小,文件类型。明确后作为参数传入。
// 2. 明确返回结果:出错返回false,成功跳转路径。
    function fileupload($file, $path, &$error, $type = array(), $size = 2000000){
        // 判定文件本身是否有效
        if(!isset($file["error"])) {
            $error = "文件无效";
            return false;
        }
        // 有效路径判定
        if(!is_dir($path)) {
            $error = "存储路径无效";
            return false;
        }
        // 判定文件本身上传是否成功
        switch ($file["error"]) {
            case 1:
            case 2:
                $error = "文件超过服务器允许大小";
                return false;
            case 3:
                $error = "文件只有部分上传成功";
                return false;
            case 4:
                $error = "用户没有选择要上传的文件";
                return false;
            case 6:
            case 7:
                $error = "服务器操作失败";
                return false;
        }
        // 判定类型是否符合
        if(!empty($type) && !in_array($file["type"], $type)) {
            $error = "当前上传类型不符合";
            return false;
        }
        // 大小判定
        if($file["size"] > $size) {
            $error = "文件大小超过当前允许范围当前允许的大小是:".string($size/1000000)."M";
            return false;
        }
        // 移动文件
        $newfilename = getNewName($file["name"]);
        if(move_uploaded_file($file["tmp_name"], $path."".$newfilename)) {
            // 成功
            return $newfilename;
        } else {
            $error = "文件上传失败";
            return false;
        }
    }
    // 构造一个文件名字:随机规则
    function getNewName($filename) {
        // 时间日期部分
        $newname = date("YmdHis");

        // 增加随机部分
        $old = array_merge(range("a", "z"), range("A", "Z"));
        shuffle($old);
        $newname += $old[0].$old[1].$old[2].$old[3].$old[4].$old[5];

        // 组织文件有效名
        return $newname.strstr($filename, ".");
    }
?>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值