Чтение ввода json в php

php://input корректно работает в localhost. Но на сервере он возвращается пустым. Вход (запрос) на мой сайт – это json ( REST – application / json type ), поэтому $_POST не работает (прочитайте этот вопрос ).

$ _POST работает с входами типа пары ключ-значение, такими как данные формы или x-www-urlencoded

ключ1 = значение1 & ключ2 = значение2 & ключ3 = значение3

Я использую 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; } } 

Выше код работает отлично и на другом веб-сервере, но не в текущем. 🙁

Я думаю, что мой веб-сервер запрещает доступ к php://input .

Есть ли какие-либо другие методы для чтения ввода json в php?

php: // input – это поток только для чтения, который позволяет вам считывать необработанные данные из тела запроса. В случае запросов POST предпочтительнее использовать вход php: // вместо $ HTTP_RAW_POST_DATA, поскольку он не зависит от специальных директив php.ini. Более того, для тех случаев, когда по умолчанию HTTP_RAW_POST_DATA не заполняется по умолчанию, это потенциально менее энергоемкая альтернатива активации always_populate_raw_post_data. php: // вход не доступен с 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'; } .... 

Также проверьте allow_url_fopen .

Я знаю, что это старо, но это может помочь другим:

Осторожно с одинарными кавычками внутри вашего json

Из документации PHP о json_decode:

 the name and value must be enclosed in double quotes single quotes are not valid $bad_json = "{ 'bar': 'baz' }"; json_decode($bad_json); // null