在php中读取json输入

Arj*_*Raj 8 php rest json codeigniter

php://input在localhost中正常工作.但在服务器中它返回空.输入(请求)到我的站点是一个json(REST - 应用程序/ json类型),所以$_POST没有工作(请阅读此问题).

$ _POST与键值对类型输入一起使用,例如form-data或x-www-urlencoded

键1 =值&键2 =值&KEY3 = VALUE3

我正在使用application/json输入(在REST中).

就像{'key1':'value1','key2':'value2','key3':'value3'}

这无法使用$_POST.但使用php://input可以帮助读取该数据.

我的代码

class Webservice_Controller extends CI_Controller {
    public $json_input_data;
    public function __construct(){
        parent::__construct();
        $this->json_input_data = json_decode(file_get_contents('php://input'),TRUE);
    }
    public function json_input($label){
        if(isset($this->json_input_data[$label])) return $this->json_input_data[$label];
        else return NULL;
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码在另一个网络服务器上工作正常,但不是在当前的.:(

我认为我的网络服务器拒绝访问php://input.

是否还有其他方法可以在php中读取json输入?

Roh*_*mar 4

php://input 是一个只读流,允许您从请求正文中读取原始数据。对于 POST 请求,最好使用 php://input 而不是 $HTTP_RAW_POST_DATA,因为它不依赖于特殊的 php.ini 指令。此外,对于默认情况下未填充 $HTTP_RAW_POST_DATA 的情况,它是激活always_populate_raw_post_data 的潜在内存密集型替代方案。php://input不适用于 enctype="multipart/form-data"

查看包装纸

也试试这个,

....
  public function __construct(){
    parent::__construct();
    if(isset($_POST))
    {
       var_dump(file_get_contents('php://input'));
       $this->json_input_data=json_decode(file_get_contents('php://input'),TRUE);
    }
    else echo 'Not Post';
  }
....
Run Code Online (Sandbox Code Playgroud)

还要检查allow_url_fopen.