用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 相关文章推荐
PHP新手上路(五)
Oct 09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
PHP 修复未正常关闭的HTML标签实现代码(支持嵌套和就近闭合)
Jun 07 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
Jun 29 PHP
PHP实现的json类实例
Jul 28 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
php 读取输出其他文件的实现方法
Jul 26 PHP
thinkphp5.1框架模板布局与模板继承用法分析
Jul 19 PHP
laravel 查询数据库获取结果实现判断是否为空
Oct 24 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/06/20 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
js网页实时倒计时精确到秒级
2014/02/10 Javascript
跟我学习javascript的异步脚本加载
2015/11/20 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
BOM系列第一篇之定时器setTimeout和setInterval
2016/08/17 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
浅析Javascript ES6中的原生Promise
2016/08/25 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
JavaScript之实现一个简单的Vue示例
2019/01/17 Javascript
JS 封装父页面子页面交互接口的实例代码
2019/06/25 Javascript
Array.filter中如何正确使用Async
2020/11/04 Javascript
Python程序语言快速上手教程
2012/07/18 Python
python同时给两个收件人发送邮件的方法
2015/04/30 Python
python日志记录模块实例及改进
2017/02/12 Python
python之virtualenv的简单使用方法(必看篇)
2017/11/25 Python
python字符串切割:str.split()与re.split()的对比分析
2019/07/16 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
python用requests实现http请求代码实例
2019/10/31 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
python实现扫雷小游戏
2020/04/24 Python
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
EQVVS官网:设计师男装和女装
2018/10/24 全球购物
煤矿班组长的职责
2013/12/25 职场文书
三下乡活动方案
2014/01/31 职场文书
总经理秘书岗位职责
2014/03/17 职场文书
2014年财政所工作总结
2014/11/22 职场文书
晚会主持人开场白台词
2015/05/28 职场文书
《日月潭》教学反思
2016/02/20 职场文书
2016年6.5世界环境日宣传活动总结
2016/04/01 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Ajax实现三级联动效果
2021/10/05 Javascript