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


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 相关文章推荐
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
Oct 09 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
php使用smtp发送支持附件的邮件示例
Apr 13 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
php下pdo的mysql事务处理用法实例
Dec 27 PHP
PHP解密Unicode及Escape加密字符串
May 17 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
Jun 10 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
浅谈PHP命令执行php文件需要注意的问题
Dec 16 PHP
php单元测试phpunit入门实例教程
Nov 17 PHP
php 读取文件夹下所有图片、文件的实例
Oct 17 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 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实现从ftp服务器上下载文件树到本地电脑的程序
2009/02/10 PHP
解析argc argv在php中的应用
2013/06/24 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP实现设计模式中的抽象工厂模式详解
2014/10/11 PHP
PHP多维数组遍历方法(2种实现方法)
2015/12/10 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
基于thinkphp5框架实现微信小程序支付 退款 订单查询 退款查询操作
2020/08/17 PHP
JS中剪贴板兼容性、判断复制成功或失败
2021/03/09 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
Js 导出table内容到Excel的简单实例
2013/11/19 Javascript
JS实现根据出生年月计算年龄
2014/01/10 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
使用JSON.parse将json字符串转换成json对象的时候会出错
2014/09/04 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
JS正则表达式封装与使用操作示例
2019/05/15 Javascript
js实现点击图片在屏幕中间弹出放大效果
2019/09/11 Javascript
d3.js实现图形缩放平移
2019/12/19 Javascript
vue实现导航标题栏随页面滚动渐隐渐显效果
2020/03/12 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
[04:44]DOTA2英雄梦之声_第12期_矮人直升机
2014/06/21 DOTA
Python3基础之基本数据类型概述
2014/08/13 Python
python爬虫获取多页天涯帖子
2018/02/23 Python
对python多线程SSH登录并发脚本详解
2019/02/14 Python
Python可迭代对象操作示例
2019/05/07 Python
详解Python中Pyyaml模块的使用
2020/10/08 Python
Django执行源生mysql语句实现过程解析
2020/11/12 Python
使用gunicorn部署django项目的问题
2020/12/30 Python
父亲生日宴会答谢词
2014/01/10 职场文书
图书室管理制度
2014/01/19 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
2015年药房工作总结
2015/04/25 职场文书
python 如何用map()函数创建多线程任务
2021/04/07 Python
Java elasticsearch安装以及部署教程
2021/06/28 Java/Android
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫