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


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之require/include顺序 推荐
Jan 02 PHP
PHP APC的安装与使用详解
Jun 13 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
destoon之一键登录设置
Jun 21 PHP
ThinkPHP标签制作教程
Jul 10 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
php实现网站文件批量压缩下载功能
Oct 28 PHP
PHP中读取文件的几个方法总结(推荐)
Jun 03 PHP
PHP自定义图片缩放函数实现等比例不失真缩放的方法
Aug 19 PHP
php中的单引号、双引号和转义字符详解
Feb 16 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 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-Redis安装测试笔记
2015/03/05 PHP
ThinkPHP连接Oracle数据库
2016/04/22 PHP
Laravel5.1 框架Middleware中间件基本用法实例分析
2020/01/04 PHP
javascript高级学习笔记整理
2011/08/14 Javascript
jquery showModelDialog的使用方法示例详解
2013/11/19 Javascript
jquery获取元素索引值index()示例
2014/02/13 Javascript
javascript 控制input只允许输入的各种指定内容
2014/06/19 Javascript
iscroll碰到Select无法选择下拉刷新的解决办法
2016/05/21 Javascript
jQuery中 $ 符号的冲突问题及解决方案
2016/11/04 Javascript
JavaScript中清空数组的方法总结
2016/12/02 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
JavaScript基于replace+正则实现ES6的字符串模版功能
2017/04/25 Javascript
jQuery使用JSONP实现跨域获取数据的三种方法详解
2017/05/04 jQuery
jQuery+HTML5实现WebGL高性能烟花绽放动画效果【附demo源码下载】
2017/08/18 jQuery
es6中reduce的基本使用方法
2019/09/10 Javascript
在vue中使用jsx语法的使用方法
2019/09/30 Javascript
javascript设计模式 ? 适配器模式原理与应用实例分析
2020/04/13 Javascript
原生JavaScript实现弹幕组件的示例代码
2020/10/12 Javascript
JavaScript 绘制饼图的示例
2021/02/19 Javascript
python实现复制整个目录的方法
2015/05/12 Python
总结python实现父类调用两种方法的不同
2017/01/15 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
python DataFrame 取差集实例
2019/01/30 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python3 字典dictionary入门基础附实例
2020/02/10 Python
opencv中图像叠加/图像融合/按位操作的实现
2020/04/01 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
幼儿园小班家长寄语
2014/04/02 职场文书
优秀团干部个人事迹
2014/05/29 职场文书
2014年生产部工作总结
2014/12/17 职场文书
检讨书模板大全
2015/05/07 职场文书
2019最新版劳务派遣管理制度
2019/08/16 职场文书
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
Golang解析JSON对象
2022/04/30 Golang