php读取mysql二进制图片
$img 二进制data
$file_dir="temp/test.jpg";
if($fp = fopen($file_dir,'w')){
if(fwrite($fp,$img)){
fclose($fp);
}
}
1将文件存到项目路径下
2.如果你想把二进制的数据,比如说图片文件和HTML文件,直接保存在你的MySQL数据库,那么这篇文章就是为你而写的!我将告诉你怎样通过HTML表单来储存这些文件,怎样访问和使用这些文件。
一、本文概述
本文的主要内容如下:
* 在MySQL中建立一个新的数据库
* 一个怎样储存文件的例子程序
* 一个怎样访问文件的例子程序
二、在MySQL中建立一个新的database
首先,你必须在你的MySQL中建立一个新的数据库,我们将会把那些二进制文件储存在这个数据库里。在例子中我会使用下列结构,为了建立数据库,你必须做下列步骤:
1. 进入MySQL控制器
2. 输入命令"create database binary_data;"
3. 输入命令"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));" (不能断行)
(2)upload.php //上传界面
(3)submit.php//把用户上传得文件连同文件的基本信息保存到数据库里
<?php if ($_FILES ['myfile'] != "none" && $_FILES ['myfile'] != "") { $time_limit = 60; set_time_limit ( $time_limit ); $file_type = $_FILES ['myfile'] ['type']; $file_name = $_FILES ['myfile'] ['name']; $file_size = $_FILES ['myfile'] ['size']; $fp = fopen ( $_FILES ['myfile'] ['tmp_name'], "rb" ); if (! $fp) die ( "file open error" ); $file_data = addslashes ( fread ( $fp, $file_size ) ); fclose ( $fp ); /** 等价 $file_data = file_get_contents($_FILES["myfile"]['tmp_name']); */ $conn = mysql_connect ( "localhost", "root", "root" ); if (! $conn) die ( "error : mysql connect failed" ); mysql_select_db ( "test", $conn ); $sql = "insert into receive(file_data,file_type,file_name,file_size)values ('$file_data','$file_type','$file_name',$file_size)"; $result = mysql_query ( $sql ); $id = mysql_insert_id (); mysql_close ( $conn ); set_time_limit ( 30 ); //恢复缺省超时设置 echo "上传成功--- "; echo "<a href='show_info.php?id=$id'>显示上传文件信息</a>"; } else { echo "你没有上传任何文件"; } ?>
(4)show_info.php //从数据库里取出文件的基本信息[文件名和文件大小]
<?php $id = $_REQUEST ["id"]; if (! isset ( $id ) or $id == "") die ( "error:id none" ); //定位记录,读出 $conn = mysql_connect ( "localhost", "root", "root" ); if (! $conn) die ( "error:mysql connect failed" ); mysql_select_db ( "test", $conn ); $sql = "select file_name,file_size from receive where id=$id"; $result = mysql_query ( $sql ); if (! $result) die ( "error:mysql query" ); //如果没有指定的记录,则报错 $num = mysql_num_rows ( $result ); if ($num < 1) die ( "error:no this recorder" ); $name = mysql_result ( $result, 0, "file_name" ); $size = mysql_result ( $result, 0, "file_size" ); mysql_close ( $conn ); echo "<hr>上传的文件的信息:"; echo "<br>文件名称:$name"; echo "<br>文件大小:$size"; echo "<br><a href=show_add.php?id=$id>下载</a>"; ?>
(5)show_add.php //从数据库里取出文件内容
<?php $id = $_REQUEST ["id"]; if (! isset ( $id ) or $id == "") die ( "error:id none" ); //定位记录,读出 $conn = mysql_connect ( "localhost", "root", "root" ); if (! $conn) die ( "error:mysql connect failed" ); mysql_select_db ( "test", $conn ); $sql = "select * from receive where id=$id"; $result = mysql_query ( $sql ); if (! $result) die ( "error:mysql query" ); $num = mysql_num_rows ( $result ); if ($num < 1) die ( "error:no this recorder" ); $data = mysql_result ( $result, 0, "file_data" ); $type = mysql_result ( $result, 0, "file_type" ); $fileName = mysql_result ( $result, 0, "file_name" ); mysql_close ( $conn ); $filePath = 'download/' . $userid . "/" . $fileName; $file = fopen ( RelativePath . $filePath, "wb" ); if (fwrite ( $file, $data ) === FALSE) { echo "can not write in " . $file; exit (); } fclose ( $file ); header ( 'Location: /download.php?fileName=' . $fileName . '&file=' . $filePath ); /* download.php $fileName = $_GET['fileName']; $file_dir = RelativePath.$_GET['file']; $file = @ fopen($file_dir ,"r"); if (!$file) { echo "File does not exist."; } else { Header("Content-type: application/octet-stream"); Header("Content-Disposition: attachment; filename=" .$fileName); while (!feof ($file)) { echo fread($file,50000); } fclose ($file); } */ ?>
(6)list.php //显示所有文件清单
<?php if (! mysql_connect ( "localhost", "root", "root" )) die ( "error:mysql connect failed" ); $sql = "select file_name,file_size,id from test.receive"; $result = mysql_query ( $sql ); if (! $result) die ( "error:mysql query" ); while ( $row = mysql_fetch_array ( $result ) ) { echo "<hr>上传的文件的信息:"; echo "<br>文件名称:$row[file_name]"; echo "<br>文件大小:$row[file_size]"; echo "<br><a href=show_add.php?id=$row[id]>下载</a>"; } mysql_free_result ( $result ); mysql_close (); ?>
相关推荐
这通常涉及到多个关键知识点,包括HTTP表单上传、PHP文件处理、MySQL数据库操作以及PHP脚本间的数据交互。下面将详细阐述这些核心概念。 1. **HTTP表单上传**:文件上传的起点通常是HTML中的`<form>`标签,它使用`...
首先,用户需要从官方或者其他可信源下载这个补丁文件,然后通过FTP或其他文件传输方式将补丁的二进制文件上传到服务器。这里的“二进制上传”可能指的是上传非文本文件,如编译后的程序或库。接着,用户需要在...
另一是直接将文件内容转换为二进制数据保存在数据库中。考虑到数据库处理大量或大型数据的能力有限,我们通常选择前者。 在开始编写PHP代码之前,需要对几个关键的步骤有一个清晰的理解: 1. 创建HTML表单:用户将...
当用户提交表单时,`store.php3`将接收到文件并将其存储到数据库中。文件的ID会被显示出来,供后续访问和检索图片时使用。 要从数据库中检索图片,你可以创建另一个PHP脚本,例如`retrieve.php`,它根据用户提供的...
1. "45e90411143bdfbf6ee1a51dc71cbd32.txt"可能是一个哈希值或随机生成的文件名,通常用于存放临时数据或日志。具体内容需要解压后查看才能明确。 2. "fileinfo.txt"可能包含了关于文件的信息,比如文件类型、创建...
本实验主要使用GD库、函数的封装和调用实现图片和base64编码数据流的转化,通过本案例转换后得到的base64编码字符串,可以存放到数据库中,需要时可以直接从数据库中读取,减少访问图片时的请求数量。
2. **表单提交**:在HTML中,我们需要设置一个`<form>`标签,其中`enctype`属性应设为`multipart/form-data`,这允许表单携带二进制数据(如文件)。`<input type="file">`用于让用户选择要上传的文件。 3. **PHP...
如果其值非空,说明上传了图片,由该数组元素得到上传图片的临时文件名,读取该文件的内容,再用 `bin2hex()` 函数将二进制文件数据转换为十六进制数据,然后将其存储到MySQL数据库的 `pict` 字段中。 本文介绍了...
BIN:二进制文件 BINHex:苹果的一种编码格式 BMP:Windows或OS/2位图文件 BOOK:Adobe FrameMaker Book文件 BOX:Lotus Notes的邮箱文件 BPL:Borlard Delph 4打包库 BSP:Quake图形文件 BUN:CakeWalk 声音...
- **数据库文件存放目录**:MySQL的数据文件通常存放在其安装目录下的“data”子目录内。 #### 2.4 建立文件目录 根据上述说明创建相应的目录结构,以确保所有软件和数据都有正确的存放位置。 ### 三、Apache安装...
当用户在前端完成拍照并点击上传按钮后,Flash会将图片数据发送到这个PHP文件。在这里,PHP会接收图片数据,进行必要的处理(如调整大小、格式转换等),然后保存到服务器的指定目录。 - `classes`目录:可能包含...
请求体中可能包含文件的二进制数据和额外的元信息(如文件名、类型等)。 PHP后端接收上传的图片,需要处理以下几个方面: 1. 接收文件:PHP的`$_FILES`全局变量可以获取上传文件的信息,如文件名、大小、临时位置...
MySQLbinlog.exe是一个重要的MySQL数据库管理工具,主要用于记录MySQL服务器的二进制日志,它可以帮助用户在数据库出现故障时进行数据恢复,或者用于备份和迁移数据。在MySQL的环境中,二进制日志(binary log)记录...
这里的`enctype="multipart/form-data"`属性是关键,它告诉浏览器表单包含二进制数据(如文件),需要正确地编码并发送到服务器。 当用户选择文件并点击提交按钮后,浏览器会将文件数据和表单数据一起发送到指定的`...
这意味着开发者可以直接将文件的二进制格式数据存储到MongoDB的文档中,极大地简化了文件的存储和检索过程。 #### 二、MongoDB的数据组织结构 MongoDB的数据模型由数据库(Database)、集合(Collection)和文档...
在操作日志文件时,如错误日志文件存放的路径可以通过show variables like 'log_error';来查看。二进制日志的位置可以通过show variables like 'datadir';来查询。而二进制日志的格式可以通过binlog_format参数来...
总的来说,要在Windows上安装PHP并连接MySQL,我们需要设置IIS网站,安装PHP二进制包,配置PHP以支持MySQL,然后可能还需要运行测试套件来检查环境的正确性。这个过程虽然涉及多个步骤,但完成后就能在本地环境中...
主要包括二进制文件目录(bin)、公共网关接口目录(cgi-bin)、配置文件目录(conf,包括httpd.conf主配置文件和其他子配置文件)、错误信息目录(error)、网页主目录(htdocs)、图标目录(icons)、日志目录...
在给定的部分内容中,首先提到的是Apache服务器的安装过程,这包括了从官方网站下载Win32二进制版本,具体为`apache_2.0.59-win32-x86-no_ssl.msi`,并将其安装到指定目录(如`D:\w12314\httpserver\`)。...
为了使Apache与PHP协同工作,我们需要下载PHP的Windows二进制文件,这里提供的是php-5.2.10-Win32.zip。解压后,将php.ini-development或php.ini-production复制为php.ini,并根据系统需求进行配置。接着,将php目录...