首页 > php教程 > php手册 > 正文

php图片的二进制转换实例

php中文网
发布: 2016-05-25 16:46:56
原创
1642人浏览过

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

html:

<form action="insertPic.php" method="post" enctype="multipart/form-data" name="mainForm" id="mainForm">
<input type="file" name="myFile" />
<input type="submit" name="Submit" value="Submit"/>
</form>
登录后复制

将图片保存到数据库:

<?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 (&lsquo;$buf&rsquo;)");
//获取影响的行数
if ($result->rowCount() > 0) {
    echo ("数据已插入。");
} else {
    echo ("不能执行插入操作。");
}
//显式的关闭PDO连接
$dbh = NULL;
?>
登录后复制

显示图片:(show.php)

<?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 . phprm . com $num = mysql_num_rows($result);
$data = mysql_result($result, 0, "images");
header("Content-type: image/" . $num['imgType']);
echo $data;
?>
登录后复制

或者

立即学习PHP免费学习笔记(深入)”;

php图片的二进制转换实例

1、fopen函数。

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

int fopen(string filename, string mode);

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

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

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

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

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

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

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

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

Picsart AI Image Generator
Picsart AI Image Generator

Picsart推出的AI图片生成器

Picsart AI Image Generator 37
查看详情 Picsart AI Image Generator

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.phprm.com
 $data=file_get_contents("php://input");
}
$newFile = fopen($newFilePath,"w");//打开文件准备写入
fwrite($newFile,$data);//写入二进制流到文件
fclose($newFile);//关闭文件
登录后复制

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

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

<?php
$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';
}
?>
登录后复制


本文链接:

收藏随意^^请保留教程地址.

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号