残念ながら、この@EatOngによる回答は正しくありません。彼の答えを読んだ後、エラーが表示されないことを確認するために、私が発射していたすべてのAJAX要求にダミー変数を追加しました(それらのいくつかにすでにいくつかのフィールドがあったとしても)。
しかし、ちょうど今、私はPHPから同じいまいましいエラーに出くわしました。いくつかのPOSTデータ(ダミー変数と共に他のいくつかのフィールドも)を送信したことを二重に確認しました。PHPバージョン5.6.25
。always_populate_raw_post_data
値はに設定され0
ます。
また、application/json
リクエストを送信しているので、PHPはにデータを入力していません$_POST
。代わりにjson_decode()
、からアクセス可能な生のPOSTリクエスト本文を入力する必要がありますphp://input
。
@ rr-の回答として、
0 / off / whatever:BCの動作(content-typeが登録されていない場合、またはリクエストメソッドが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
またはmultipart/form-data
移入PHPを行います$_POST
投稿者の体から(PHPが好きなので、/それらの認識content-type
ヘッダを!?)。
オプション4:最後の手段
さて、Content-Type
AJAX を変更したくなかったので、デバッグに多くの問題が発生しました。(Chrome DevToolsは、JSONリクエストのPOSTされた変数を適切に表示します。)
私はクライアントのためにこれを開発しており、最新のPHPを使用するように依頼することも、php.iniファイルを編集することもできません。最後の手段として、設定され0
ているかどうかを確認し、設定されている場合php.ini
は、PHPスクリプト自体でファイルを編集します。もちろん、ユーザーに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;
}