2009-05-25 37 views
2

私はPHPベースのSOAP Webサービスと通信して更新とライセンス供与を行うC#アプリケーションを用意しています。PHPは.NET GZipStreamクラスで圧縮されたファイルを解凍できますか?

私は現在、ソフトウェアを使用してエラーやトローリングを自動的に送信するためのフィードバックシステムに取り組んでいます。私が投稿した以前の質問に基づいて、Webサービスがこれを行う最善の方法であると感じました(ほとんどの設定で正しく動作する可能性が高い)。

現在、.NETの組み込みgzip圧縮を使用してテキストファイルを圧縮し、base64に変換し、Webサービスに送信し、PHPスクリプトをバイナリに変換してデータを解凍することを考えています。

PHPはGZipStreamで圧縮されたデータを圧縮解除できますか?

答えて

6

実際にこれを試しました。 GZipStreamは機能しません。一方、.NET側でDeflateStreamで圧縮し、PHP側でgzinflateで解凍すると作業ができます。あなたの走行距離は異なるかもしれません...

+0

私はこのソリューションのプロトタイプを作成しました。今は大きなファイルの解凍とエスケープからPHPメモリ割り当てエラーを処理するだけです。 –

0

はい、PHPはヘッダーの有無にかかわらず、GZIP圧縮文字列を圧縮解除できます。 GZIPファイルフォーマット(gzipですなわち、互換性のある) "生"(一部のヘッダ情報なしGZIPフォーマット)ZLIB形式に

Iをフォーマット

  • gzuncompressを収縮するため
  • gzinflateため
    • gzdecode

      私が.NET GZipStreamに慣れていないので、どちらをお望みか分からない。 ZLIBフォーマットは「ストリーミング」形式なので、gzuncompressのように聞こえますが、3つすべてを試してみてください。

  • +1

    :gzinflateはGZipStream圧縮データを解凍するメソッドです。 –

    0

    サーバーはWebリクエストを受け入れているので、HTTPヘッダーをチェックして、クライアントが毎回推測しgzipするのではなく、GZIPエンコーディングを受け入れるかどうかを判断する必要があります。

    PHPクライアントがgzipを実行することができれば、ヘッダを設定すれば、あなたのコードは適切なことに応じて反応します。あなたのコードがクライアントの能力を学ぶために施設が提供されていると仮定するか、推測するのは賢明ではありません。

    +0

    これは当てはまるとは思わない。クライアントはC#アプリケーションで、サーバはPHPベースです。クライアントはサーバーへの接続を開始しているので、ヘッダーはサーバーではなくクライアント(C#)アプリケーションによって生成されます。 –

    +0

    @Chrisあなたはポイントを逃した、クライアントは何かを何かしたいとサーバーに伝える必要があります。リソースを識別するためにURLを使用するのと同じように、ヘッダーの理由は、クライアントが受信したいエンコーディング形式を含むさまざまなメタデータを含めることです。 ヘッダーの背後にある推論全体を理解していないと、クライアントが応答を調整できる余分な情報をクライアントに送信できます。 –

    +0

    たとえば、ユーザーが希望する言語について質問するために、どの言語が必要なのかを示す重み付けをチェックできるヘッダーがあります。あなたのサーバーのものは自然にこれをチェックして、あなたの応答を調整することができます。あなたが国際的なアプリを書いているなら、これをチェックして食べるのが理にかなっています...誰もがスペイン語やドイツ語が愚かであることを望むときに英語を話し、英語を送るわけではありません。 –

    1

    httpレベルのライブラリ(クライアントとサーバーの両方)、http has support for gzip-compressionを実装している場合は、手動で何かを圧縮する必要はありません。あなたはそれ以上のベンチャーになる前に、すでに起こっているかどうかを確認する必要があります。

    +1

    これはクライアントからデータを送信するために機能しますか?私はgzipエンコーディングをサーバーからクライアントに行ったが、クライアントからサーバーには行っていない。 –

    +0

    私はそれがHTTPに従って有効であると確信しています。しかし、それが実装によってサポートされているかどうかは別の問題です。まだ - 私は調査する価値があると思う。 – troelskn

    0

    私は最近、C#で圧縮/解凍する方法を示した記事を投稿しました。私はほとんど同じシナリオでそれを使いました。私は、クライアントからサーバーにログファイルを転送したいと思っていました。しかし私の場合、私のwebserviceは.NETで動作していたので、解凍メソッドを使用することができました。しかし、PHPがgzdecodeというメソッドをサポートしているように見えます。将来の参照のため

    http://coding.infoconex.com/post/2009/05/Compress-and-Decompress-using-net-framework-and-built-in-GZipStream.aspx

    関連する問題