用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > php教程

php图片的二进制转换实例

时间:2015-01-23  来源:西部数据  作者:西部数据

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

html,代码如下:

  1. <form action=”insertPic.php” method=”post” enctype=”multipart/form-data” name=”mainForm” id=”mainForm”> 
  2. <input type=”file” name=”myFile” /> 
  3. <input type=”submit” name=”Submit” value=”Submit”/> 
  4. </form> 

将图片保存到数据库,代码如下:

  1. <?php 
  2. //由于上传过来的图片被保存在一个临时文件中,所以 
  3. //我们仅需要读取该文件就可以获取传过来的图片 
  4. $fp = fopen($_FILES["myFile"]["tmp_name"],”rb”); 
  5. $buf = addslashes(fread($fp,$_FILES["myFile"]["size"])); 
  6. //创建一个PDO对象 
  7. $dbh = new PDO(“mysql:host=localhost;port= 
  8. 3306;dbname=test”, “root”, “123456″); 
  9. //执行插入操作并将结果保存在一个变量中 
  10. $result = $dbh->query(“INSERT INTO img (images) VALUES (‘$buf’)”); 
  11. //获取影响的行数 
  12. if ($result->rowCount() >0) { 
  13. echo(“数据已插入。”); 
  14. else { 
  15. echo(“不能执行插入操作。”); 
  16. //显式的关闭PDO连接 
  17. $dbh = NULL; 
  18. ?> 

显示图片,show.php,代码如下:

  1. <?php 
  2. $conn=@mysql_connect(“localhost”,”root”,”123456″) or die(“服务器连接错误!”); //链接数据库 
  3. @mysql_select_db(“test”,$connor die(“未发现数据库!”); 
  4. $query=”select * from img where Id=”.$_GET['id']; 
  5. $result=mysql_query($query);
  6. $num=mysql_num_rows($result); 
  7. $data = mysql_result($result,0,”images”); 
  8. header(“Content-type: image/” . $num['imgType']); 
  9. echo $data
  10. ?> 

或者,代码如下:<img src=”show.php?id=5″ />

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 对生成的图片名和路径做处理,这里自己去实现,代码如下:

  1. $newFilePath='1.jpg'
  2. $data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post过来的二进制原始数据 
  3. if(emptyempty($data)){ 
  4.  $data=file_get_contents("php://input"); 
  5. $newFile = fopen($newFilePath,"w");//打开文件准备写入 
  6. fwrite($newFile,$data);//写入二进制流到文件 
  7. fclose($newFile);//关闭文件  

可以把读取到的二进制流存到数据库,也可以直接写入成一个图片,获取二进制头文件,从而得知属于什么类型文件,代码如下:

  1. $bin = substr($content,0,2); 
  2.     $strInfo = @unpack("C2chars"$bin); 
  3.     $typeCode = intval($strInfo['chars1'].$strInfo['chars2']); 
  4.     $fileType = '';//开源代码phpfensi.com 
  5.     switch ($typeCode
  6.     { 
  7.         case 7790: 
  8.             $fileType = 'exe'
  9.             break
  10.         case 7784: 
  11.             $fileType = 'midi'
  12.             break
  13.         case 8297: 
  14.             $fileType = 'rar'
  15.             break
  16.         case 255216: 
  17.             $fileType = 'jpg'
  18.             break
  19.         case 7173: 
  20.             $fileType = 'gif'
  21.             break
  22.         case 6677: 
  23.             $fileType = 'bmp'
  24.             break
  25.         case 13780: 
  26.             $fileType = 'png'
  27.             break
  28.         default
  29.             echo 'unknown'
  30.     }
来顶一下
返回首页
返回首页
推荐资讯
WiFi太不安全:7岁女孩11分钟内入侵公共网络 WiFi太不安全:7岁女孩11分钟内入侵近期刚刚发布研究说WiFi网络能获得人们手机里多少私人信息,
不服跑个分?人工智能也出现“刷分”乱象 不服跑个分?人工智能也出现“刷分2014年,人工智能领域突然爆发,成为了科研和科技创业的热门
相关文章
    无相关信息
栏目更新
栏目热门