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 데이터 전송 시 변수 누락 해결하기 글을 참고하여 추가 점검을 진행할 수 있습니다.
함께 보면 좋은 글
- 웹호스팅 환경에서 POST 데이터 전송 시 변수 누락 해결하기
- 그누보드 게시판 입력 필드 URL에 http 프로토콜 자동 추가하기
- 그누보드 댓글 내용에 입력된 http 주소 자동 링크 제거 방법
참고자료
기타 참고자료
- 이전글PHP로 특정 날짜의 요일과 주차, 월 시작일 및 종료일 계산하기 26.09.14
- 다음글그누보드 PHP 파일 끝 닫기 태그 생략 이유와 적용 방법 26.09.14
댓글목록
등록된 댓글이 없습니다.