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
좋아, 사용되지 않는 기능에 의존합니다. 내가하지 않는 것을 제외하고 !
- 내 스크립트에서이 변수를 사용한 적이 없습니다. 솔직히 나는 그것이 존재한다는 것을 전혀 몰랐다.
phpinfo()
always_populate_raw_post_data
0 (비활성화)으로 설정 되었음을 보여줍니다 . 그래서 무슨 일이 일어나고 있습니까?
이 값을 -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_data
I 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.ini
WAMP 에서 사용하는 위치는 다음과 같습니다.
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,
});