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_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=1Loaded 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,
});
