php://input
корректно работает в localhost. Но на сервере он возвращается пустым. Вход (запрос) на мой сайт – это json
( REST – application / json type ), поэтому $_POST
не работает (прочитайте этот вопрос ).
$ _POST работает с входами типа пары ключ-значение, такими как данные формы или x-www-urlencoded
- Отправка данных в веб-службу с использованием сообщения
- Как я могу использовать php для заполнения файла manifest.json?
- Как конвертировать шестнадцатеричные коды в данные JSON с помощью PHP
- Разбор Json-ответа с использованием PHP с пробелом в ключе массива
- PHP json_encode не удаляет все управляющие символы JSON
ключ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