[php] `$ HTTP_RAW_POST_DATA` 지원 중단에 대한 경고

PHP 5.6.0으로 전환했는데 이제 모든 곳에서 다음과 같은 경고가 표시됩니다.

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will
be removed in a future version. To avoid this warning set
'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream
instead. in Unknown on line 0

Warning: Cannot modify header information - headers already sent in Unknown on line 0

좋아, 사용되지 않는 기능에 의존합니다. 내가하지 않는 것을 제외하고 !

  1. 내 스크립트에서이 변수를 사용한 적이 없습니다. 솔직히 나는 그것이 존재한다는 것을 전혀 몰랐다.
  2. phpinfo()always_populate_raw_post_data0 (비활성화)으로 설정 되었음을 보여줍니다 . 그래서 무슨 일이 일어나고 있습니까?

이 값을 -1로 설정하여 “경고를 방지”하고 싶지 않습니다. 이것은 경고를 숨길 뿐이며 여전히 더 이상 사용되지 않는 구성이 있습니다. 소스에서 문제를 해결하고 PHP가 HTTP_RAW_POST_DATA채우기가 켜져 있다고 생각하는 이유를 알고 싶습니다 .



답변

오류 메시지에 대한 나의 이해가 잘못된 것으로 밝혀졌습니다. 나는 그것이 매우 열악한 단어 선택을 특징으로한다고 말하고 싶습니다. 인터넷 검색을 통해 다른 사람이 내가 그랬던 것처럼 메시지를 오해하는 것으로 나타났습니다 . PHP 버그 # 66763을 참조하십시오 .

전혀 도움이되지 않은 후 “이것은 RM이 원했던 방식입니다.” Mike의 해당 버그에 대한 응답으로 Tyrael은 “-1″로 설정한다고 경고 만 표시되는 것이 아니라고 설명합니다. 그것은 않습니다 옳은 일을 완전히 범인 변수를 채우는 비활성화 즉,. 0으로 설정하면 일부 상황에서 여전히 데이터가 채워집니다. 나쁜 디자인에 대해 이야기하십시오! PHP RFC 를 인용하려면 :

always_populate_raw_post_data INI 설정을 변경하여 2 개 대신 3 개 값을 허용합니다.

  • -1 : 마스터의 행동; $ GLOBALS [HTTP_RAW_POST_DATA]를 채우지 마십시오.
  • 0 / off / whatever : BC 동작 (콘텐츠 유형이 등록되지 않았거나 요청 방법이 POST가 아닌 경우 채우기)
  • 1 / on / yes / true : BC 동작 (항상 $ GLOBALS [HTTP_RAW_POST_DATA] 채우기)

예, -1로 설정하면 메시지에서 말한 것처럼 경고를 피할 수있을뿐만 아니라 마침내이 변수를 채우지 못하게 됩니다.


답변

이 오류를 발견 할 때까지 시간이 좀 걸렸습니다. 이 문제에 부딪 힐 수있는 모든 사람에게 내 대답을 올려주세요.

이 오류는 빈 POST 요청을 보내고 있음을 의미합니다. 이 오류는 일반적으로 매개 변수가 전달되지 않은 HTTPRequest에서 발견됩니다. 이 오류를 방지하려면 php.ini를 변경하지 않고 POST에 매개 변수를 항상 추가 할 수 있습니다.

처럼:

$.post(URL_HERE
    ,{addedvar : 'anycontent'}
    ,function(d){
       doAnyHere(d);
    }
    ,'json' //or 'html','text'
);


답변

nginx 서버 (DigitalOcean)에서 동일한 문제가 발생했습니다.로 로그인 root하여 파일을 수정 하기 만하면 됩니다 /etc/php5/fpm/php.ini.

always_populate_raw_post_dataI first run으로 줄을 찾으려면 다음을 수행하십시오 grep.

grep -n 'always_populate_raw_post_data' php.ini

그 라인을 반환 704

704:;always_populate_raw_post_data = -1

그런 다음 편집기로 php.ini해당 줄을 엽니 다 vi.

vi +704 php.ini

세미콜론을 제거하여 주석 처리를 제거하고 파일을 저장하십시오. :wq

마지막으로 서버를 재부팅하면 오류가 사라졌습니다.


답변

WAMP 를 사용하는 경우 …

속성 always_populate_raw_post_data을 추가하거나 주석 처리를 제거 php.ini하고 값을로 설정해야합니다 -1. 제 경우 php.ini에는 다음 위치에 있습니다.

C:\wamp64\bin\php\php5.6.25\php.ini

..하지만 여전히 경고를 받고 있다면

또한 다음 always_populate_raw_post_data = -1에서 설정해야합니다 phpForApache.ini.

C:\wamp64\bin\php\php5.6.25\phpForApache.ini

이 파일을 찾을 수없는 경우 브라우저 창을 열고 다음으로 이동하십시오.

http://localhost/?phpinfo=1

Loaded Configuration File 키 값을 찾으십시오 . 내 경우 php.iniWAMP 에서 사용하는 위치는 다음과 같습니다.

C:\wamp64\bin\apache\apache2.4.23\bin\php.ini (C : \ wamp64 \ bin \ php \ php5.6.25 \ phpForApache.ini에 대한 기호 링크)

마지막으로 WAMP를 다시 시작하거나 모든 서비스 다시 시작을 클릭하십시오.


답변

.htaccess파일을 사용할 수없는 경우 루트 폴더에이 코드 줄을 지나서 만듭니다.

이것을 .htaccess파일에 넣으십시오 (API에 대해 잘 작동하는지 테스트 됨)

<IfModule mod_php5.c>
    php_value always_populate_raw_post_data -1
</IfModule>


답변

주석 해제

always_populate_raw_post_data = -1 

php.ini (line # 703)에서 APACHE 서비스를 다시 시작하면 어쨌든 메시지에서 제거하는 데 도움이됩니다.

; Always populate the $HTTP_RAW_POST_DATA variable. PHP's default behavior is
; to disable this feature and it will be removed in a future version.
; If post reading is disabled through enable_post_data_reading,
; $HTTP_RAW_POST_DATA is *NOT* populated.
; http://php.net/always-populate-raw-post-data
; always_populate_raw_post_data = -1


답변

받아 들인 대답이 제안한대로 php.init를 변경 한 후에도 여전히이 문제로 어려움을 겪고있는 사람을 위해. POST매개 변수없이 ajax 청원을 할 때 오류가 발생하기 때문에 당신이해야 할 일은 send 메소드를 GET.

var xhr = $.ajax({
   url:  url,
   type: "GET",
   dataType: "html",
   timeout: 500,
});

POST어떤 이유로 든 메소드를 유지하려는 경우 또 다른 옵션 은 ajax petititon에 빈 JSON 객체를 추가하는 것입니다.

var xhr = $.ajax({
   url:  url,
   type: "POST",
   data: {name:'emtpy_petition_data', value: 'empty'}
   dataType: "html",
   timeout: 500,
});