博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php中上传图片
阅读量:6701 次
发布时间:2019-06-25

本文共 3595 字,大约阅读时间需要 11 分钟。

这里来看看php中如何上传图片的

先看代码check_image.php

                                    
Your username
Upload image*
* Acceptable image formats include: GIF, JPG/JPEG and PNG.
Image Caption

这里没什么可以说的,都是常见的html标签。

下面看看上传的代码check_image.php,重要的地方都做了注释,整个过程是先根据那个<input type="file" name="uploadfile"/>指定的图片路径来创建一个图片文件,然后再通过指定的上传路径生成这个图片。

So how does it feel to be famous

Here is the picture you just upload to servers

upload image
Image save as:
Image type:
Height:
Width:
Upload date:

最后写道数据库中的信息如下:

 

在upload_image.php这个页面中同图片file控件使用户可以通过浏览自己的本地文件选择要上传的文件,其次还要对form的enctype属性进行设置,这里需要上传文件所以在发送到服务器之前不对表单数据进行编码,需要将值设置成mulitpart/form-data,还要注意这里method属性应该设置成post,如果设置成get的话,不能正常地上传文件。

在check_image.php这个页面中则需要检查文件类型,然后将文件信息写入到数据库中,最后在指定的路径中写入文件并输出文件信息,如果不符合类型或者写入的过程中有错误则会输出错误并跳出程序,输出错误信息。

php中使用$_FILES数组来存储上传的文件信息,这个数组是多维的,第一维的KEY是上传控件的name属性值,如果在一个页面中有多个上传控件的话可以使用不同的KEY值来区分它,第二维参数名字及含义如下:

   name:在本地的文件名字

   type:图片文件的扩展名字
   size:图片文件的大小以byte来计算
   tmp_name:在上传到的新的目录上的文件名字
   error:上传过程中出现的错误
在上传到目录之前文件以一种临时文件的形式出现,上传完之后一定要销毁这个临时文件。

type属性是要上传文件的扩展名字,例如:image/jpg,image/gif,记住这个名字是通过浏览器来获得的,可能不正确,不怀好意的用户可能会伪造这个文件扩展名。

size属性表示要上传文件的大小,它是以byte来计算,

error属性来告诉客户端上传过程中的一些错误代码,通过这些代码将能编写出更加健壮的程序,error的枚举值如下:

UPLOAD_ERR_OK:文件上传成功

UPLOAD_ERR_INI:上传文件超过php.ini文件中规定最大上传文件大小
UPLOAD_ERR_FORM_SIZE:上传文件超过HTML文件中规定的文件上传大小限制
UPLOAD_ERR_PARTIAL:上传的文件不完整
UPLOAD_ERR_NO_FILE:在php.ini中没有指定临时文件夹
UPLOAD_ERR_CANT_WRITE:文件夹没有写入权限,php不能写入
UPLOAD_ERR_EXTENSION:上传文件被php中断

很多地方可以对上传文件进行限制,当上传文件大小超过php.ini中文件大小的时候将返回UPLOAD_ERR_INI值,默认情况下这个值是2M,如下:

upload_max_filesize = 2M

如果要修改这个值,可能还需要同时修改 post_max_size这个,upload_max_filesize限制上传文件的大小,post_max_size限制整个post数据大小,所以如果upload_max_filesize大于post_max_size,上传也可能失败,所以这两个值的关系应该是post_max_size大于upload_max_filesize。

当文件大小大于html页面中一个特定的隐藏域设置大小的时候将返回UPLOAD_ERR_FORM_SIZE,这个隐藏域的设置如下:

<input type=”hidden” name=”MAX_FILE_SIZE”  value=”262144”/>
<input type=”file” name=”uploadfile”/>

 要注意的是这个隐藏域的位置应该在上传控件之上。这个值不一定有用,不怀好意的人可能在上传过程中修改文件的大小信息进而蒙骗服务器。正常情况下这个值还是有用的,可以用它来显示文件大小超过限制的信息。

当文件上载成功之后,getimagesize()方法可以返回一个5个元素的数组,用来获取文件的信息,例如:

下标为0的元素:图片的宽度

下标为1的元素:图片的高度
下标为2的元素:一个枚举,表示图片的类型
下标为3的元素:一个字符串类似于height=“ yyy ”   width=“ xxx ”
下标为4的元素:文件的扩展名称,简单说还是文件的类型

 确定图片类型之后,将文件读入内存,imagecreatefrom*()方法打开文件并返回句柄,记住文件是首先放到一个临时的文件夹中,然后再写入到最终路径中,最后销毁,通常是使用 move_uploaded_file() 方法来实现的,第一个参数是要文件名字,第二个参数是文件上传的路径,如果文件类型是非法的话imagecreatefrom*()方法会返回错误。

同时根据文件类型制定文件扩展,如果上传的文件不再指定的范围内,将返回信息The file you uploaded was not a supported filetype。如果一切进行的顺利的话,将文件信息写入倒数据库中。

最后imagegif() ,    imagejpeg() , imagepng() 这类方法将文件通过$image方法得到的结果写入到指定的文件名中,imagejpeg()方法有第三个参数,这个参数将会影响图片的质量,100表示最小的压缩比例,质量也是最好的,同理0质量是最差的。

imagedestroy()方法将$image方法占用的内存资源释放掉,php会自动释放掉这些资源,但是如果手动释放表示我们有一个好的习惯。最后将上传的文件显示在页面中,表示已经上传成功。

 

转载地址:http://pjgoo.baihongyu.com/

你可能感兴趣的文章
[C++]宏定义#define A B C
查看>>
1106: 回文数(函数专题)
查看>>
java代码做repeat次运算,从键盘输入几个数,比最值
查看>>
TW实习日记:第16天
查看>>
【计算机视觉】OpenCV篇(3) - 图像几何变换(仿射变换/透视变换)
查看>>
day 05 多行输出与多行注释、字符串的格式化输出、预设创建者和日期
查看>>
nodejs 实现文件拷贝
查看>>
laravel框架——composer导入laravel
查看>>
Matrix Computations 1
查看>>
OC-封装、继承、多态
查看>>
Java并发编程(多线程)中的相关概念
查看>>
6-14 数据库高级
查看>>
[QNAP crontab 定時執行程式
查看>>
本地浏览器缓存sessionStorage(临时存储) localStorage(长期存储)的使用
查看>>
[转]windows系统激活
查看>>
读书笔记之何时重构(下)
查看>>
Java---利用程序实现在控制台聊天
查看>>
第一篇 计算机基础
查看>>
Oracle监听器—静态注册
查看>>
《人月神话》观后感
查看>>