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


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 相关文章推荐
mysql 字段类型说明
Apr 27 PHP
php 数组的合并、拆分、区别取值函数集
Feb 15 PHP
php中使用$_REQUEST需要注意的一个问题
May 02 PHP
浅析php学习的路线图
Jul 10 PHP
PHP截断标题且兼容utf8和gb2312编码
Sep 22 PHP
php三元运算符知识汇总
Jul 02 PHP
如何使用GDB调试PHP程序
Dec 08 PHP
php while循环控制的简单实例
May 30 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
thinkPHP中配置的读取与C方法详解
Dec 05 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 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
php性能优化分析工具XDebug 大型网站调试工具
2011/05/22 PHP
thinkphp模板继承实例简述
2014/11/26 PHP
PHP命令行执行整合pathinfo模拟定时任务实例
2016/08/12 PHP
top.location.href 没有权限 解决方法
2008/08/05 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
轻松创建nodejs服务器(6):作出响应
2014/12/18 NodeJs
.NET微信公众号开发之创建自定义菜单
2015/07/16 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
分享12个实用的jQuery代码片段
2016/03/09 Javascript
AngularJS监听路由的变化示例代码
2016/09/23 Javascript
使用nodejs爬取前程无忧前端技能排行
2017/05/06 NodeJs
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
element-ui 中的table的列隐藏问题解决
2018/08/24 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
Python中使用Boolean操作符做真值测试实例
2015/01/30 Python
深入了解Python中pop和remove的使用方法
2018/01/09 Python
使用pandas批量处理矢量化字符串的实例讲解
2018/07/10 Python
Python实现批量执行同目录下的py文件方法
2019/01/11 Python
python中的函数递归和迭代原理解析
2019/11/14 Python
Python中格式化字符串的四种实现
2020/05/26 Python
python 模拟登陆163邮箱
2020/12/15 Python
介绍Ibatis的核心类
2013/11/18 面试题
Linux管理员面试题 Linux admin interview questions
2014/11/01 面试题
监理资料员岗位职责
2014/01/03 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
2014年物业管理工作总结
2014/11/21 职场文书
生日答谢词
2015/01/05 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
古诗之感恩老师
2019/10/24 职场文书
Django操作cookie的实现
2021/05/26 Python
React-vscode使用jsx语法的问题及解决方法
2021/06/21 Javascript
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
python图像处理 PIL Image操作实例
2022/04/09 Python