×
热搜词

QQ登录

只需一步,快速开始

PHP 文件上传


上面的脚本检测了文件是否已存在,如果不存在,则把文件拷贝到名为 "upload" 的目录下。


[PHP] 纯文本查看 复制代码
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp);     // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800)   // 小于 200 kb
&& in_array($extension, $allowedExts))
{
    if ($_FILES["file"]["error"] > 0)
    {
        echo "错误:: " . $_FILES["file"]["error"] . "<br>";
    }
    else
    {
        echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
        echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
        echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
        
        // 判断当前目录下的 upload 目录是否存在该文件
        // 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
        if (file_exists("upload/" . $_FILES["file"]["name"]))
        {
            echo $_FILES["file"]["name"] . " 文件已经存在。 ";
        }
        else
        {
            // 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
            echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
        }
    }
}
else
{
    echo "非法的文件格式";
}
?>


度仙门网 - 论坛版权1、本主题所有言论和图片纯属会员个人意见,与本论坛立场无关
2、本站所有主题由该帖子作者发表,该帖子作者与度仙门网享有帖子相关版权
3、其他单位或个人使用、转载或引用本文时必须同时征得该帖子作者和度仙门网的同意
4、帖子作者须承担一切因本文发表而直接或间接导致的民事或刑事法律责任
5、本帖部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责
6、如本帖侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
7、度仙门网管理员和版主有权不事先通知发贴者而删除本文

帖子地址: 

玄元一墨

写了 246 篇文章,拥有下品灵石 9544 枚,中品灵石 11421 枚,上品灵石 10002 枚,被 4 人关注

欢迎访问度仙门网!请在论坛右上角的个人设置中修改你的个性签名!
踩
回复

使用道具

您需要登录后才可以回帖 登录 | 立即注册
B Color Link Quote Code Smilies

246

主题

299

帖子

112万

积分

宗主

Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72Rank: 72

积分
1124258
玄元一墨 发表于 2023-2-2 21:09:12 IP属地:湖北武汉
再附一段取自摇光框架的PHP上传类:


[PHP] 纯文本查看 复制代码
/**
 * 数据上传类: 快速接收用户传来的文件.
 */
class UploadData
{
    const SUCCESS_UPLOAD = "文件上传成功.";

    const ERROR_NO_EXTENSION = "错误: 不允许使用的扩展名.";
    const ERROR_FILE_TOOBIG = "错误: 文件大小超出限制.";
    const ERROR_FILE_SAMENAME = "错误: 文件与已有文件重名.";

    const EXTENSION_NO_PHP = array("php");

    public $log_obj;

    /**
     * 构造方法: 检测是否存在文件存贮目录.
     */
    public function __construct(){
        //实例化日志操作类
        $this->log_obj = new LogHandler;

        if(!file_exists("./data/")){
            mkdir("./data/");
        }
	}

    /**
     * 成员方法: 监听用户是否上传.
     * [String] $file_dir: 文件存储目录.
     * [String] $file_name: 文件名字 (可选).
     * [Array] $extension: 允许或不允许的文件扩展名集合 (可选).
     * [bool] $extension_whitelist: 扩展名检测为白名单模式还是黑名单模式,$extension设置后才有效 (可选).
     * [Int] $file_max_size: 允许的文件最大的大小,以MB为单位 (可选).
     * [String] $file_KeyName: 前端表单里input标签的name属性的值 (可选).
     */
    public function monitor_upload($file_dir , $file_name = null , $extension = null , $extension_whitelist = true , $file_max_size = 2048 , $file_KeyName = "file"){
        //将$file_max_size的单位从MB转换为B
        $file_max_size = $file_max_size * 1024 * 1024;

        //检测是否传入了文件
        if(isset($_FILES[$file_KeyName])){

            //是否使用用户传入的文件的原名
            if(is_null($file_name)){$file_name = $_FILES[$file_KeyName]["name"];}

            if($_FILES[$file_KeyName]["size"] > $file_max_size){
                $this->log_obj->log_write(null , array("Class: ".__CLASS__." Function: ".__FUNCTION__." return: ".$this::ERROR_FILE_TOOBIG));
                TpPrint::common_print($this::ERROR_FILE_TOOBIG);
                return $this::ERROR_FILE_TOOBIG;
            }

            //检测指定的二级存贮目录是否存在.
            if(!file_exists("./data/".$file_dir)){
                mkdir("./data/".$file_dir);
            }

            //检测是以白名单模式还是黑名单模式筛选文件扩展名
            if(!is_null($extension)){
                if($extension_whitelist){
                    //白名单模式
                    $file_extension = get_file_extension($_FILES[$file_KeyName]["name"]);
                    if(!in_array($file_extension , $extension)){
                        $this->log_obj->log_write(null , array("Class: ".__CLASS__." Function: ".__FUNCTION__." return: ".$this::ERROR_NO_EXTENSION));
                        TpPrint::common_print($this::ERROR_NO_EXTENSION);
                        return $this::ERROR_NO_EXTENSION;
                    }
                }else{
                    //黑名单模式
                    $file_extension = get_file_extension($_FILES[$file_KeyName]["name"]);
                    if(in_array($file_extension , $extension)){
                        $this->log_obj->log_write(null , array("Class: ".__CLASS__." Function: ".__FUNCTION__." return: ".$this::ERROR_NO_EXTENSION));
                        TpPrint::common_print($this::ERROR_NO_EXTENSION);
                        return $this::ERROR_NO_EXTENSION;
                    }
                }
            }

            if(file_exists("./data/".$file_dir."/".$file_name)){
                $this->log_obj->log_write(null , array("Class: ".__CLASS__." Function: ".__FUNCTION__." return: ".$this::ERROR_FILE_SAMENAME));
                TpPrint::common_print($this::ERROR_FILE_SAMENAME);
                return $this::ERROR_FILE_SAMENAME;
            }

            //从缓存目录将文件移动至指定目录
            move_uploaded_file($_FILES[$file_KeyName]["tmp_name"] , "./data/".$file_dir."/".$file_name);
            if(file_exists("./data/".$file_dir."/".$file_name)){
                $this->log_obj->log_write(null , array("Class: ".__CLASS__." Function: ".__FUNCTION__." return: ".$this::SUCCESS_UPLOAD));
                TpPrint::common_print($this::SUCCESS_UPLOAD , "提示信息" , true);
                return true;
            }
        }
    }
}


回复

使用道具 举报

Copyright © 2018-, Duxian studio.

返回顶部