PHP에서 POST의 시체를 얻는 방법?
PHPPHP에서 POST의 시체를 얻는 방법?
POST로 PHP 페이지에 다음과 같이 제출합니다.
{a:1}
이것은 요청 본문 (POST 요청)입니다. PHP에서 그 값을 추출하려면 어떻게해야합니까?
var_dump($_POST);
솔루션이 아니라 작동하지 않습니다.
해결법
-
==============================
1.POST 또는 PUT 요청 (또는 다른 HTTP 메소드)의 엔티티 본문에 액세스하려면 다음을 수행하십시오.
POST 또는 PUT 요청 (또는 다른 HTTP 메소드)의 엔티티 본문에 액세스하려면 다음을 수행하십시오.
$entityBody = file_get_contents('php://input');
또한 STDIN 상수는 이미 열려있는 php : // 스트림의 스트림이므로 다음과 같이 할 수도 있습니다.
$entityBody = stream_get_contents(STDIN);
I / O streamsdocs의 PHP 매뉴얼 항목에서 :
특히 웹 SAPI에서 액세스하는 방법에 관계없이 php : // 입력 스트림을 찾을 수 없다는 점에 유의해야합니다. 즉, 한 번만 읽을 수 있습니다. 대형 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 요청 엔티티 본문을 한 번 읽는 것만으로도 충분합니다. 앱이 무엇을해야할지 생각하는 동안 클라이언트를 하루 종일 기다리게하지 마십시오.
Content-Type : multipart / form-data 헤더 (HTML 형식에서는 enctype = "multipart / form-data")를 지정하는 요청에는 php : // input을 사용할 수 없습니다. 이것은 PHP가 이미 $ _POST 슈퍼 글로벌으로 양식 데이터를 파싱 한 결과입니다.
-
==============================
2.빈 $ _POST에 대한 가능한 이유는 요청이 POST가 아니거나 POST가 아니기 때문입니다. 게시물로 시작했지만 301 또는 302 리디렉션이 GET으로 전환하는 데 필요합니다!
빈 $ _POST에 대한 가능한 이유는 요청이 POST가 아니거나 POST가 아니기 때문입니다. 게시물로 시작했지만 301 또는 302 리디렉션이 GET으로 전환하는 데 필요합니다!
이 경우에 $ _SERVER [ 'REQUEST_METHOD']를 검사하십시오.
-
==============================
3.HTTP PECL 확장을 설치 한 경우 http_get_request_body () 함수를 사용하여 본문 데이터를 문자열로 가져올 수 있습니다.
HTTP PECL 확장을 설치 한 경우 http_get_request_body () 함수를 사용하여 본문 데이터를 문자열로 가져올 수 있습니다.
-
==============================
4.$ HTTP_RAW_POST_DATA 변수를 확인하십시오.
$ HTTP_RAW_POST_DATA 변수를 확인하십시오.
-
==============================
5.pecl / http 확장을 설치 한 경우 다음을 사용할 수도 있습니다.
pecl / http 확장을 설치 한 경우 다음을 사용할 수도 있습니다.
$request = new http\Env\Request(); $request->getBody();
from https://stackoverflow.com/questions/8945879/how-to-get-body-of-a-post-in-php by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
PHP는 이미지를 MySQL에서 MySQL의 BLOB를 표시 [중복] (0) | 2018.09.06 |
---|---|
다차원 배열의 모든 열 값을 합하는 방법은 무엇입니까? (0) | 2018.09.06 |
PHP 세션이 이미 시작되었는지 확인하십시오. (0) | 2018.09.06 |
htmlspecialchars와 mysql_real_escape_string은 PHP 코드를 주입으로부터 안전하게 유지합니까? (0) | 2018.09.06 |
왜 PHP는 문자열을 0으로 간주합니까? (0) | 2018.09.06 |