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


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代码书写习惯优化小结
Jun 20 PHP
一个基于phpQuery的php通用采集类分享
Apr 09 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
Jun 04 PHP
20个2014年最优秀的PHP框架回顾
Oct 22 PHP
yii2.0实现创建简单widgets示例
Jul 18 PHP
PHP加密解密类实例代码
Jul 20 PHP
php注册审核重点解析(数据访问)
May 23 PHP
PHP实现动态删除XML数据的方法示例
Mar 30 PHP
PHP中md5()函数的用法讲解
Mar 30 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
PHP实现发送微博消息功能完整示例
Dec 04 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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 mongodb操作类 带几个简单的例子
2016/08/25 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
PHP使用PDO访问oracle数据库的步骤详解
2017/09/29 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
js 发个判断字符串是否为符合标准的函数
2009/04/27 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
JS保存和删除cookie操作 判断cookie是否存在
2013/11/13 Javascript
JQEasy-ui在IE9以下版本中二次加载的问题分析及处理方法
2014/06/23 Javascript
基于NodeJS的前后端分离的思考与实践(五)多终端适配
2014/09/26 NodeJs
javascript学习笔记(四)function函数部分
2014/09/30 Javascript
javascript框架设计读书笔记之数组的扩展与修复
2014/12/02 Javascript
JS实现的N多简单无缝滚动代码(包含图文效果)
2015/11/06 Javascript
vue2利用Bus.js如何实现非父子组件通信详解
2017/08/25 Javascript
详解vue + vuex + directives实现权限按钮的思路
2017/10/24 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
JS实现iframe中子父页面跨域通讯的方法分析
2020/03/10 Javascript
python小技巧之批量抓取美女图片
2014/06/06 Python
简单易懂的python环境安装教程
2017/07/13 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
tensorflow 动态获取 BatchSzie 的大小实例
2020/06/30 Python
CSS3实现粒子旋转伸缩加载动画
2016/04/22 HTML / CSS
美国嘻哈首饰购物网站:Hip Hop Bling
2016/12/30 全球购物
Speedo澳大利亚官网:全球领先游泳品牌
2018/02/04 全球购物
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
美国最佳在线航班预订网站:LookupFare
2019/03/26 全球购物
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
学生党支部先进事迹
2014/02/04 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
2016年中秋祝酒词
2015/11/26 职场文书
nginx内存池源码解析
2021/11/20 Servers
Python函数对象与闭包函数
2022/04/13 Python