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


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 相关文章推荐
我的论坛源代码(六)
Oct 09 PHP
坏狼的PHP学习教程之第2天
Jun 15 PHP
PHP中常用数组处理方法实例分析
Aug 30 PHP
基于asp+ajax和数据库驱动的二级联动菜单
May 06 PHP
PHP连接MySQL查询结果中文显示乱码解决方法
Oct 25 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
关于php支持分块与断点续传文件下载功能代码
May 09 PHP
PHP 快速排序算法详解
Nov 10 PHP
Laravel实现构造函数自动依赖注入的方法
Mar 16 PHP
PHP目录操作实例总结
Sep 27 PHP
Zend Framework数据库操作技巧总结
Feb 18 PHP
详解php框架Yaf路由重写
Jun 20 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
几种显示数据的方法的比较
2006/10/09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
PHP Pear 安装及使用
2009/03/19 PHP
php 动态执行带有参数的类方法
2009/04/10 PHP
了解Joomla 这款来自国外的php网站管理系统
2010/03/11 PHP
php设计模式 Delegation(委托模式)
2011/06/26 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
2014/11/15 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP的Yii框架中移除组件所绑定的行为的方法
2016/03/18 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
客户端静态页面玩分页
2006/06/26 Javascript
prototype Element学习笔记(篇一)
2008/10/26 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
js操作iframe父子窗体示例
2014/05/22 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
BootStrap 智能表单实战系列(五) 表单依赖插件处理
2016/06/13 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
JS访问DOM节点方法详解
2016/11/29 Javascript
JS设置手机验证码60s等待实现代码
2017/06/14 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
微信小程序解除10个请求并发限制
2018/12/18 Javascript
微信小程序中button去除默认的边框实例代码
2019/08/01 Javascript
js实现时间日期校验
2020/05/26 Javascript
Python迭代器与生成器基本用法分析
2018/07/26 Python
Python3读写Excel文件(使用xlrd,xlsxwriter,openpyxl3种方式读写实例与优劣)
2020/02/13 Python
jupyter notebook读取/导出文件/图片实例
2020/04/16 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
Jupyter Notebook添加代码自动补全功能的实现
2021/01/07 Python
HTML5 HTMLCollection和NodeList的区别详解
2020/04/29 HTML / CSS
英国在线药房:Chemist.co.uk
2019/03/26 全球购物
介绍一下linux文件系统分配策略
2012/11/17 面试题
安全承诺书范文
2014/03/26 职场文书
学习演讲稿范文
2014/05/10 职场文书
用Python爬取某乎手机APP数据
2021/06/15 Python
CSS 实现角标效果的完整代码
2022/06/28 HTML / CSS