1

私はMinecraftサーバーを持っていて、人々が持っているすべてのアイテムをバックアップする必要があります.world/playersの.datファイルを編集してこれを行いたいと思っています. このファイルには .dat ファイルがあり、その名前は各プレーヤーのユーザー名です。Notepad ++で開くと、次のように意味不明に表示されます。

NPPで開封した場合

通常のメモ帳は私にこれを与えます:

‹       ãb``bà
ÎIM-ÉÌM-b`àd`óÍ/ÉÌÏcc```¶ÛqæÀÉEÚ“öob=Ô£i×ý‰Ù5S  #‡ž{Q~i^
#‡GiQ   H?È46ÔÄœ’Œÿÿ™8]€byÅ@Àf¥˜3‹u88=óÊRóJò‹*AœÌùÅ`û˜Û„¥<^$çà ’apˆßñM&ðБŽ%%    ‰ÉÙ[€ÖƒÝœ™—4–Å-³(õÿV·Äœ—Ìâ’ļäTˆÉAù%‰ ï°‚\pð²±’ïÌ9L@§¥&–d€M“d  íl+  

ファイルはGzipされていると聞きました。このような理由なのでしょうか。これをデコードして実際に読めるようにするにはどうすればよいでしょうか。これを PHP スクリプトから復号化する必要があります。

4

1 に答える 1

0

実際の圧縮率を調べる必要がありますが、このファイル (gzip) を使用して開いてみてください。

<?php
$fp = fopen('compress.zlib://yourfile.dat', 'r');
if( $fp ){
    while(!feof($fp) ){
        echo fread($fp, 2048);
    }
    fclose($fp);
}
?> 

詳細については、 http://www.php.net/manual/en/wrappers.compression.phpをご覧ください。

編集:これを試してみてください:

<?php
$dat = file_get_contents('yourfile.dat');
echo gzdecoder($dat);

function gzdecoder($d){
    $f=ord(substr($d,3,1));
    $h=10;$e=0;
    if($f&4){
        $e=unpack('v',substr($d,10,2));
        $e=$e[1];$h+=2+$e;
    }
    if($f&8){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&16){
        $h=strpos($d,chr(0),$h)+1;
    }
    if($f&2){
        $h+=2;
    }
    $u = gzinflate(substr($d,$h));
    if($u===FALSE){
        $u=$d;
    }
    return $u;
}
?>

また、そうencryptedではありませんcompressed。;-)

于 2011-08-23T23:55:42.610 に答える