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

自己动手实现HTML+PHP图片批量上传教程 htmltable {th, td {th {pre {简介:本教程指导初学者如何使用HTML和PHP实现图片的批量上传功能。通过HTML创建表单,允许用户多选并上传图片文件;PHP脚本处理文件上传,包括预处理、安全检查和文件移动;进一步使用b.php进行图片的后处理,如生成缩略图和展示图片。教程涵盖了多文件上传、PHP文件上传处理、安全检查、文件移动和操作等关键知识点,有助于开发者理解和实施基本的文件上传功能。 阅读详情

前言:安全问题

直接将文件上传到服务器是非常危险的行为,攻击者可以将病毒程序伪装成符合上传标准的文件,从而攻击服务器。服务器安全并不是本文提及的重点,但是该检查工具类所使用的原生函数都有对应的伪装破解方法,使用该工具类,并不能完全保证图片上传的安全,希望使用者务必记得这一点。

因此,此处推荐两种较为安全的方式。

  • 前端通过API接口,直接将文件发至第三方云对象储存(例如腾讯云、阿里云、七牛等)

  • 后端接受文件后执行基本检查,调用API或者使用SDK把文件发至第三方云对象储存。

注:该文章与程序不定时更新

调用基本说明

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

文件说明

— submit.html 示例前端文件,用于提交图片
— handle.php 示例后端文件,用于处理图片
— Image.php 实现图片检查与图片保存的工具类
— http.php 一个用于http报错的函数文件

使用说明

1.预定义常量:

需要用户预先定义以下常量:

FILE_PATH 上传到服务器的文件路径
UPLOAD_FILE_MAX_B 最大的图片大小
ALLOW_FILE_TYPES 允许的文件类型转化数组

示例如下:


//上传到服务器的文件路径
define('FILE_PATH', 'upload/');
//最大的图片大小
define('UPLOAD_FILE_MAX_B', 2 * 1024 * 1024);
//允许图片类型
define('ALLOW_FILE_TYPES', 'return array(
                "image/png" => ".png",
                "image/x-png" => ".png",
                "image/jpeg" => ".jpg",
                "image/pjpeg" => ".jpg"
            );'
);

2.引入:

接着在处理图片的后端文件中需要引入该工具类与报错函数文件

require "./Image.php";
require "./http.php";

3.创建实例:

在try-catch块中创建该工具类的实例,并执行函数。执行函数需要用到的参数如下:
$inputName html文件里 上传文件的input框name属性值
$dir 上传的文件路径,根据具体情况进行调整,可以直接取FILE_PATH

示例代码如下:

try {
    //html文件里 上传文件的input框name属性值
    $inputName = 'file';
//    上传的文件路径 按日期分文件夹,方便日后的文件转移
    $dir = FILE_PATH . date('Y/m') . '/';

    $image = new \Image\Image($inputName);
//    图片检查
    $image->check();

//    图片转移保存
    $image->move($dir);

//  无异常
    echo "图片保存成功";

} catch (\Exception $e) {
    //http 报错
    httpStatus($e->getCode());
    //输出报错信息
    echo $e->getMessage();
}

调用流程的详细说明

1. 上传图片的前端页面

在许多网页中,需要实现文件上传功能,最常见的是图片上传,前端html代码 submit.html 示例如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传图片页面</title>
</head>
<body>

<form action="handle.php" name="form" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" name="submit" value="上传"/>
</form>
</body>
</html>

如果你对html不熟悉,你需要了解以下标签属性

<form> 标签的 enctype 属性规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data"。

<form> 标签的 method 属性规定了在提交表单时使用的 HTTP请求方法,此处使用post方法。

<input> 标签的 type="file" 属性规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

<input> 标签的 name 属性表示传输到后端的数据变量名,此处取值为”file“,并没有什么特殊含义,你喜欢的话也可以叫做 ”superImageFile“,只要和后端处理的变量名保持一致即可。


2.form表单传输的文件 & PHP 全局数组$_FILES的接收

form 表单会以”multipart/form-data” 形式,使用 HTTP 的 Post 方法,把数据发送到 handle.php 文件中。上传的文件数据在PHP的 $_FILES 变量里。

$_FILES 是一个全局数组,里面包含了上传文件的信息。

该示例中的 input name 为 “file”。(你喜欢的话也可以 把input name 都改成 ”superImageFile“)

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可填的参数如下所示:

$_FILES["file"]["name"] - 被上传文件名

$_FILES["file"]["type"]- 被上传文件的 MIME 类型,需要浏览器提供该信息的支持,例如”image/gif”。

$_FILES["file"]["size"] - 被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称(格式为:路径/文件名), 一般是系统默认。可以在php.ini里由upload_tmp_dir 指定。

$_FILES["file"]["error"] - 由文件上传导致的错误代码,详情可参考PHP手册-特点-文件上传处理-错误信息说明


3.引入并调用 ImageCheck 工具类进行检查

在需要处理图片上传的后端文件中,引入以下两个文件。

require "./Image.php"; //Image 检查工具类
require "./http.php"; // http 报错函数文件 

同时,需要预先定义好以下常量。

FILE_PATH 上传到服务器的文件路径

UPLOAD_FILE_MAX_B 最大的图片大小

ALLOW_FILE_TYPES 允许的文件类型转化数组

示例如下:


//上传到服务器的文件路径
define('FILE_PATH', 'upload/');
//最大的图片大小
define('UPLOAD_FILE_MAX_B', 2 * 1024 * 1024);
//允许图片类型
define('ALLOW_FILE_TYPES', 'return array(
                "image/png" => ".png",
                "image/x-png" => ".png",
                "image/jpeg" => ".jpg",
                "image/pjpeg" => ".jpg"
            );'
);

Image 类通过抛出异常进行报错,因此需要在 try-catch 块中创建该工具类的实例,并执行函数。

抛出的异常,通过 http.php 内的函数 httpStatus() 进行内容的输出,并通过header来返回 http 状态。

创建 Image 实例,需要参数 $inputName, 表示的是form表单中 type=”file” 的<input> 标签 name 属性

try {

    //html文件里 上传文件的input框name属性值
    $inputName = 'file';

    //创建实例
    $image = new \Image\Image($inputName);

    //执行函数



} catch ( \Exception $e) {

    //http 报错
    httpStatus($e->getCode());

    //输出报错信息
    echo $e->getMessage();
}

4.执行函数

Image 类实例化的对象,先使用 check() 函数进行图片检查。再使用 move() 函数移动图片到指定路径保存。

check() 函数不需要填入参数。

move() 函数需要填入变量$dir,表示上传的文件路径。

    /** 进行基本的检查(空与异常),接着进行自定义的图片检查
     * 检查完之后,会对该类的私有成员变量赋值
     * $this -> fileTmpname  上传后的临时文件名称
     * $this -> fileName 另存为的文件名,示例代码中文件名格式为 Ymd_His.后缀名
     * 例如 20180313_151525.jpg 
     * @throws Exception
     */
    public function check(){...} 

    /** 移动图片并保存
     * @param $dir 保存文件的文件夹路径
     * @param null $tmpname  上传后的临时文件名称(路径/文件名),默认取该类的私有成员变量值。
     * @param null $filename 另存为的文件名,默认取该类的私有成员变量值。
     * @throws Exception
     */
    public function move($dir, $tmpname = null , $filename = null){...}

5.保存成功

若无报错异常,即图片检查无异常,并保存成功。

完整处理的示例代码 handle.php 如下

<?php
/**
 * Created by PhpStorm.
 * User: L
 * Date: 2018-3-11
 * Time: 17:19
 */


require "./Image.php";
require "./http.php";


//上传到服务器的文件路径
define('FILE_PATH', 'upload/');
//最大的图片大小
define('UPLOAD_FILE_MAX_B', 2 * 1024 * 1024);
//允许图片类型
define('ALLOW_FILE_TYPES', 'return array(
                "image/png" => ".png",
                "image/x-png" => ".png",
                "image/jpeg" => ".jpg",
                "image/pjpeg" => ".jpg"
            );'
);



try {
    //html文件里 上传文件的input框name属性值
    $inputName = 'file';
    //上传的文件路径 按日期分文件夹,方便日后的文件转移
    $dir = FILE_PATH . date('Y/m') . '/';

    //实例化对象
    $image = new \Image\Image($inputName);

    //执行图片检查
    $image->check();

    //执行图片转移并保存
    $image->move($dir);

    //无异常
    echo "图片保存成功";

} catch (\Exception $e) {

    //http 报错
    httpStatus($e->getCode());

    //输出报错信息
    echo $e->getMessage();
}

Image类的检查实现

请参阅 PHP检查图片文件并保存到指定路径

构建异步图片上传与剪切的Web应用 Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。通过Ajax,Web应用可以快速地将数据从服务器加载到客户端。这一过程是异步的,意味着用户不需要等待整个数据处理过程完成就可以继续与页面进行交互。工作原理大致如下:用户发起一个HTTP请求。浏览器端JavaScript通过XMLHttpRequest对象或Fetch API与服务器交换数据。服务器返回数据,通常是XML或JSON格式。 阅读详情

相关推荐

实现图片上传功能的nicEdit在线文本编辑器 PHP集成

随着Web应用的普及,用户对内容编辑器的易用性、功能性和定制性要求不断提高。在众多编辑器中,nicEdit凭借其轻量级、快速加载和丰富的功能脱颖而出,成为前端开发者的青睐之选。本章节将介绍nicEdit的基础概念、主要特点和应用场景,以帮助读者快速理解并评估是否适合在自己的项目中集成nicEdit编辑器。nicEdit是一个小型的客户端富文本编辑器,它可以在不依赖其他库的情况下独立运行。它支持各种浏览器,并且配置灵活,用户可以通过简单的设置来改变编辑器的样式和行为。

weixin_42560991的博客 955

PHP图片上传(包括安全验证)

$filename = $_FILES['image']['name']; if ($filename) { //文件类型的点最后一次出现的位置 $file_index = mb_strrpos($filename, '.'); //验证是不是图片 $is_img = getimagesize($_FILES["image"]["tmp_name"]); ...

足各 1102

php图片信息获取

php 获取图片信息,包括相机信息,拍摄位置,坐标,曝光度,比较分析信息,焦距,闪光灯等

php如何确保用户上传的文件是安全的

1,根据 $_FILES 的size,判断用户上传大小是否超过指定大小 2,对文件扩展进行判断,防止用户上传其他类型后缀代码 3,对文件进行重命名,防止用户上传伪装文件,如果 php命令加后缀文件 如果用源生的写法,需要自行判断和进行以上操作,但用tp5的话,很多内容都已经提前被封装好,备注一下: &lt;?php public function touxiang_upload(){ ...

优倍素材网技术总结 1608

PHP数据库开发框架Medoo 0.9.8.zip

Medoo是一款轻量级PHP数据库开发框架,提供了简单,易学,灵活的API,提升开发Web应用的效率与性能。Medoo 0.9.8 更新日志:2015-02-11去除旧版本的LIKE功能Like语法添加数组支持新增加debug模式去除时间比较的支持代码优化以及bug修复官网提供更多的例子和用法说明特性:• 轻量级,只有一个文件 • 简单易学,数据结构一目了然 • 支持多种SQL语法 • 支持多种数据库,包括MySQL, MSSQL, SQLite等等 • 安全,可防止SQL注入 • 免费,基于MIT协议

PHP安全上传图片的方法

主要介绍了PHP安全上传图片的方法,可检测图片类型实现安全判断图片的功能,非常具有实用价值,需要的朋友可以参考下

php如何确保上传图片的安全

1、上传的时候不依靠Content-Type来做文档类型验证,可以参考我在这里的回答如何判断浏览器上传文件的真实类型? 如果是图片可以通过 getimagesize() 获取图片的 mime,这样便不依赖 普通文件可以通过: 1. finfo 扩展 2. mime_content_type() 3. 调用linux命令 exec("file -bi ".escapeshellarg($this->file_src_pathname))来检测 选择合适的一种检测文档类型已经够用了。 图片上

Penge_的博客 867

J1939协议实用指南与J1939数据记录方案

“没错,这是一份SAE J1939简单、实用指南。”—虹科 **开篇:**在这篇介绍中,我们介绍了J1939协议的基本知识,其中包括PGN和SPN。因为这是一篇偏向应用的简介,所以您还将会学习到如何通过DBC文件解码J1939数据、如何记录J1939、典型的应用案例和实用技巧。下面,来了解下这份简单易懂的J1939介绍吧~ 什么是J1939? 简而言之,SAE J1939其实是一套标准,重型车辆ECU间就是按照这套标准在CAN总线上进行通信的。当今大多数车辆都通过CAN(Controller Area Ne

1万+

php上传文件安全校验,php – 安全文件上传并验证它

我收到视频上传和图片上传:我的环境:LAMP编辑:我将允许远程上传和POST视频上传EDIT2:我得到的文件将被重命名,我不会存储原始文件名.>首先我用$_FILES检查mime类型.>其次我再次使用finfo_file(如果函数存在)检查mimetype(PHP 5.3)或shell命令文件.>如果文件通过了上述检查,则文件将被移动到公共目录.我的问题是这个设置安全吗?或者我能...

weixin_33451125的博客 744

西门子S7-1200PLC PID_Temp工艺指令在恒温控制中的实战应用

本文详细介绍了西门子S7-1200PLC中PID_Temp工艺指令在恒温控制系统中的实战应用。从硬件选型、安全接线,到TIA Portal软件组态、编程及核心PID_Temp指令调用,手把手指导搭建系统。重点讲解了利用指令自带的预调节与精确调节功能进行PID参数自整定,最终实现高精度、低波动的温度控制,适用于塑料成型、食品烘烤等多种工业场景。

i1j2k的博客 235

【UE4】Hierarchical Instanced Static Mesh——一种速度优于Spawn的实例化物体组件

最近需要在场景中实例出很多个相同的模型,位置也很有规律,并且要对它的位置信息进行更新。 但是一个个拖进去实在太麻烦,就发现了Spawn Actor这个蓝图方法,可以实例一个蓝图类在场景中。 但是由于数量较大,实例化的速度太慢,这时发现了一个神奇的组件——Hierarchical Instanced Static Mesh。 新建一个蓝图类,添加该组件,在细节里添加你要实例化的模型对象。 ...

ColorGalaxy 1万+

php 文件上传校验_php实现文件上传基本验证

本文实例为大家分享了php实现文件上传基本验证的具体代码,供大家参考,具体内容如下Html部分文件上传PHP服务端部分header("Content-type: text/html; charset=utf-8");//预定义变量//print_r($_FILES);//可以显示错误号,根据错误号来定位错误信息$filename=$_FILES['myFile']['name'];$type=$_...

weixin_32374723的博客 544

从零到一:Livox Mid-360 激光雷达的硬件集成与避坑实战

本文详细介绍了Livox Mid-360激光雷达的硬件集成全流程,包括硬件准备、网络配置、驱动编译和常见问题解决方案。通过实战经验,帮助开发者高效完成从设备拆箱到数据输出的完整链路,避免在IP设置、驱动编译和固件兼容性等环节踩坑。

salt的博客 1028

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

ImageCheck — 基于php的图片检查与保存工具类 开源地址: https://github.com/ParrySMS/ImageCheck/blob/master/Image.php 调用基本说明 请参阅 PHP上传图片检查类与实例用法–接收图片并安全检查后保存到本地 代码全文 &lt;?php /** * Created by PhpStor...

ParrySMS 2073

统信UOS/麒麟Kylin OS下利用pyenv实现Python多版本开发环境搭建指南

本文详细介绍了在统信UOS和麒麟Kylin OS国产操作系统下使用pyenv搭建Python多版本开发环境的完整指南。从系统环境准备、pyenv定制安装到Python版本编译实战,提供了针对国产CPU架构的特殊优化方案和常见问题解决方法,帮助开发者高效管理不同Python版本需求。

sea99的博客 1051

Ros入门 (十)----激光雷达避障 简易实现

本篇文章通过订阅/scan话题获取障碍物的距离信息,达到避障目的,提供部分代码,仅供参考。

weixin_51157015的博客 1万+

java 上传图片内容校验_使用JAVA如何对图片进行格式检查以及安全检查处理

一、通常情况下,验证一个文件是否图片,可以通过以下三种方式:1)、判断文件的扩展名是否是要求的图片扩展名这种判断是用得比较多的一种方式,不过这种方式非常的不妥,别人稍微的把一个不是图片的文件的扩展名修改为图片的扩展名,就绕开了你的这种校验,如果这上传的文件是shell、php或者jsp,那你的网站基本上可以说就在别人的手里面了。不过这种判断方式也不是完全没有用,我们可以把它放在判断图片的最外层,如...

weixin_36079936的博客 1703

YOLOv5/v7/v8首发革新改进——轻巧、创新的LADH检测头

本文介绍了一种原创改进的轻量化非对称多级压缩LADH检测头,该检测头能够实现即插即用,并在YOLOv5/v7/v8检测器中取得了显著的性能提升。本文将介绍一种原创改进的轻量级非对称多级压缩LADH(Lightweight Asymmetric Dual-Head)检测头,该检测头能够实现即插即用,并显著提升YOLO检测器的性能。因此,我们提出了一种非对称多级压缩的方法,即对不同类别的检测头采用不同的压缩比例。然而,为了进一步提高YOLO的性能,我们进行了一项原创改进,设计了一种轻巧且创新的LADH检测头。

IpyVariable的博客 2726

php如何实现上传文件

本文详细介绍了如何使用PHP实现文件上传功能,包括构建表单、配置服务器环境、编写处理脚本以及采取必要的安全措施。遵循以上指南,您应该能够轻松地在自己的项目中集成这一功能。记得始终关注最新的安全建议和技术更新,以保持应用程序的最佳性能与防护水平。

chatgpt001的博客 1900

DBT关键切片重建算法

DBT通过有限角度(通常15°~50°)扫描,获取一系列低剂量投影图,重建出三维断层图像。传统FBP在稀疏角度下会产生严重的“伪影拖尾”和层间干扰。临床诊断中,放射科医生往往只关注几层关键切片(即病灶所在层),其余层仅作参考。

AI的内部世界的博客 89

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

php upload()类,Php文件上传类class.upload.php用法示例

简介:Class.upload.php是用于管理上传文件的php文件上传类,它可以帮助你快速的给自己的网站集成上传文件功能,不仅如此,此分类还有一些列的处理功能,可以对上传的文件或者本地的文件进行处理,其图片处理功能比较 强大,包括图片的缩放、旋转、剪裁、类型转换、应用滤镜、添加边框文字和水印等,支持的图片类型是png、jpg、gif和bmp.使用方法:首先我们要有一个用于提交上传文件的表单,如下...

weixin_34096605的博客 1305

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

文件上传与下载漏洞防护-安全检查清单

文件上传漏洞排查

m0_66872110的博客 1118

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

java 图片检查_使用JAVA如何对图片进行格式检查以及安全检查处理

一、通常情况下,验证一个文件是否图片,可以通过以下三种方式:1)、判断文件的扩展名是否是要求的图片扩展名这种判断是用得比较多的一种方式,不过这种方式非常的不妥,别人稍微的把一个不是图片的文件的扩展名修改为图片的扩展名,就绕开了你的这种校验,如果这上传的文件是shell、php或者jsp,那你的网站基本上可以说就在别人的手里面了。不过这种判断方式也不是完全没有用,我们可以把它放在判断图片的最外层,如...

weixin_32033241的博客 762

上传列表php,PHP图像上传安全检查列表

我编程一个脚本来上传图片到我的应用程序。以下安全步骤足以使应用程序从脚本端安全吗?>禁止PHP使用.httaccess在上传文件夹中运行。>如果文件名包含字符串“php”,则不允许上传。>只允许扩展名:jpg,jpeg,gif和png。>仅允许图像文件类型。>禁止使用两种文件类型的图像。>更改图像名称。>上传到子目录而不是根目录。这是我的脚本:$filen...

weixin_39846186的博客 114

php 图片上传 安全检查

php 图片上传 配置,这个是设置大小 php.ini: file_uploads = On //开启上传 upload_tmp_dir = "d:/work/wamp/tmp" //临时目录 upload_max_filesize = 40M //允许上传文件大小 post_max_size = 80M //允许最大post请求大小 memory_limit = 128M //线程允许最大内存 ...

两个人的幸福online 580

使用JAVA如何对图片进行格式检查以及安全检查处理

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.youkuaiyun.com/jiangjunshow也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本文出自冯立彬的博客,

fdyufgf的博客 600
上一篇: PHP 根据对象属性进行对象数组的排序
下一篇: Ubuntu安装宝塔面板之后无法访问云数据库--原因:服务器出站规则设置
维生素P
博客等级 码龄9年 14粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值