IT

$에 대한 경고HTTP_RAW_POST_DATA가 폐지되었습니다.

itgroup 2022. 11. 8. 21:46
반응형

$에 대한 경고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을 참조하십시오.

Mike가 버그에 대해 "RMs가 원했던 방식입니다."라고 대답한 후, Tyrael은 버그를 "-1"로 설정한다고 해서 사라지라는 경고만 하는 것은 아니라고 설명합니다.올바른 기능을 합니다. 즉, 범죄 변수를 완전히 채울 수 없습니다.이 값을 0으로 설정해도 일부 상황에서는 데이터가 채워지는 것으로 나타났습니다.나쁜 디자인에 대해 말해보세요!PHP RFC를 인용하려면:

always_populate_raw_post_data INI 설정을 2가 아닌 3개의 값을 받아들이도록 변경합니다.

  • - 1: 마스터 동작. $GLOBALS [HTTP_RAW_POST_DATA]를 입력하지 마십시오.
  • 0/off/what: 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 서버(Digital Ocean)에서도 같은 문제가 발생했습니다.- 로그인만 하면 됩니다.root파일을 수정합니다./etc/php5/fpm/php.ini.

와의 회선을 찾으려면always_populate_raw_post_data내가 먼저 달린다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에서는, 다음과 같습니다.

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\php5.6.25\phpForApache.ini로의 심링크)

마지막으로 WAMP를 재시작합니다(또는 모든 서비스 재시작 클릭).

이 경우,.htaccess파일을 사용할 수 없습니다. 루트 폴더에 파일을 만들고 이 코드 줄을 지나갑니다.

이거 넣어주세요.htaccessfile(API에서 정상적으로 동작하는 것을 테스트)

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

코멘트 해제

always_populate_raw_post_data = -1 

php.ini(행#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를 변경한 후에도 여전히 이 문제를 겪고 있는 사람을 위해 받아들여진 답변이 있습니다.에러가 발생하는 것은 Ajax 페티션이 다음 경유로 이루어졌을 경우입니다.POST파라미터 없이 송신 방식을 변경하기만 하면 됩니다.GET.

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

메서드를 유지하려면 다른 옵션을 선택하십시오.POST어떤 이유로든 빈 JSON 개체를 ajax petiton에 추가합니다.

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

html 폼(Post method)에서 데이터를 보낼 때 이 에러 메시지가 떴습니다.형식 인코딩을 "text/plain"에서 "application/x-www-form-urlencoded" 또는 "multipart/form-data"로 변경하면 됩니다.에러 메세지는 매우 오해의 소지가 있었습니다.

유감스럽게도 여기 @EatOn의 답변은 올바르지 않습니다.그의 답변을 읽은 후 오류가 발생하지 않도록 실행 중인 모든 AJAX 요청에 더미 변수를 추가했습니다(일부 필드가 이미 있는 경우에도 마찬가지).

그런데 방금 PHP에서 똑같은 오류가 발생했습니다.POST 데이터(더미 변수와 함께 다른 필드도)를 송신한 것을 재차 확인했습니다.PHP 버전5.6.25,always_populate_raw_post_data값은 로 설정됩니다.0.

또, 제가 보내드리는 것은application/json요청, PHP가 입력하지 않습니다.$_POST오히려 나는 해야 한다json_decode()로 POST 요구 본문, 액세스 가능php://input.

@rr-cites의 답변에 따르면

0/off/what: BC 동작(콘텐츠 유형이 등록되지 않았거나 요청 방식이 POST 이외경우 입력).

요청 방식이 POST가 확실하기 때문에 PHP가 내 것을 인식하지 못했거나 좋아하지 않았던 것 같습니다.Content-Type: application/json요청(다시, 왜?)

옵션 1:

를 편집하다php.ini수동으로 파일을 작성하고 범죄 변수를 로 설정합니다.-1여기 있는 많은 답변에서 알 수 있듯이.

옵션 2:

이것은 PHP 5.6 버그입니다.PHP를 업그레이드합니다.

옵션 3:

여기서 @user9541305가 대답했듯이Content-TypeAJAX 요청의application/x-www-form-urlencoded또는multipart/form-dataPHP가 다음을 채우도록 합니다.$_POSTPOST 본문으로부터 (PHP가 그것들을 좋아/인식하기 때문에)content-typeheaders!?)

옵션 4: 최후의 수단

음, 난 그걸 바꾸고 싶지 않았어Content-Type(Crome DevTools JSON POSTED).

클라이언트용으로 개발 중인데 최신 PHP를 사용하라고 할 수도 없고 php.ini 파일을 편집하라고 할 수도 없습니다.으로서, 이 이 마막음, 음음음음음음음음음음음음음음음음음음음음음 as as as as로 되어 있는지 하겠습니다.0경우에는 해 주세요.php.iniPHP를 사용하다물론 Apache를 재시작하도록 사용자에게 요청해야 합니다.★★★★★★★★★★★★★★★★★★!

다음은 샘플 코드입니다.

<?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;
}

N.B: PHPStorm을 사용하는 경우 enter image description here


php 서버의 문제인 줄 알고 1시간 동안 이 문제를 해결하려고 노력했지만, php.ini에서 '항상_populate_raw_post_data' '-1'로 설정했지만 아무 것도 작동하지 않았습니다.

phpStorm을 사용하는 것이 문제의 원인이라는 것을 알기 전까지는, 여기의 회답에 자세하게 기재되어 있습니다.여기서 답변은 Laze One Here 입니다.그래서 공유하려고 생각했습니다.

할 수 php.ini 파일의 코드 행을 할 수 있습니다.「 」 、 「 PHP 」 、 [ PHP 。

ini_set('always_populate_raw_post_data', -1);

더 똑같이 작동합니다.디버깅 시간을 단축할 수 있으면 좋겠습니다.

; always_parames_raw_post_data = -1 in php.init 이 행의 코멘트를 삭제합니다.always_module_raw_post_data = - 1

나는 방금 친구로부터 이 문제에 대한 해결책을 받았다.그는 말했다:세션 코드 아래에 ob_start(); 를 추가합니다.헤더 아래에 exit(); 를 추가할 수 있습니다.시도해보니 효과가 있었어요.도움이 되었으면 좋겠다

이것은 php.init 파일에 액세스할 수 없는 임대 호스팅 서버 사용자를 위한 것입니다.

언급URL : https://stackoverflow.com/questions/26261001/warning-about-http-raw-post-data-being-deprecated

반응형