Как и для чего используется 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 ?
  • Вопрос задан
  • 5774 просмотра
Решения вопроса 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 Куратор тега PHP
та еще зажигалка...
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽
23 апр. 2024, в 13:02
3000 руб./за проект
23 апр. 2024, в 12:52
15000 руб./за проект