php接收二進制文件怎么替換里面的內(nèi)容
公司主營業(yè)務(wù):網(wǎng)站制作、成都網(wǎng)站設(shè)計、移動網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚、勤奮敬業(yè)、活力青春激揚、勤奮敬業(yè)、活力澎湃、和諧高效的團隊。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團隊有機會用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出河?xùn)|免費做網(wǎng)站回饋大家。
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過來的二進制原始數(shù)據(jù)
$file = fopen("./upload/".$filename,"w");//打開文件準(zhǔn)備寫入
fwrite($file,$raw);//寫入
fclose($file);//關(guān)閉
?
接收的二進制文件中非標(biāo)準(zhǔn)字符(0x7F)的字節(jié)被替換為三個字節(jié),比如E2替換為EF 9F A2
現(xiàn)在我想在Php接收到文件之后還原回去,把EF 9F A2替換為E2,請問這個怎么實現(xiàn)?
非常感謝!
PHP 二進制
------解決方案--------------------
他的數(shù)據(jù)轉(zhuǎn)換規(guī)則是這樣的:
文件頭不變,文件頭多長不清楚,圖上到0050h都一樣的
=7F的字節(jié),因為utf-8也一樣,可以認(rèn)為也轉(zhuǎn)換了utf-8
=80的字節(jié),高位加上F7,再轉(zhuǎn)utf-8,例如E2就變成F7E2然后轉(zhuǎn)utf-8成為EF 9F A2
至少他圖中E2/FB/91/B2/81...都滿足這個規(guī)則
------解決方案--------------------
本帖最后由 xuzuning 于 2013-05-02 15:35:02 編輯
用正則可這樣寫
假定數(shù)據(jù)已把存在變量 $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);
}
需要準(zhǔn)備的材料分別是:電腦、php編輯器、瀏覽器。
1、首先,打開php編輯器,新建php文件,例如:index.php。
2、以二進制數(shù)1110101為例,在index.php中,輸入代碼:$a = 0b1110101;echo $a;。
3、瀏覽器運行index.php頁面,此時會看到二進制數(shù)1110101被成功表示,并以十進制形式打印了出來。
?php
$bin= bstr2bin($json);
file_put_contents('../somefold/',$bin);
function bstr2bin($input){
// Binary representation of a binary-string
if (!is_string($input)) return null; // Sanity check
// Unpack as a hexadecimal string
$value = unpack('H*', $input);
// Output binary representation
$value = str_split($value[1], 1);
$bin = '';
foreach ($value as $v){
$b = str_pad(base_convert($v, 16, 2), 4, '0', STR_PAD_LEFT);
$bin .= $b;
}
return $bin;