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


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实现的MySQL数据浏览器
Mar 11 PHP
PHP IPV6正则表达式验证代码
Feb 16 PHP
php生成随机密码的几种方法
Jan 17 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
Jul 19 PHP
php IP转换整形(ip2long)的详解
Jun 06 PHP
一个图片地址分解程序(用于PHP小偷程序)
Aug 23 PHP
PHP 7.0.2 正式版发布
Jan 08 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
yii2项目实战之restful api授权验证详解
May 20 PHP
如何利用预加载优化Laravel Model查询详解
Aug 11 PHP
PDO::exec讲解
Jan 28 PHP
php使用pecl方式安装扩展操作示例
Aug 12 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 session常见问题集锦及解决办法总结
2007/03/18 PHP
php的正则处理函数总结分析
2008/06/20 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php 访问oracle 存储过程实例详解
2017/01/08 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
FireFox中textNode分片的问题
2007/04/10 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
javaScript 动态访问JSon元素示例代码
2013/08/30 Javascript
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
详解JavaScript中Date.UTC()方法的使用
2015/06/12 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
使用jQuery和ajax代替iframe的方法(详解)
2017/04/12 jQuery
vue+vant实现商品列表批量倒计时功能
2020/01/13 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
python GUI实例学习
2017/11/21 Python
Python之ReportLab绘制条形码和二维码的实例
2018/01/15 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
python 中pyqt5 树节点点击实现多窗口切换问题
2019/07/04 Python
python安装scipy的步骤解析
2019/09/28 Python
如何基于线程池提升request模块效率
2020/04/18 Python
python文件及目录操作代码汇总
2020/07/08 Python
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
英国比较机场停车场网站:Airport Parking Essentials
2019/12/01 全球购物
团员学习总结的自我评价范文
2013/10/14 职场文书
公司建议书怎么写
2014/05/15 职场文书
2014年党的群众路线活动个人整改措施
2014/10/28 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
使用css样式设计一个简单的html登陆界面的实现
2021/03/30 HTML / CSS