2016-07-20 3 views
3

PHPソケット経由でgzipデータをストリームで受信しています。データは RFC-1952 RFC-1950に準拠しています。gzippedデータをストリーミングするPHPソケット

while(($buffer = socket_read($this->socket, 1024))){ 
    $content .= $buffer; 
} 

質問が二つあります。

  1. ストリームを読み込むためにラッパーを使用できますか?
  2. gzipファイルの終わりを検出するにはどうすればよいですか?

答えて

1

私はこれを行う方法があります信じて:

fread(); 
0

あなたはGZIPの終わりを検出しません。 RFC1952

gzipファイルは、 "メンバー"(圧縮されたデータ セット)の一連の構成から

。各メンバーのフォーマットは、次の セクションで指定します。メンバーは、 というファイル内に次々に表示され、その前、間、または後の追加情報はありません

gzipファイルをマージしても、有効なgzipファイルであるため、デコードすることはできます。私は(213 \ 0x8b)ID2 = 139 、署名を

ID1(037 \ 0x1Fの)これらは固定値ID1 = 31を有する(識別1) ID2(識別2) が開始されると思いますそのファイルをgzip形式であると識別します。

(0x1Fのが0x8b)

ストリームは、単にファイルをデコード停止した場合、私は思います。

+0

サーバは実際には 'RFC 1950'フォーマットを送信しています。私はPHPの 'gzencode()'と 'FORCE_DEFLATE'は同じことをすると思います。私はファイルの終わりを検出する必要があります –

0

RFC 1950の場合、zlibエンコーディングでは、gzuncompress()を使用します。

関連する問題