php 图片二进制流,php图片的二进制转换实例

这篇博客介绍了如何在PHP中处理文件上传,将上传的图片转换为二进制数据并存储到数据库中,以及如何从数据库读取二进制数据并显示图片。文章详细解释了fopen、addslashes和fread等函数的用法,并展示了如何通过读取二进制数据的头两个字节判断文件类型。
摘要由CSDN通过智能技术生成

这里我们是在上传文件时把上传的文件转换成二进制然后保存到数据的字段中去,下次读读出我们也用同样的方法显示即可。

html:

 代码如下复制代码

将图片保存到数据库:

 代码如下复制代码
<?php

//由于上传过来的图片被保存在一个临时文件中,所以

//我们仅需要读取该文件就可以获取传过来的图片

$fp = fopen($_FILES["myFile"]["tmp_name"],”rb”);

$buf = addslashes(fread($fp,$_FILES["myFile"]["size"]));

//创建一个PDO对象

$dbh = new PDO(“mysql:host=localhost;port=

3306;dbname=test”, “root”, “123456″);

//执行插入操作并将结果保存在一个变量中

$result = $dbh->query(“INSERT INTO img (images) VALUES (‘$buf’)”);

//获取影响的行数

if ($result->rowCount() >0) {

echo(“数据已插入。”);

} else {

echo(“不能执行插入操作。”);

}

//显式的关闭PDO连接

$dbh = NULL;

?>

显示图片:(show.php)

$conn=@mysql_connect(“localhost”,”root”,”123456″) or die(“服务器连接错误!”); //链接数据库

@mysql_select_db(“test”,$conn) or die(“未发现数据库!”);

$query=”select * from img where Id=”.$_GET['id'];

$result=mysql_query($query); www.jquerycn.cn

$num=mysql_num_rows($result);

$data = mysql_result($result,0,”images”);

header(“Content-type: image/” . $num['imgType']);

echo $data;

?>

或者

 代码如下复制代码
%E2%80%9Dshow.php?id=5%E2%80%B3

1、fopen函数。

fopen()函数用于打开文件或者URL。语法如下:

int fopen(string filename, string mode);

字符串参数mode可以是下列的情形:

“r”开文件方式为只读,文件指针指到开始处。

“r ”开文件方式为可读写,文件指针指到开始处。

“w”开文件方式为写入,文件指针指到开始处,并将原文件的长度设为0。若文件不存在,则建立新文件。

“w ”开文件方式为可读写,文件指针指到开始处,并将原文件的长度设为0。若文件不存在,则建立新文件。

“a”开文件方式为写入,文件指针指到文件最后。若文件不存在,则建立新文件。

“a ”开文件方式为可读写,文件指针指到文件最后。若文件不存在,则建立新文件。

“b”若操作系统的文字及二进位文件不同,则可以用此参数,UNIX系统不需要使用本参数。

2、Addslashes函数。

Addslashes函数用于将字符串加入斜线。语法如下:【注:我测试的时候是把这个函数去掉后成功了,道理你懂的。自己试下就明白了】

string addslashes(string str);

该函数使需要让数据库处理的字符串,引号的部份加上斜线,以供数据库查询(query)能顺利运作。这些会被改的字符包括单引号(’)、双引号(”)、反斜线backslash()以及空字符NULL(the null byte)。

3、fread函数。

fread函数用于读到指定长度的位组或到文件尾EOF。语法如下:

string fread(int fp, int length);可安全用于二进制文件

fread() 从文件指针 file 读取最多 length 个字节。该函数在读取完最多 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时,或(在打开用户空间流之后)已读取了 8192 个字节时就会停止读取文件,视乎先碰到哪种情况。

二进制转换成图片

注:$newFilePath 对生成的图片名和路径做处理,这里自己去实现。

 代码如下复制代码
$newFilePath='1.jpg';

$data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post过来的二进制原始数据

if(empty($data)){ www.jquerycn.cn

$data=file_get_contents("php://input");

}

$newFile = fopen($newFilePath,"w");//打开文件准备写入

fwrite($newFile,$data);//写入二进制流到文件

fclose($newFile);//关闭文件

可以把读取到的二进制流存到数据库,也可以直接写入成一个图片。

获取二进制头文件,从而得知属于什么类型文件

 代码如下复制代码
$bin = substr($content,0,2);

$strInfo = @unpack("C2chars", $bin);

$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);

$fileType = '';

switch ($typeCode)

{

case 7790:

$fileType = 'exe';

break;

case 7784:

$fileType = 'midi';

break;

case 8297:

$fileType = 'rar';

break;

case 255216:

$fileType = 'jpg';

break;

case 7173:

$fileType = 'gif';

break;

case 6677:

$fileType = 'bmp';

break;

case 13780:

$fileType = 'png';

break;

default:

echo 'unknown';

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值