2016-10-30 11 views
0

私は、次のPHPファイルを持っている:PHPはHTTP POST(圧縮)JSONリクエストを解析していませんか?

<?php 
    // *************************************************** 
    if (!function_exists('gzdecode')) 
    { 
     function gzdecode($data) 
     { 
      // strip header and footer and inflate 
      return gzinflate(substr($data, 10, -8)); 
     } 
    } 
    // *************************************************** 

    // get compressed (gzip) POST request into a string 
    $comprReq = file_get_contents('php://input'); 

    // get decompressed POST request 
    $decomprReq = gzdecode($comprReq); 

    // decode to json 
    $jsonData = json_decode($decomprReq, true); 

    // create file if not exits or open file if exists 
    $file = fopen('omni.json', 'a'); 

    if ($jsonData === null) 
    { 
     // mark as invalid and save. send HTTP response 
     fwrite($file, 'invalid json'); 
     fclose($file); 
     header('HTTP/1.0 400 Bad Request'); 
    } 
    else 
    { 
     // write json and save. send HTTP response 
     fwrite($file, $jsonData); 
     fclose($file); 
     header('HTTP/1.0 200 OK');   
    } 
?> 

アイデアは、それはJSON HTTP POST(圧縮 - gzip圧縮された)受け入れることで、新しいの終わりに、それを解凍し、(JSON形式)JSONを追加します(存在しない場合)または既存のjsonファイル。また、結果に応じて200 OKまたは400 BAD REQUEST HTTP応答コードを返す必要があります。

は、私は、次の送信することにより、Postmanでこれをテストしてみてください:

ヘッダ(注意のgzipキー): enter image description here

サンプルJSON本体: enter image description here

結果: enter image description here

何も起こりません。サーバー上にJSONファイルが作成されません。レスポンスは常に200 OKです。

私が間違っていることは何ですか?

+0

サーバーとファイルのパスでアクセス許可を確認してください。 Apacheがファイルを作成する権限を持つことはできません。 –

+0

ちょうどいいよ。私はomni.jsonを自分で作成してみました(空)ので、PHPを作成しなくても開くことができます。 – Polis

+0

fopen()またはfwrite()のいずれかの関数がfalseを返すかどうか確認できますか? – wigi

答えて

0

ファイルのパスとアクセス許可を確認してください(ファイル名への完全なパスを指定するには__DIR__を使用してください)。変数$ degradprReqは、gzipedではなくクリアテキストでコンテンツを送信するため、falseです。 $ comprReqには、送信するjson値があります。私はあなたのコードをテストし、大丈夫に見えます。

+0

を実際に使用しても問題ありませんでした。コードに問題がありました(例:/ ****、* /なしのコメント行など) – Polis

+0

コードでは、// ***とは異なる//が表示されます。 –

関連する問題