@kkomissarov

Как получить json из post-запроса?

Есть 2 файла. Первый обращается ко второму методом post и передает json

$url = '/test.php';


$json = json_encode(['name' => 'Имя', 'phone' => '88000000000']);

$options = ['http' => [
    'method' => 'POST',
    'header' => 'Content-type:application/json',
    'content' => http_build_query($json)
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);


А второй должен его принимать и записывать в файл. Но я не понимаю как во втором файле получить и обработать этот json? Пробую вот так, не получается:

$fd = fopen("result.txt", 'a') or die("не удалось создать файл");
$str = $_POST.PHP_EOL;
fwrite($fd, $str);
fclose($fd);
  • Вопрос задан
  • 3264 просмотра
Пригласить эксперта
Ответы на вопрос 4
makssof
@makssof
Web-разработчик
$_POST - это распарсенный массив key=value
$_POST = json_decode(file_get_contents('php://input'), true);

Доки: https://www.php.net/manual/ru/wrappers.php.php#wra...
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
$str = $_POST.PHP_EOL; $_POST это массив, что вы к нему пытаетесь конкатенировать?
элементарно проверить же, var_dump($_POST) и смотрите что пришло.
Если тупо записать в файл -
file_put_contents("result.txt", print_r($_POST,true));
Ответ написан
Комментировать
Gomonov
@Gomonov
$str = file_get_contents('php://input') . PHP_EOL;
Ответ написан
Комментировать
@kkomissarov Автор вопроса
Во-первых нужно было убрать http_build_query и в контент передавать просто $json:

$json = json_encode(['name' => 'Имя', 'phone' => '88000000000']);

$options = ['http' => [
    'method' => 'POST',
    'header' => 'Content-type:application/json',
    'content' => $json
]];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);


Ну а во вторых, как все уже написали, нужно было получать не $_POST, а
$fd = fopen("result.txt", 'a') or die("не удалось создать файл");
  $str = file_get_contents('php://input').PHP_EOL;
  fwrite($fd, $str);
  fclose($fd);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽