PHP에서 POST 본문을 얻는 방법?
다음을 PHP 페이지에 POST로 제출합니다.
{a:1}
요청 본문입니다 (POST 요청).
PHP에서 그 값을 추출하려면 어떻게해야합니까?
var_dump($_POST);
작동하지 않는 해결책이 아닙니다.
POST 또는 PUT 요청의 엔티티 본문 (또는 다른 HTTP 메소드)에 액세스하려면 다음을 수행하십시오.
$entityBody = file_get_contents('php://input');
또한 STDIN
상수는 이미 열린 스트림 php://input
이므로 다음과 같이 할 수도 있습니다.
$entityBody = stream_get_contents(STDIN);
php : // input 은 요청 본문에서 원시 데이터를 읽을 수있는 읽기 전용 스트림입니다. POST 요청의 경우, 사용하는 것이 바람직하다 PHP : // 입력 하는 대신
$HTTP_RAW_POST_DATA
이 특별한 php.ini의 지시에 의존하지 않는. 또한$HTTP_RAW_POST_DATA
기본적으로 채워지지 않은 경우 always_populate_raw_post_data를 활성화하는 것보다 메모리를 덜 사용하는 대안입니다. enctype = "multipart / form-data"에는 php : // input을 사용할 수 없습니다.
특히 당신은주의하는 것이 좋습니다 php://input
스트림에 관계없이 당신이 웹 SAPI에 액세스하는 방법, 시크하지 않습니다 . 이는 한 번만 읽을 수 있음을 의미합니다. 대규모 HTTP 엔터티 본문이 정기적으로 업로드되는 환경에서 작업하는 경우 위의 첫 번째 예와 같이 버퍼링하지 않고 스트림 형식으로 입력을 유지하고자 할 수 있습니다.
이와 같은 스트림 리소스를 유지하는 것이 도움이 될 수 있습니다.
<?php
function detectRequestBody() {
$rawInput = fopen('php://input', 'r');
$tempStream = fopen('php://temp', 'r+');
stream_copy_to_stream($rawInput, $tempStream);
rewind($tempStream);
return $tempStream;
}
php://temp
특정 양의 데이터가 저장된 후 파일 시스템 스토리지로 투명하게 전환되므로 메모리 소비를 관리 할 수 있습니다 (기본적으로 2M). 이 크기는 php.ini 파일 또는 추가하여 조작 할 수있는 /maxmemory:NN
곳, NN
바이트, 임시 파일을 사용하기 전에 메모리에 유지하는 데이터의 최대 금액입니다.
물론, 입력 스트림을 찾는 이유가 없다면 웹 애플리케이션에서이 기능이 필요하지 않습니다. HTTP 요청 엔터티 본문을 한 번 읽는 것으로 충분합니다. 앱이 수행 할 작업을 파악하는 동안 클라이언트를 하루 종일 기다리지 마십시오.
HTML 형식 의 Content-Type: multipart/form-data
헤더를 지정하는 요청에는 php : // input을 사용할 수 없습니다 enctype="multipart/form-data"
. 이것은 PHP가 이미 폼 데이터를 $_POST
슈퍼 글로벌 로 파싱 한 결과입니다 .
비어있는 이유 $_POST
는 요청이 아니 POST
거나 POST
더 이상 아니기 때문입니다 ... 요청으로 시작되었지만 어딘가에 리디렉션 301
되었거나 302
이로 전환되었습니다 GET
!
검사 $_SERVER['REQUEST_METHOD']
이러한 경우 확인.
이것이 발생하지 않아야하지만 여전히 발생하는 이유에 대한 자세한 내용은 https://stackoverflow.com/a/19422232/109787 을 참조 하십시오 .
배열의 반환 값
$data = json_decode(file_get_contents('php://input'), true);
HTTP PECL 확장을 설치 한 경우 http_get_request_body()
함수를 사용하여 본문 데이터를 문자열로 얻을 수 있습니다.
당신이있는 경우 PECL을 / HTTP 확장 설치, 당신은이를 사용할 수 있습니다 :
$request = new http\Env\Request();
$request->getBody();
http_get_request_body()
http://php.net/manual/fa/function.http-get-request-body.php 문서에 따라 본문 PUT
과 POST
요청 을 얻기 위해 명시 적으로 만들어졌습니다 .
참고 URL : https://stackoverflow.com/questions/8945879/how-to-get-body-of-a-post-in-php
'IT story' 카테고리의 다른 글
최대 절전 모드의 첫 번째 및 두 번째 수준 캐시는 무엇입니까? (0) | 2020.04.14 |
---|---|
자바 스크립트 파일 업로드 크기 확인 (0) | 2020.04.14 |
Swift 사전에 키가 포함되어 있는지 확인하고 해당 값을 가져 오는 경우 (0) | 2020.04.14 |
팬더의 축은 무엇을 의미합니까? (0) | 2020.04.14 |
Mac OS X 10.9에 Lxml을 설치할 수 없습니다 (0) | 2020.04.13 |