十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
该函数图像格式将自动检测,只要 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
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);
}
$content = $_POST['data'];
$fp = fopen('/tmp/newfile.bin','w');
fwrite($fp,$content);
以上例子是在data参数上传二进制,并保存到/tmp/newfile.bin中,解析json用json_decode,然后把二进制的那个值赋给content就可以