LAOX ニュース
en ja zh
PHPプログラミング

php://input でPOSTリクエストの生データを取得する

POSTリクエストの生データは、php://input のストリームを読み込む事で取得できる。

$data = file_get_contents('php://input');

通常、POSTデータは $_POST に入るので生データ取得をする必要が無いが、JavaScriptから送信するファイルアップロードを実装する際などには必ずしも $_POST がセットされないケースがあるので、そういう用法に於いて有用である。

php://input と同様に $HTTP_RAW_POST_DATA でも生データが取得できるが、php.ini で有効可しなければならないのと PHP 5.6 以降では非推奨となっているので、やはり php://input を使う事が推奨される。


サンプルコード

client.html

<input type="button" value= "click" onclick="click()">    
<script>    
  function click(){    
    var js_obj = {plugin: 'jquery-json', version: 2.3};    
    var encoded = JSON.stringify(js_obj);    
    var data= encoded    
    $.ajax({    
      type: "POST",    
      url: 'server.php',    
      data: data,    
      success: function(data){    
        console.log(data);    
      }    
    });    
  }    
</script>    

server.php

print_r($_POST); // 内容なし。空で渡されるので使えない    
var_dump(file_get_contents('php://input'));    

おすすめの記事