PHP上传图片 检查并保存到指定路径

php 实现图片网页上传功能 立即下载

ImageCheck — 基于php的图片检查与保存工具类


调用基本说明

请参阅 PHP上传图片检查类与实例用法–接收图片并安全检查后保存到本地


代码全文

<?php
/**
 * Created by PhpStorm.
 * User: haier
 * Date: 2018-2-24
 * Time: 21:07
 */
namespace Image;
use \Exception;
class Image
{
    private $inputFile;
    private $fileName;
    private $fileTmpname;
    /**
     * @return mixed
     */
    public function getFileTmpname()
    {
        return $this->fileTmpname;
    }
    /**
     * @return mixed
     */
    public function getFileName()
    {
        return $this->fileName;
    }
    /**
     * Image constructor.
     */
    public function __construct($inputFile)
    {
        $this->inputFile = $inputFile;
    }
    /** 基本的检查(空与异常),接着进行自定义的图片检查
     * @throws Exception
     */
    public function check()
    {
        //清除文件缓存
        clearstatcache();
        //文件空检查
        if (empty($_FILES)) {
            throw new Exception('未检查到图片文件,请检查是否成功上传', 500);
        }
        //获得文件数据
        $image = $_FILES[$this->inputFile];
        //文件数据异常
        if ($image['error'] != 0) {
            $error = $image['error'];
            throw new Exception($error, 500);
        }
        //进入自定义图片检查
        $this->imageCheck($image);
    }
    /** 自定义图片检查
     * @param $image
     * @throws Exception
     */
    private function imageCheck($image)
    {
        //文件不是通过HTTP post 上传的
        $filetmpname = $image['tmp_name'];
        if (!is_uploaded_file($filetmpname)) {
            throw new Exception('文件非法上传', 500);
        }
        //上传文件过大 报错
        $size = $image['size'];
        if ($size > UPLOAD_FILE_MAX_B) {
            $sizeM = UPLOAD_FILE_MAX_B/1024/1024;
            throw new Exception('文件大小不得超过' . $sizeM . 'M。 当前文件大小为 $size', 500);
        }
        //上传文件的文件类型检查
        //后缀名检查
        $type = $image['type'];
        $typeRegion = eval(ALLOW_FILE_TYPES);
        if (!array_key_exists($type, $typeRegion)) {
            throw new Exception("不支持 $type 类型的文件", 500);
        }
        //文件内容检查
        if (!is_array(getimagesize($filetmpname))) {
            //文件为图片后缀 但无法识别不出图片 可能是冒充图片的文件
            throw new Exception("无法识别该图片文件", 200);
        }
        list($width, $height, $attrNum) = getimagesize($filetmpname);
        /** 注意:这段注释非常重要 请不要删除
         * 文件类型检查。
         * 当限制的文件类型都出现再下面的标记中时,可开启该检查。
         * 索引 2 attrNum 是图像类型的标记:
         * 1 = GIF,2 = JPG,3 = PNG,4 = SWF,
         * 5 = PSD,6 = BMP,7 = TIFF(intel byte order),8 = TIFF(motorola byte order),
         * 9 = JPC,10 = JP2,11 = JPX,12 = JB2,
         * 13 = SWC,14 = IFF,15 = WBMP,16 = XBM
         */
        //将图片类型标记存入数组,键表示attrNum,值表示类型
        $attr =['unknown',
            'GIF','JPG','PNG', 'SWF',
            'PSD','BMP','TIFF(intel byte order)','TIFF(motorola byte order)',
            'JPC','JP2','JPX','JB2',
            'SWC','IFF','WBMP','XBM'
        ];
        //只允许的类型标记  2 = JPG,3 = PNG
        $attrArray = [2, 3];
        //支持格式较少 若允许的文件类型并未全部出现在类型标记中 则暂不启用 注释掉attrTypeCheck函数所在行即可
        $this->attrTypeCheck($attrNum,$attrArray);
        /*
         * 自定义的图片比例要求 默认关闭
         * 如果页面有固定的图片裁切器
         * 例如:用户上传图片后,再网页上会进行一个1:1矩形的裁切操作后,才能上传图片(常见于头像上传)
         * 则下面的检查能够保证图片的比例
         */
        //宽高比例为 1:1
        //$this->RatioCheck($width,$height,1,1);
        /**
         * 文件改名以具体情况具体分析
         * 此处为避免图片重名问题
         * 取文件名改名为 时间参数.后缀名
         */
        // 获取略去后缀名的文件名:
//        $filename = substr($filename, 0, strrpos($filename, '.'));
        // 添加时间与后缀名的改名
        $filename = date('Ymd_His') . $typeRegion[$image['type']];
        //保存到参数中
        $this->fileTmpname = $filetmpname;
        $this->fileName = $filename;
    }
    /** 图片类型标记检查
     * @param $attrNum
     * @param $attrArray
     * @throws Exception
     */
    private function attrTypeCheck($attrNum,$attrArray){
        //将图片类型标记存入数组,键表示attrNum,值表示类型
        $attr =['unknown',
            'GIF','JPG','PNG', 'SWF',
            'PSD','BMP','TIFF(intel byte order)','TIFF(motorola byte order)',
            'JPC','JP2','JPX','JB2',
            'SWC','IFF','WBMP','XBM'
        ];
        if (!in_array($attrNum, $attrArray)) {
            //不在类型标记的未知类型
            if($attrNum<0||$attrNum>16){
                $attrNum = 0;
            }
            throw new Exception("不支持的文件类型:$attr[$attrNum]",500);
        }
    }
    /** 图片比例检查
     * @param $width
     * @param $height
     * @param $ratio
     * @throws Exception
     */
    public function RatioCheck($width,$height,$widthNum,$heightNum)
    {
        if($width/$height - $widthNum/$heightNum > 0.001){
            //不符合比例
            throw new Exception("不符合图片比例要求,要求宽高比例为 $widthNum :$heightNum",500);
        }
    }
    /** 移动图片并保存
     * @param $dir
     * @param null $tmpname
     * @param null $filename
     * @throws Exception
     */
    public function move($dir, $tmpname = null , $filename = null )
    {
        //默认取本类的文件参数
        $tmpname = empty($tmpname)?$this->fileTmpname:$tmpname;
        $filename = empty($filename)?$this->fileName:$filename;
        //中文转码
        $filename=iconv("utf-8","gbk",$filename);
        //无目录则创建目录
        if (!is_dir('./'.$dir)) {
            if (!mkdir('./'.$dir, 0777, true)) {
                throw new Exception('图片路径错误', 500);
            }
        }
        //中文转码
        $dirFilename =iconv("utf-8","gbk",$dir.$filename);
        if(!move_uploaded_file($tmpname, './'.$dirFilename)){
            throw new Exception('图片转移失败 ' , 500);
        }
        if (!is_file($dirFilename)) {
            throw new Exception('图片保存失败 ' , 500);
        }
//        获取文件类型
//        $filetype = mime_content_type($filename);
    }
}
SolidWorks + AI:利用 DeepSeek AI 自动生成 VBA Macro 宏,实现智能化建模! 本教程介绍如何将集成到插件,实现的自动化操作。通过 DeepSeek AI,您可以快速生成高效的,提升!💡。 阅读详情

相关推荐

【已解决】App unavailable Unfortunately, Claude is only available in certain countries and regions

App unavailable Unfortunately, Claude is only available in certain countries and regions right now. We will soon publish a list of supported locations on our website.

weixin_43941438的博客 3万+

php如何上传照片到数据库并回显

【代码】php如何上传照片到数据库并回显。

一个努力不被优化的程序员 963

Oracle 常用语法汇总

CREATE TABLE 表名(COMMENT ON COLUMN 注释;-- 创建一个学生表STUDENT_ID NUMBER(10) PRIMARY KEY, -- 学生ID,主键FIRST_NAME VARCHAR2(50) NOT NULL, -- 学生名字,不允许为空LAST_NAME VARCHAR2(50) NOT NULL, -- 学生姓氏,不允许为空EMAIL VARCHAR2(100) UNIQUE, -- 学生电子邮箱,唯一。

拽着尾巴的鱼儿的博客 2158

PHP $_FILES详解

$_FILES数组内容如下:$_FILES[$FormName][name]   客户端文件的原名称。 $_FILES[$FormName][type]   文件的 MIME 类型,需要浏览器提供该信息的支持,例如"image/gif"。 $_FILES[$FormName][size]   已上传文件的大小,单位为字节。 $_FILES[$FormName][tmp_name

shuima的专栏 660

从GEFCom到UCI:手把手教你构建电力负荷时空预测模型(Python版)

本文详细介绍了如何从GEFCom到UCI数据集构建电力负荷时空预测模型(Python版),涵盖数据集解析、时空特征工程、模型架构设计及工业部署优化。通过多任务图神经网络(MTGNN)实现高精度预测,并结合边缘计算和在线学习机制提升实际应用效果,为能源管理系统提供可靠解决方案。

lambda的博客 813

SAP FI模块实操:用F-28和F-32搞定客户回款与手动清账,别再让未清项报表一团糟

本文详细解析了SAP FI模块中F-28和F-32事务代码在客户回款与手动清账中的实操应用,帮助财务人员高效管理未清项报表。通过标准清账六步法和手动清账实战技巧,解决因操作不规范导致的账务混乱问题,提升应收账款管理效率。

weixin_30292843的博客 455

PHP如何接受上传的图片并保存到本地

php作为后端接受上传的图片还是很简单的,需要用到FILES,当客户端或web端向后端post图片时,我们可以用_FILES,当客户端或web端向后端post图片时,我们可以用_FILE接收图片,然后存储在临时缓冲区中,最后用move_upload_file函数保存在本地。<?php $imgname = $_FILES['myfile']['name']; $tmp = $_FIL

我的博客 5万+

YOLOv8【第十二章:数据增强与数据工程篇·第10节】主动学习(Active Learning):如何挑选最有价值的样本进行标注!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 509

php实现文件上传到指定文件夹,文件路径或名字存入数据库,如何实现啊

PHP code ? 1 2 3 4 5 if (move_uploaded_file($file_name, $target_name)) {   //成功了  其中$file_name 就是上传的$_FILES['tmp_name']临时文件名,,$target_name是你的目标路径   //保存

wakice的博客 7578

Flink上传的Jar包去了哪里?大数据

在使用Flink时,我们通常会将应用程序打包成Jar文件并将其上传到Flink集群以执行。总结起来,Flink上传的Jar包实际上会暂时存储在JobManager的本地文件系统中的一个临时目录中。在上传过程中,Flink会将Jar文件存储在JobManager的本地文件系统中的一个临时目录中。一般来说,Flink会在。希望本文对你解答了Flink上传的Jar包去了哪里的疑问,并且能够帮助你更好地理解Flink的工作原理。接下来,我们可以使用Flink命令行工具将Jar文件提交到Flink集群。

AlianBlank的博客 865

1000Base-T1协议解读(基于802.3bq-2016 和Test Suite)

1000Base-T1是由一对双绞线实现全双工传输的以太网标准,采用PAM3编码方式(-1,0,1),编码后的实际传输符号速率为750Mbps。该标准的车载最大传输距离可达15米,主要应用于汽车产品开发过程。测试过程示波器要求带宽≥2G,采样率≥7.5Gbps,网分带宽≥1G。

qflook的博客 5335

php 路径上传图片,PHP上传图片 检查并保存到指定路径

开源地址: https://github.com/ParrySMS/ImageCheck/blob/master/Image.php调用基本说明代码全文/*** Created by PhpStorm.* User: haier* Date: 2018-2-24* Time: 21:07*/namespace Image;use \Exception;class Image{private $in...

weixin_32099703的博客 401

【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型

本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。

智慧空间实验室 2170

php获取图片路径保存mysql_php:在网站后台用户上传的图片如何获得图片路径存入数据库(mysql)?...

文件上传后改名,并保存到指定的目录给个我以前写的一个例子给你看看吧,希望对你有点帮助。if(isset($_FILES['upfile'])&&is_uploaded_file($_FILES['upfile']['tmp_name'])){$filesize=$_FILES['upfile']['size'];//得到文件大小$upfile_type=$_FILES...

weixin_35981962的博客 706

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

php后台图片怎么上传,PHP后台上传图片

/*by的雨*/date_default_timezone_set(‘Asia/Chongqing‘);header("content-type:text/html;charset=utf-8");//这是上传图片的类classUpdateclass{public$pathall;public$picname;publicfunctionupdate($file,$kaiqi=fals...

weixin_34169322的博客 224

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上传文件图片源代码php,php上传文件图片源程序

php图片文件上传html代码:php文件上传代码:$filepaths="";/*上传图片*///用户上传图片处理文件if($_FILES["file"]["name"]) //是否选择上传文件{//控制允许上传的图片类型,最后的100000为允许的图片字节大小if ((($_FILES["file"]["type"] =="image/gif")||($_FILES["file"]["type...

weixin_31437187的博客 668

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

php 图片上传 下载,php文件图片上传类 - php上传下载

/**createdon2010-6-21**theclassforimagetoupload**madebys71ence**@$user_id*@$max_file_size*@$max_image_side*@$destination_folder**return:*@$_cookie['img_path']*@$img_unfind*@$img_ty...

weixin_36011746的博客 87

php图片上传到mysql数据库_php上传图片代码(同时图片保存到数据库)

下面提供的php上传图片代码是一款利用php copy来上传文件的,他不但可以把图片上传到服务器,同时还把图片的地址保存到了mysql数据库里面哦。 代码如下 复制代码 // 连接数据库$conn = mysql_connect("localhost", "phpdb", "phpdb");mysql_select_db("test",$conn);?&g...

weixin_31518415的博客 796

PHP实现图片上传

function upload($path) { $file = $_FILES['file']; //有错误 或者 文件不存在 if ($file['error'] != UPLOAD_ERR_OK || !is_uploaded_file($file['tmp_name'])) { return false...

夜宿荒寺 252

PHP base64上传图片

PHP base64上传图片。

weixin_42925303的博客 337

php 应用上传,PHP文件上传类应用

/** * 步骤: * 1.导入inlcude本类文件,如下函数upload 配置存储路径 * 2.直接运用,配合前台,运行函数,注意前台form打开enctype * 3.若运行成功,转运文件至指定目录,获得返回值url物理全路径 * 4.把指定存储的路径存入数据库 *//** * 文件上传函数,把文件保存到指定路径 * @param * $filename:表单里写的文件名称 name="XX...

weixin_32349561的博客 96

php 上传文件并生成缩略图

php上传图片,生成缩略图

小诏 300

php嵌入图片代码,PHP图片上传代码

PHP图片上传代码使用说明:1. 将PHP.INI文件里面的"extension=php_gd2.dll"一行前面的;号去掉,因为我们要用到GD库;2. 将extension_dir =改为你的php_gd2.dll所在目录;代码如下:/******************************************************************************参数说...

weixin_39538607的博客 253

php 文档上传类,php文件上传(强大文件图片上传类)

header('content-type:text/html;charset=utf-8');class image_upload extends fn_function{private $user_id;private $max_file_size; //allow the image's sizeprivate $max_image_side; //allow the image's side...

weixin_33488806的博客 135

php图片上传api文件流方式传递

第一步把图片放到本地,注意如果是远程图片需要转成本地服务器绝对路径。php和第三方接口上传图片,通过文件流实现类似前端文件上传方式。第四步、创建test6.php接受文件,并保存本地图片。第五步,运行返回结果 ,保存图片成功。第二步创建要上传文件夹。第三步请求上传图片接口。

php-yyds 2701

php合成图片设置图片大小,php 上传图片并按比例生成指定大小图_PHP教程

php 上传图片并按比例生成指定大小图这是一款图象缩略函数哦,把上传的新图片给$srcfile然后进行文件按$thumbwidth 缩小图宽最大尺寸 与$thumbheitht 缩小图高最大尺寸 生成小图。php教程 上传图片并按比例生成指定大小图这是一款图象缩略函数哦,把上传的新图片给$srcfile然后进行文件按$thumbwidth 缩小图宽最大尺寸 与$thumbheitht 缩小图高最大...

weixin_35975177的博客 475
上一篇: Ubuntu安装宝塔面板之后无法访问云数据库--原因:服务器出站规则设置
下一篇: Nginx不解析PHP,无法打开PHP文件
维生素P
博客等级 码龄9年 14粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值