⑴ <input type="file" name="file"> php中$_POSR['file']接收到的是路径还是二进制数据流
你要在<form>标签内加enctype=multipart/form-data 二进制流,但是这不是将图片上传到数据库,而是上传到服务器的临时文件夹下.之后在用move_uploaded_file()方法将上传的文件移动到一个目录下.mysql存储的只是这个上传文件的名称,或者是这个上传文件的路径+文件名称.这样你在html里面的<img>标签中的src属性里面填上路径+名称就可以找到上传的图片,显示出来了!
⑵ php接收二进制文件怎么替换里面的内容
php接收二进制文件怎么替换里面的内容
php接收二进制文件如下:
<?php
header('Content-type: text/html; charset=utf-8');
error_reporting(0);
$filename = $_GET["filename"];
$filesize = $_GET["filesize"];
$xmlstr = $GLOBALS[HTTP_RAW_POST_DATA];//$_POST["data"];//
if(empty($xmlstr)) $xmlstr = file_get_contents('php://input');
$raw = $xmlstr;//得到post过来的二进制原始数据
$file = fopen("./upload/".$filename,"w");//打开文件准备写入
fwrite($file,$raw);//写入
fclose($file);//关闭
?>
接收的二进制文件中非标准字符(>0x7F)的字节被替换为三个字节,比如E2替换为EF 9F A2
现在我想在Php接收到文件之后还原回去,把EF 9F A2替换为E2,请问这个怎么实现?
非常感谢!
PHP 二进制
------解决方案--------------------
他的数据转换规则是这样的:
文件头不变,文件头多长不清楚,图上到0050h都一样的
<=7F的字节,因为utf-8也一样,可以认为也转换了utf-8
>=80的字节,高位加上F7,再转utf-8,例如E2就变成F7E2然后转utf-8成为EF 9F A2
至少他图中E2/FB/91/B2/81...都满足这个规则
------解决方案--------------------
本帖最后由 xuzuning 于 2013-05-02 15:35:02 编辑
用正则可这样写
假定数据已把存在变量 $s 中,则
$s = preg_replace_callback('/[\xef]../', 'foo', $s);
function foo($r) {
$c = (ord($r[0]{1}) & 0x03) << 6;
$c += (ord($r[0]{2}) & 0x3f);
return chr($c);
}
⑶ Thinkphp二进制图片接收和转换
可以直接用post接受二进制数据,然后用header函数输出图片,
⑷ PHP关于获取二进制数据流转换为文件的方法
file_put_contents此函数可以安全用于二进制对象
⑸ php如何接受客户端传送过来的二进制流然后生成图片
sybase_connect连上数据库。
语法: int sybase_connect(string [servername], string [username], string [password]);
返回值: 整数函数种类: 数据库功能 本函数用来打开与 Sybase 数据库的连接。
参数 servername 为欲连上的数据库服务器名称。
参数 username 及 password 可省略,分别为连接使用的帐号及密码。
使用本函数需注意早点关闭数据库,以减少系统的负担。
连接成功则返回数据库的连接代号,失败返回 false 值。
⑹ php如何接收二进制流图片
<?php
/**
*图片类
*@authorhttp://blog.csdn.net/haiqiao_2010
*@version1.0
*
*PHP默认只识别application/x-www.form-urlencoded标准的数据类型。
*因此,对型如text/xml或者soap或者application/octet-stream之类的内容无法解析,如果用$_POST数组来接收就会失败!
*故保留原型,交给$GLOBALS['HTTP_RAW_POST_DATA']来接收。
*另外还有一项php://input也可以实现此这个功能
*php://input允许读取POST的原始数据。和$HTTP_RAW_POST_DATA比起来,它给内存带来的压力较小,并且不需要任何特殊的php.ini设置。php://input和$HTTP_RAW_POST_DATA不能用于enctype="multipart/form-data"。
*/
classimageUpload{
constROOT_PATH='./';
constFAIL_WRITE_DATA='Failtowritedata';
//没有数据流
constNO_STREAM_DATA='Thepostdataisempty';
//图片类型不正确
constNOT_CORRECT_TYPE='Notacorrectimagetype';
//不能创建文件
constCAN_NOT_CREATE_FILE='Cannotcreatefile';
//上传图片名称
public$image_name;
//图片保存名称
public$save_name;
//图片保存路径
public$save_dir;
//目录+图片完整路径
public$save_fullpath;
⑺ php怎样将二进制流存到文件中
整形转化成2二进制可以用base_convert:
$str=0x8000;
echo$str2=base_convert($str,16,2);
echo'<br>';
echobase_convert($str2,2,16);
[code]
字符串文件等可以考虑用pack和unpack转化成二进制
[code=PHP]
$file1='F:/46.gif';//随便拷一个图片作为测试用
$file2='F:/test.txt';//生成的二进制流保存在这个文件里
$file3='F:/47.gif';//由二进制流还原成的文件
$size=filesize($file1);
echo'文件大小为:'.$size;
echo" <br>转化为二进制...";
$content=file_get_contents($file1);
$content=bstr2bin($content);
$fp=fopen($file2,'w');
fwrite($fp,$content);
fclose($fp);
$size2=filesize($file2);
echo'转化成二进制后文件大小为:'.$size2;
$content=bin2bstr($content);
$fp=fopen($file3,'w');
fwrite($fp,$content);
fclose($fp);
functionbin2bstr($input)
//Convertabinaryexpression(e.g.,"100111")intoabinary-string
{
if(!is_string($input))returnnull;//Sanitycheck
//Packintoastring
$input=str_split($input,4);
$str='';
foreach($inputas$v)
{
$str.=base_convert($v,2,16);
}
$str=pack('H*',$str);
return$str;
}
functionbstr2bin($input)
//Binaryrepresentationofabinary-string
{
if(!is_string($input))returnnull;//Sanitycheck
//Unpackasahexadecimalstring
$value=unpack('H*',$input);
//Outputbinaryrepresentation
$value=str_split($value[1],1);
$bin='';
foreach($valueas$v)
{
$b=str_pad(base_convert($v,16,2),4,'0',STR_PAD_LEFT);
$bin.=$b;
}
return$bin;
}
⑻ 关于php 接收二进制流转换成图片
比如此类名字叫做imageUpload.class.php
那么首先是要引入该类文件用include("imageUpload.class.php");
第二步是实例化该类$inputimage = new imageUpload("input.jpg","./");
第三部是调用二进制转换成图片的方法了,$inputimage->stream2Image();
实例化该类需要传两个参数,第一个是需要保存的图片名字,第二个是图片保存路径地址。
⑼ PHP如何判断接收的是否为图片二进制数据
该函数图像格式将自动检测,只要 PHP 支持:JPEG,PNG,GIF,WBMP 和 GD2。 返回值:成功则返回图像资源,如果图像格式不支持,数据不是认可的格式,或者图像已损坏则返回 FALSE如果没有GD库可以使用下边的方法: function check_img_by_source($source) { switch(bin2hex(substr($source,0,2))){ case 'ffd8' : return 'ffd9' === bin2hex(substr($source,-2)); case '8950' : return '6082' === bin2hex(substr($source,-2)); case '4749' : return '003b' === bin2hex(substr($source,-2)); default : return false;}}//测试var_mp(check_img_by_source(file_get_contents('11.gif'));大概是这个样子的吧,只针对了jpg,png,gif做了判断。。想加其他的按照以上规则增加即可。 不过上边这个判断不够严谨,别人可以根据以上判断规则构造一个假数据。
⑽ php如何将webservice返回的二进制流保存到本地图片
前几天 刚弄的 app提交图片的接口,二进制那种比较麻烦,
让app那端也用 浏览器那种方式提交过来,php正常接收就ok
然后返回地址、图片属性,(这边不用保存到本地吧,app那端应该是保存到本地),多个的话循环一下也行,也不慢
最后app把多个图片以及表情、内容什么的提交过来 ,然后保存到数据库 应该是 ok的 ,如果 单独保存图片 正则匹配一下!!!