불행히도 @EatOng 의이 답변은 올바르지 않습니다 . 그의 대답을 읽은 후 나는 오류가 나타나지 않도록하기 위해 모든 AJAX 요청에 더미 변수를 추가했습니다 (일부는 이미 일부 필드가 있더라도).
하지만 방금 PHP에서 같은 오류가 발생했습니다. 일부 POST 데이터 (더미 변수와 함께 다른 필드도 있음)를 보냈 음을 두 번 확인했습니다. PHP 버전 5.6.25
, always_populate_raw_post_data
값은로 설정됩니다 0
.
또한 application/json
요청을 보낼 때 PHP가 요청을 채우지 $_POST
않고 json_decode()
.NET에서 액세스 할 수있는 원시 POST 요청 본문에 있어야합니다 php://input
.
@ rr- 인용의 대답으로,
0 / off / whatever : BC 동작 ( 콘텐츠 유형이 등록되지 않았 거나 요청 메서드가 POST 이외의 경우 채우기 ).
요청 방법이 확실한 POST이기 때문에 PHP가 내 Content-Type: application/json
요청을 인식하지 못했거나 좋아하지 않았던 것 같습니다 (다시 말하지만, 왜 ??).
옵션 1:
여기에 제시된 많은 답변에 따라 php.ini
파일을 수동으로 편집하고 범인 변수를로 설정 -1
하십시오.
옵션 2 :
이것은 PHP 5.6 버그입니다. PHP를 업그레이드하십시오.
옵션 3 :
@ user9541305가 여기에서 대답했듯이 Content-Type
AJAX 요청을 변경 application/x-www-form-urlencoded
하거나 POST 된 본문에서 multipart/form-data
PHP 를 채우게 됩니다 $_POST
(PHP가 해당 content-type
헤더를 좋아 / 인식하기 때문입니다 !?).
옵션 4 : 마지막 수단
글쎄, 나는 Content-Type
AJAX의 변경을 원하지 않았으며 디버깅에 많은 문제를 일으킬 것입니다. (Chrome DevTools는 JSON 요청의 POST 된 변수를 멋지게 봅니다.)
나는 클라이언트를 위해 이것을 개발 중이며 최신 PHP를 사용하거나 php.ini 파일을 편집하도록 요청할 수 없습니다. 최후의 수단으로로 설정되어 있는지 확인하고 설정되어 0
있으면 php.ini
PHP 스크립트 자체에서 파일을 편집합니다 . 물론 사용자에게 아파치를 다시 시작하도록 요청해야합니다. 부끄러운 일입니다!
다음은 샘플 코드입니다.
<?php
if(ini_get('always_populate_raw_post_data') != '-1')
{
// Get the path to php.ini file
$iniFilePath = php_ini_loaded_file();
// Get the php.ini file content
$iniContent = file_get_contents($iniFilePath);
// Un-comment (if commented) always_populate_raw_post_data line, and set its value to -1
$iniContent = preg_replace('~^\s*;?\s*always_populate_raw_post_data\s*=\s*.*$~im', 'always_populate_raw_post_data = -1', $iniContent);
// Write the content back to the php.ini file
file_put_contents($iniFilePath, $iniContent);
// Exit the php script here
// Also, write some response here to notify the user and ask to restart Apache / WAMP / Whatever.
exit;
}