2011-06-25 16 views
6

オブジェクトをリクエストしたモバイルデバイスに送信する前に、サーバー上のJSONオブジェクトからのテキスト出力を圧縮することに興味があります。 txt圧縮の小さなテストは、そのサイズを約80%縮小します!これはモバイルに最適です! :)PHPで送信する前にJSONオブジェクトを圧縮する

私はサーバー上に作成したzipファイルを保存する必要はありません。メモリに常駐させてから、エコーアウトしてください。私はアンドロイド側にそれを解凍することができます問題はありません。

とにかく、私は少しの操作を行ってきたが、私は働く何を思い付くことができていない、ここで私がこれまで持っているものです。

while($e=mysql_fetch_assoc($q)) 
    $output[]=$e; 
$zip = new ZipArchive(); 
$zip->addFromString("test",(json_encode($output))); 
echo $zip; 

私はイムはおそらく大規模な何か間違ったことを知っています、私は非常にPHPに精通していない。 My $ qは多くのSQL行を含むカーソルです。すべてのzip shenanigansの代わりにprint(json_encode($output));を使用すると、生のテキストを出力するのに問題ありません。

私はそれがzip圧縮でなければならないと思いますが、あなたが私がそれを理解することができる適切な方向で私を指すことができればどんな圧縮も役立つでしょう。ありがとう!

+2

ウェブサーバーを使用してPHPデータを提供する場合は、標準のgzip/deflateを使用することを検討してください。さらにそれを圧縮することはあまり助けてはならない。あなたのクライアント側が解凍/解凍できる場合は、実装するだけで十分で簡単です(実装する必要はありません)。 – Kissaki

+1

私の興味に関連する+1の質問。 –

答えて

9

あなたはob_gzhandlerob_startを使用することができます。

if(function_exists('ob_gzhandler')) ob_start('ob_gzhandler'); 
else ob_start(); 

echo json_encode($output); 
ob_end_flush(); 
+1

+1、良い答え良い質問。 @knittlクライアント側でzip/encodedデータをjsonに解凍/デコードする方法を説明できます。 –

+0

@Imram:クライアント(ブラウザ)は自動的にデータを圧縮します(おそらく、正しいHTTPヘッダーを送信していない場合)。 jsonは既に有効なjavascriptコードなので、jsonのデコードは必要ありません。 – knittl

+1

アンドロイドのgzip httpリクエスト機能を使って驚いていたあと、私はこれを手に入れました。私のサーバー(と私のプレーヤーのデータプラン)ありがとう! – Eric

0

サーバーサイド:zip形式のJSONオブジェクトで、クライアントに送信されたバイト配列でのみプロパティが含まれているJSONオブジェクトを作成します。 クライアント側:オブジェクトに含まれるバイト配列を解凍して、元のJSON DATAを取得します。 プロ:5X最速の通信サーバー - クライアント、サーバーのIO処理が減ります。 より多くのCPU作業が必要です。 P

関連する問題