BOARD

팁·활용

PHP에서 HTTP POST 요청으로 전달된 JSON 데이터 처리 방법

페이지 정보

profile_image
작성자 최고관리자
댓글 0건 조회 30회 작성일 26-09-14 06:35

본문

PHP에서 HTTP POST 요청으로 전달된 JSON 데이터 처리 방법

그누보드 운영 시 외부 API나 모바일 앱 연동으로 전달된 JSON 형태의 POST 데이터를 $POST 대신 php://input과 jsondecode로 올바르게 읽고 처리하는 방법을 알아봅니다.

PHP에서 JSON 데이터가 $_POST 슈퍼글로벌 변수로 바로 수신되지 않는 이유

일반적인 폼 전송 방식(예: application/x-www-form-urlencoded 또는 multipart/form-data)은 PHP가 기본적으로 인식하고 파싱하여 $_POST 슈퍼글로벌 변수에 담아줍니다. 하지만 외부 API 연동이나 모바일 앱 통신 등에서 HTTP POST 요청의 본문(Body)에 JSON 객체 형태의 데이터를 전달하는 경우, PHP 엔진은 이 원시(raw) 본문 데이터를 자동으로 $_POST 변수에 채워 넣지 않습니다.

따라서 JSON 형식으로 전달된 데이터는 $_POST로 바로 잡히지 않으며, 원시 입력 스트림을 직접 읽어와 파싱하는 과정이 필요합니다.

원시 본문 데이터 처리 방법

file_get_contents 함수와 php://input 스트림을 조합하면 POST 요청으로 전송된 원본 Body 문자열을 가져올 수 있습니다. 이후 json_decode() 함수를 이용해 PHP 배열로 변환하여 필요한 값에 접근합니다.

<?php
ini_set("allow_url_fopen", true);

// POST Body의 JSON 문자열을 가져옵니다.
$json_string = file_get_contents('php://input');

// JSON 문자열을 PHP 배열로 디코딩합니다.
$connect_message = json_decode($json_string, true);

// 파싱된 데이터 확인
echo "aaa = ". $connect_message['aaa'];
?>

PHP에서 file_get_contents('php://input')과 allow_url_fopen 활용 방법

외부 API 연동이나 모바일 앱 통신 등에서 HTTP POST 요청의 Body에 JSON 객체 형태의 데이터를 전달할 때, 일반적인 폼 전송 방식과 달리 $_POST 슈퍼글로벌 변수로 바로 잡히지 않으므로 원시 입력 스트림을 읽어오는 과정이 필요합니다.

코드 예시 및 구현 방법

file_get_contents 함수와 php://input 스트림을 사용하면 POST 요청으로 전송된 원본 Body 문자열을 가져올 수 있습니다. 이후 json_decode() 함수를 이용해 PHP 배열로 변환하여 필요한 값에 접근합니다.

<?php
ini_set("allow_url_fopen", true);

// POST Body의 JSON 문자열을 가져옵니다.
$json_string = file_get_contents('php://input');

// JSON 문자열을 PHP 배열로 디코딩합니다.
$connect_message = json_decode($json_string, true);

// 파싱된 데이터 확인
echo "aaa = ". $connect_message['aaa'];
?>

코드 설명

  • ini_set("allow_url_fopen", true); 설정과 file_get_contents('php://input')은 요청 본문의 raw 데이터를 손실 없이 문자열로 읽어오는 역할을 합니다.
  • json_decode()의 두 번째 인자에 true를 전달하여 객체가 아닌 연관 배열 형태로 데이터를 다루도록 설정합니다.

적용 효과 및 검증

해당 로직을 적용하면 외부 클라이언트가 보낸 JSON 데이터를 서버에서 정상적으로 수신하여 연관 배열 형태로 안전하게 활용할 수 있습니다. 데이터를 출력하거나 로그로 남겨 파싱 결과가 정확한지 확인할 수 있습니다.

json_decode() 함수의 두 번째 인자에 true를 전달하는 이유

json_decode() 함수의 두 번째 인자에 true를 전달하는 이유는 전송받은 JSON 문자열을 PHP 객체가 아니라 연관 배열(Associative Array) 형태로 디코딩하기 위해서입니다.

이를 통해 $connect_message['aaa']와 같은 배열 키 접근 방식을 사용하여 파싱된 데이터에 안전하고 직관적으로 접근할 수 있습니다.

웹호스팅 환경에서 POST 데이터 전송 시 변수 누락 해결

외부 API 연동이나 모바일 앱 통신 등에서 HTTP POST 요청으로 데이터를 전송할 때 변수가 누락되거나 유실되는 경우, 원문에서 안내하는 관련 연계 글인 웹호스팅 환경에서 POST 데이터 전송 시 변수 누락 해결하기 글을 참고하여 추가 점검을 진행할 수 있습니다.

함께 보면 좋은 글

참고자료

기타 참고자료

댓글목록

등록된 댓글이 없습니다.