Как и для чего используется php://input?

Недавно наткнулся на след код php при создания товара по REST:
$product = new Product($db);
 
// получаем отправленные данные 
$data = json_decode(file_get_contents("php://input"));
 
// убеждаемся, что данные не пусты 
if (
    !empty($data->name) &&
    !empty($data->price) &&
    !empty($data->description) &&
    !empty($data->category_id)
) {

    // устанавливаем значения свойств товара 
    $product->name = $data->name;
    $product->price = $data->price;
    $product->description = $data->description;
    $product->category_id = $data->category_id;
    $product->created = date('Y-m-d H:i:s');

    // создание товара 
    if($product->create()){

        // установим код ответа - 201 создано 
        http_response_code(201);

        // сообщим пользователю 
        echo json_encode(array("message" => "Товар был создан."), JSON_UNESCAPED_UNICODE);
    }


Не могу понять как и для чего используется // получаем отправленные данные
file_get_contents("php://input");

почему данные не передать через POST или GET ?
  • Вопрос задан
  • 423 просмотра
Решения вопроса 2
@granty
Данные и так передаются по POST (или GET), но есть нюансы их обработки на стороне сервера.

1. POST и GET данные в виде parameter=value&param2=val2 автоматически обрабатываются сервером и заполняются глобальные массивы $_POST/$_GET/$_REQUEST:
$_POST['parameter'] = value;
$_POST['param2'] = val2;

GET-параметры при этом ещё и автоматически декодируются по urldecode().
Через php://input можно получить "сырые" необработанные данные.

2. Методом POST можно прислать, например, объект JSON, указав 'Content-type: application/json; charset=utf-8'. При этом массив-обёртка $_POST будет пуста, тк не присылается Имя_Параметра, а присылается только Значение_Параметра, и сервер не обрабатывает такие данные автоматически.
Получить такие данные можно только через php://input, так как глобальные массивы $_POST/$_GET будут пустыми.
Ответ написан
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
https://www.php.net/manual/ru/wrappers.php
https://www.php.net/manual/ru/wrappers.php.php
отвечу сразу и на будущие вопросы)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы