详解:――如何将图片储存在数据库里


Posted in PHP onDecember 05, 2006

如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。

本文概述:

。在mysql中建立一个新的数据库

。一个怎样储存文件的例子程序

。一个怎样访问文件的例子程序

在mysql中建立一个新的database

首先,你必须在你的mysql中建立一个新的数据库,我们将会把那些二进制文件储存在这个数据库里。在例子中我会使用下列结构,为了建立数据库,

你必须做下列步骤:

。进入MySql控制器

。输入命令"create database binary_data;"

。输入命令"use binary_data;"

。输入命令

"CREATE TABLE binary_data ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY,description CHAR(50), bin_data LONGBLOB, filename CHAR(50), filesize CHAR(50), filetype CHAR(50));" (不能断行)

如果没有意外,数据库 和 表 应该建立好了。

一个怎样储存文件的例子程序

用这个例子你可以通过Html表单将文件传输到数据库中。

store.php3
<?php
// store.php3 - by Florian Dittmer <dittmer@gmx.net>
?>
<HTML>
<HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD>
<BODY>
<?php
// 如果提交了表单,代码将被执行:
if ($submit) {
// 连接到数据库
// (你可能需要调整主机名,用户名和密码)
MYSQL_CONNECT( "localhost", "root", "password");
mysql_select_db( "binary_data");
$data = addslashes(fread(fopen($form_data, "r"), filesize($form_data)));
$result=MYSQL_QUERY( "INSERT INTO binary_data (description,bin_data,filename,filesize,filetype) 
[接上一行:] VALUES ('$form_description','$data','$form_data_name','$form_data_size','$form_data_type')"); 
$id= mysql_insert_id();
  print "<p>This file has the following Database ID: <b>$id</b>";
MYSQL_CLOSE();
} else {
// 否则显示储存新数据的表单
?>
<form method="post" action=" <?php echo $PHP_SELF; ?>" enctype="multipart/form-data">
File Description:<br>
<input type="text" name="form_description" size="40">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000">
<br>File to upload/store in database:<br>
<input type="file" name="form_data" size="40">
<p><input type="submit" name="submit" value="submit">
</form>
<?php
}
?>
</BODY>
</HTML>

如果你执行了这个程序,你将会看见一个简单的Html表单,单击“浏览”选择一个文件,然后单击提交。

当文件上传至web服务器之后,程序将会告诉你刚刚上传的文件的ID,记住这个ID,待会要用的。

一个怎样访问文件的例子程序

你可以通过这个程序访问你刚才储存的文件

<?php
// getdata.php3 - by Florian Dittmer <dittmer@gmx.net>
// 调用方法: getdata.php3?id=<id>
if($id) {
// 你可能需要调整主机名,用户名和密码:
 @MYSQL_CONNECT( "localhost", "root", "password");
 @mysql_select_db( "binary_data");
 $query = "select bin_data,filetype from binary_data where id=$id";
 $result = @MYSQL_QUERY($query);
 $data = @MYSQL_RESULT($result,0, "bin_data");
 $type = @MYSQL_RESULT($result,0, "filetype");
Header( "Content-type: $type");
echo $data;
};
?>

程序必须知道要访问那个文件, 你必须将ID作为一个参数。

例如: 一个文件在数据库中的ID为2. 你可以这样调用它:

getdata.php3?id=2

如果你将图片储存在数据库里, 你可以向调用图片一样调用它。

Example: 一个图片文件在数据库中的ID为3. 你可以这样调用它:

怎样储存大于1MB的文件:

如果你想储存大于1MB的文件,你必须对你的程序、PHP设置、SQL设置进行许多修改,。

下面几条也许可以帮助你储存小于24MB的文件:

1、修改 store.php3 ,将 MAX_FILE_SIZE 的值改成 24000000。

2、修改你的PHP设置,在一般情况下,PHP只允许小于2MB的文件,你必须将max_filesize(在php.ini中)的值改成24000000

3、去掉MYSQL的数据包大小限制,在一般情况下 MYSQL 小于1 MB的数据包.

4、你必须用以下参数重启你的MYSQL

/usr/local/bin/safe_mysqld -O key_buffer=16M -O table_cache=128 -O sort_buffer=4M -O record_buffer=1M -O max_allowed_packet=24M

5、如果仍然出错:

可能是超时错误,如果你通过一个很慢的连接来储存一个很大的文件,PHP缺省的时间限制为30秒。你可以将max_execution_time(在php.ini中)的值改为-1

PHP 相关文章推荐
php中serialize序列化与json性能测试的示例分析
Apr 27 PHP
Symfony2开发之控制器用法实例分析
Feb 05 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP搭建大文件切割分块上传功能示例
Jan 04 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
实例讲解PHP页面静态化
Feb 05 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
Laravel框架表单验证操作实例分析
Sep 30 PHP
laravel通过a标签从视图向控制器实现传值
Oct 15 PHP
Yii框架getter与setter方法功能与用法分析
Oct 22 PHP
怎样才能成为PHP高手?学会“懒惰”的编程
Dec 05 #PHP
PHP开发入门教程之面向对象
Dec 05 #PHP
特转载一高手总结PHP学习资源和链接.
Dec 05 #PHP
扩展你的 PHP 之入门篇
Dec 04 #PHP
用 PHP5 轻松解析 XML
Dec 04 #PHP
PHP 已经成熟
Dec 04 #PHP
PHP 选项及相关信息函数库
Dec 04 #PHP
You might like
Win下如何安装PHP的APC拓展
2013/08/07 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
基于win2003虚拟机中apache服务器的访问
2017/08/01 PHP
js tab效果的实现代码
2009/12/26 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
jQuery选择器的工作原理和优化分析
2011/07/25 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
JS上传前预览图片实例
2013/03/25 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
Bootstrap Validator 表单验证
2016/07/25 Javascript
javascript实现的左右无缝滚动效果
2016/09/19 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
vue两个组件间值的传递或修改方式
2018/07/04 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
Vue中computed、methods与watch的区别总结
2019/04/10 Javascript
AngularJs中$cookies简单用法分析
2019/05/30 Javascript
详解Angular cli配置过程记录
2019/11/07 Javascript
jquery添加div实现消息聊天框
2020/02/08 jQuery
JavaScript实现消消乐的源代码
2021/01/12 Javascript
Python基于Matplotlib库简单绘制折线图的方法示例
2017/08/14 Python
python从list列表中选出一个数和其对应的坐标方法
2019/07/20 Python
解决python3.6用cx_Oracle库连接Oracle的问题
2020/12/07 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
2014年酒店工作总结范文
2014/11/17 职场文书
顶岗实习计划书
2015/01/16 职场文书
寒假社会实践个人总结
2015/03/06 职场文书
个人廉政承诺书
2015/04/28 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
python 实现德洛内三角剖分的操作
2021/04/22 Python
PostgreSQL13基于流复制搭建后备服务器的方法
2022/01/18 PostgreSQL
英镑符号 £
2022/02/17 杂记
JavaScript展开运算符和剩余运算符的区别详解
2022/02/18 Javascript