PHP二进制上传图片 AND 再把二进制转换成图片详细介绍(案例)

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 个字节时就会停止读取文件,视乎先碰到哪种情况。
代码片段:
  1. $image=$_FILES['file'];  
  2. $fp=fopen($image['name'],"r");// $image['name']图片路径 ,我简单测试 放在根目录了,正式使用时请更换成正确的路径  
  3. $file=fread($fp,filesize($image['name']));  


以上的$file已经是二进制数据了,你想怎么糟蹋就怎么糟蹋,比如:丢到数据库,拽到飞机上,拉到火车上,推到床上... 只有你想不到,没有你做不到。

二进制转换成图片

注:$newFilePath 对生成的图片名和路径做处理,这里自己去实现。
  1. $newFilePath='1.jpg';  
  2. $data = $GLOBALS[HTTP_RAW_POST_DATA];//得到post过来的二进制原始数据  
  3. if(empty($data)){   
  4.   $data=file_get_contents("php://input");  
  5. }  
  6. $newFile = fopen($newFilePath,"w");//打开文件准备写入  
  7. fwrite($newFile,$data);//写入二进制流到文件  
  8. fclose($newFile);//关闭文件  

可以把读取到的二进制流存到数据库,也可以直接写入成一个图片。
  1. <pre></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4. <pre></pre>  
对于跨域上传附加 用二进制流还是非常方便的。
简单实现思路

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

  1. $bin = substr($content,0,2);  
  2.     $strInfo = @unpack("C2chars"$bin);  
  3.     $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);  
  4.     $fileType = '';  
  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.     } 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值