当前位置: 首页 > 图文教程 > 网络编程 > PHP > 用PHP和MySQL保存和输出图片

PHP
成为PHP编程高手应该遵循的三个准则
PHP企业级应用之常见缓存技术篇
PHP企业级应用之WebService篇
PHP实现的Mysql读写分离
php框架codeigniter是如何实现mvc模式以及单一入口
PHP版单点登陆实现方案
Linux编程之:五个常见PHP数据库问题
linux下php实现C/C++扩展编程
目前最好的PHP开发框架
php职业分析(如何成为一名优秀的phper)
PHP 的八卦两则
20款 Web Mail PHP开源项目
经验分享:学好java开发的关键7步
PHP中正则的使用
对于Java开发人员必须遵从的十大基本法则
PHP绘制3D图形之自定义图形及矢量图
PHP编写的25个游戏脚本
php生成静态页面的办法
微软对PHP支持的改进 及其它一些胡言乱语
Fedora下Zend Studio 6.1.2 的配置

用PHP和MySQL保存和输出图片


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 187 ::
收藏到网摘: n/a

设置数据库
我们通常在数据库中所使用的文本或整数类型的字段和需要用来保存图片的字段的不同之处就在于两者所需要保存的数据量不同。MySQL数据库使用专门的字段来保存大容量的数据,数据类型为BLOB。
MySQL数据库为BLOB做出的定义如下:BLOB数据类型是一种大型的二进制对象,可以保存可变数量的数据。BLOB具有四种类型,分别是TINYBLOB,BLOB,MEDIUMBLOB和LONGBLOB,区别在于各自所能够保存的最大数据长度不同。
在介绍了所需要使用的数据类型之后,我们可以使用以下语句创建保存图象的数据表。
CREATETABLEImages(PicNumintNOTNULLAUTO_INCREMENTPRIMARYKEY,ImageBLOB);

编写上传脚本
关于如何实现文件的上传,我们在这里就不再介绍了,感兴趣的读者可以参见“网页陶吧”内的相关文章。现在,我们主要来看一下如何接收上传文件并将其存入到MySQL数据库中。具体的脚本代码如下,其中我们假定文件上传域的名称为Picture。

$#@60;?If($Picture!="none"){$PSize=filesize($Picture);$mysqlPicture=addslashes(fread(fopen($Picture,"r"),$PSize));mysql_connect($host,$username,$password)ordie("UnabletoconnecttoSQLserver");@mysql_select_db($db)ordie("Unabletoselectdatabase");mysql_query("INSERTINTOImages(Image)VALUES($mysqlPicture)")ordie("CantPerformQuery");}else{echo"Youdidnotuploadanypicture";}?$#@62;

这样,我们就可以成功的把图片保存到数据库中。如果在将图片插入MySQL的过程中出现问题,可以检查一下MySQL数据库所允许的最大数据包的大小。如果设置值过小的话,我们会在数据库的错误日志中找到相应的记录。下面,我们简单说明一下上述脚本程序。首先,我们通过“If($Picture!="none")”检查是否有文件被上传。然后,使用addslashes()函数避免出现数据格式错误。最后,连接MySQL,选择数据库并插入图片。

显示图片
在知道了如何将图?入数据库之后,我们就需要考虑怎样才能从数据库中取出图片并在HTML页面中显示出来。这个过程要稍微复杂一些,下面我们就来介绍一下实现过程。因为PHP显示图片需要发送相应的标头,所以我们就会面临这样一个问题,那就是一次只能显示一副图片,因为我们无法在发出标头之后再发送其它的标头。

为了有效的解决这一问题,我们编写了两个文件。其中,第一个文件作为HTML页面的模板,定位图片的显示位置。第二个文件则被用来从数据库中实际输出文件流,作为$#@60;IMG$#@62;标签的SRC属性。

第一个文件的简单形式可以如下:

$#@60;HTML$#@62;$#@60;BODY$#@62;$#@60;?mysql_connect($host,$username,$password)ordie("UnabletoconnecttoSQLserver");@mysql_select_db($db)ordie("Unabletoselectdatabase");$result=mysql_query("SELECT*FROMImages")ordie("CantPerformQuery");While($row=mysql_fetch_object($result)){echo"$#@60;IMGSRC=\"Second.php3?PicNum=$row-$#@62;PicNum\"$#@62;";}?$#@62;$#@60;/BODY$#@62;$#@60;/HTML$#@62;

当HTML页面被浏览时,每显示一副图片就会调用一次Second.php3文件。当第二个文件被调用时会传入相应的PictureID,我们可以借此从数据库中取回对应的图片并显示。

Second.php3文件如下:

$#@60;?$result=mysql_query("SELECT*FROMImagesWHEREPicNum=$PicNum")ordie("CantperformQuery");$row=mysql_fetch_object($result);Header("Content-type:image/gif");echo$row-$#@62;Image;?$#@62;

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