file_get_contents("php://input")
또는 $HTTP_RAW_POST_DATA
-JSON 요청의 본문을 얻는 데 어느 것이 더 낫습니까?
그리고 클라이언트 측을 사용할 때 JSON 데이터를 전송하려면 어떤 요청 유형 ( GET
또는 POST
)을 사용해야 XmlHTTPRequest
합니까?
내 질문은이 답변에서 영감을 얻었습니다.
컬을 사용하여 JSON을 PHP에 게시하는 방법
그 대답에서 인용하십시오.
file_get_contents("php://input")
어쨌든 실제로 http multipart 양식 데이터를 처리하지 않기 때문에 프로토콜 관점 에서 실제로 더 정확합니다.
답변
실제로 php://input
원시 POST 데이터를 읽을 수 있습니다.
$ HTTP_RAW_POST_DATA에 대한 메모리 집약적 인 대안이며 특별한 php.ini 지시문이 필요하지 않습니다 .
php://input
에서는 사용할 수 없습니다 enctype="multipart/form-data"
.
참조 : http://php.net/manual/en/wrappers.php.php
답변
php : // input은 요청 본문에서 원시 데이터를 읽을 수 읽기 전용 스트림입니다. POST 요청의 경우 $ HTTP_RAW_POST_DATA 대신 php : // input을 사용하는 것이 좋습니다 . 특수 php.ini 지시문에 의존하지 않기 때문 입니다. 또한 $ HTTP_RAW_POST_DATA가 기본적으로 채워지지 않은 경우 always_populate_raw_post_data를 활성화하는 것보다 잠재적으로 메모리 집약적 인 대안입니다.
답변
file_get_contents (php : // input)-원시 POST 데이터를 가져오고 API를 작성하고 PHP로 $ _POST로 디코딩 할 수없는 XML / JSON / … 입력이 필요할 때 이것을 사용해야합니다
.
포스트 JSON 문자열로 보내기
<input type="button" value= "click" onclick="fn()">
<script>
function fn(){
var js_obj = {plugin: 'jquery-json', version: 2.3};
var encoded = JSON.stringify( js_obj );
var data= encoded
$.ajax({
type: "POST",
url: '1.php',
data: data,
success: function(data){
console.log(data);
}
});
}
</script>
1. PHP
//print_r($_POST); //empty!!! don't work ...
var_dump( file_get_contents('php://input'));
답변
요청을 보내는 방법에는 일반적인 규칙이 적용됩니다. 요청이 정보 검색 (예 : 부분 검색 ‘힌트’결과 또는 표시 할 새 페이지 등) 인 경우 GET을 사용할 수 있습니다. 전송되는 데이터가 무언가 변경 (데이터베이스 업데이트, 레코드 삭제 등) 요청의 일부인 경우 POST를 사용합니다.
서버 측에서는 전체 post / get 데이터 블록을 한 번에 가져오고 싶지 않다면 원시 입력을 사용할 이유가 없습니다. 평소처럼 _GET / _POST 배열을 통해 원하는 특정 정보를 검색 할 수 있습니다. MooTools / jQuery와 같은 AJAX 라이브러리는 실제 AJAX 호출을 수행하고 양식 데이터를 적절한 형식으로 인코딩하는 어려운 부분을 처리합니다.
답변
JSON 데이터의 경우 “application / json”콘텐츠 유형으로 게시하는 것이 훨씬 쉽습니다. GET을 사용하는 경우 매개 변수에서 JSON을 URL 인코딩해야하며 다소 지저분합니다. 또한 POST를 수행 할 때 크기 제한이 없습니다. 매우 제한된 경우 GET의 크기 (최대 4K).
답변
두 번째 질문은 간단합니다. GET은 서버와 브라우저 측 모두에서 크기 제한이 1 ~ 2 킬로바이트이므로 POST를 통해 전송해야하는 모든 종류의 더 많은 양의 데이터가 필요합니다.