189 8069 5689

php接收2进制数据 php读取二进制文件

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_dump(check_img_by_source(file_get_contents('11.gif'));大概是这个样子的吧,只针对了jpg,png,gif做了判断。。想加其他的按照以上规则增加即可。 不过上边这个判断不够严谨,别人可以根据以上判断规则构造一个假数据。

创新互联-专业网站定制、快速模板网站建设、高性价比沛县网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式沛县网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖沛县地区。费用合理售后完善,十年实体公司更值得信赖。

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);

}

PHP关于获取二进制数据流转换为文件的方法

$content = $_POST['data'];

$fp = fopen('/tmp/newfile.bin','w');

fwrite($fp,$content);

以上例子是在data参数上传二进制,并保存到/tmp/newfile.bin中,解析json用json_decode,然后把二进制的那个值赋给content就可以


分享名称:php接收2进制数据 php读取二进制文件
分享链接:http://jkwzsj.com/article/doghsdh.html

其他资讯