用PHP和MySQL保存和输出图片


Posted in PHP onOctober 09, 2006

设置数据库

我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。

MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB, MEDIUMBLOB 和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。

在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。

CREATE TABLE Images ( PicNum int NOT NULL AUTO_INCREMENT PRIMARY KEY, Image BLOB );
编写上传脚本

关于如何实现文件的上传,我们在这里就不再介绍了,感兴趣的读者可以参见“网页陶吧”内的相关文章。现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。
<?
If($Picture != "none") {
$PSize = filesize($Picture);
$mysqlPicture = addslashes(fread(fopen($Picture, "r"), $PSize));
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
mysql_query("INSERT INTO Images (Image) VALUES ($mysqlPicture)") or die("Cant Perform Query");
}else {
echo"You did not upload any picture";
}
?>

这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。

下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture != "none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。
显示图片

在知道了如何将图? 入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。
因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。
为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为<IMG>标签的SRC属性。
第一个文件的简单形式可以如下:
<HTML> <BODY>
<?
mysql_connect($host,$username,$password) or die("Unable to connect to SQL server");
@mysql_select_db($db) or die("Unable to select database");
$result=mysql_query("SELECT * FROM Images") or die("Cant Perform Query");
While($row=mysql_fetch_object($result)) {
echo "<IMG SRC=\"Second.php3? PicNum=$row->PicNum\">";
} ?>
</BODY> </HTML>

当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的Picture ID,我们可以借此从数据库中取回对应的图片并显示。
Second.php3文件如下:
<?
$result=mysql_query("SELECT * FROM Images WHERE PicNum=$PicNum") or die("Cant perform Query");
$row=mysql_fetch_object($result);
Header( "Content-type: image/gif");
echo $row->Image;
?>

到此,我们就介绍完了使用PHP和MySQL保存和显示图片的全过程。文中所举得都是一些最简单的实例,读者可以根据自己的实际需要加入其它一些功能,使整个程序更加完善。 

PHP 相关文章推荐
Apache2中实现多网站域名绑定的实现方法
Jun 01 PHP
PHP中其实也可以用方法链
Nov 10 PHP
PHP中操作ini配置文件的方法
Apr 25 PHP
基于MySQL分区性能的详细介绍
May 02 PHP
解析PHP中数组元素升序、降序以及重新排序的函数
Jun 20 PHP
js和php邮箱地址验证的实现方法
Jan 09 PHP
ThinkPHP框架任意代码执行漏洞的利用及其修复方法
Jul 04 PHP
php获取根域名方法汇总
Oct 28 PHP
PHP的几个常用加密函数
Feb 03 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
Sep 28 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
PHP生成带有雪花背景的验证码
Oct 09 #PHP
一个可查询所有表的“通用”查询分页类
Oct 09 #PHP
Get或Post提交值的非法数据处理
Oct 09 #PHP
用Socket发送电子邮件
Oct 09 #PHP
编写自己的php扩展函数
Oct 09 #PHP
PHP输出控制功能在简繁体转换中的应用
Oct 09 #PHP
PHP 中执行系统外部命令
Oct 09 #PHP
You might like
php将数据库中的电话号码读取出来并生成图片
2008/08/31 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
Open and Print a Word Document
2007/06/15 Javascript
Javascript 函数中的参数使用分析
2010/03/27 Javascript
Document对象内容集合(比较全)
2010/09/06 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
JavaScript中的undefined学习总结
2013/11/30 Javascript
cookie中的path与domain属性详解
2013/12/18 Javascript
Jquery getJSON方法详细分析
2013/12/26 Javascript
浅谈javascript中的call、apply、bind
2016/03/06 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
jQuery EasyUI 右键菜单--关闭标签/选项卡的简单实例
2016/10/10 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
写gulp遇到的ES6问题详解
2018/12/03 Javascript
node实现生成带参数的小程序二维码并保存到本地功能示例
2018/12/05 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
微信小程序嵌入腾讯视频源过程详解
2019/08/08 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
Python类的用法实例浅析
2015/05/27 Python
python 中split 和 strip的实例详解
2017/07/12 Python
Python调用系统底层API播放wav文件的方法
2017/08/11 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
浅谈python中对于json写入txt文件的编码问题
2018/06/07 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python3 assert断言实现原理解析
2020/03/02 Python
pytorch 中的重要模块化接口nn.Module的使用
2020/04/02 Python
Pycharm添加虚拟解释器报错问题解决方案
2020/10/13 Python
python爬虫爬取淘宝商品比价(附淘宝反爬虫机制解决小办法)
2020/12/03 Python
白俄罗斯大卖场:21vek.by
2019/07/25 全球购物
实习期自我鉴定
2013/10/11 职场文书
消防安全责任书范本
2014/04/15 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
理财学专业自荐书
2014/06/28 职场文书