PHP での JSON POST データの読み取り
JSON 形式で POST データを受信する場合、PHP で正しく取得して解析することが重要です。このシナリオでは、JSON POST データの不適切な処理が原因で問題が発生しました。
これを解決するには、$_POST の使用を他のメソッドに置き換えて、生の入力を読み取り、JSON としてデコードします。これを実現する方法は次のとおりです:
受信ページの PHP を変更:
$inputJSON = file_get_contents('php://input'); $input = json_decode($inputJSON, TRUE);
このコードは、生の入力を JSON として読み取り、配列に解析します。 $input でアクセスできます。
の CURL コードを更新しましたテスト:
応答で述べたように、JSON 通信では CURLOPT_POSTFIELDS を JSON エンコードされた文字列とともに使用する必要があります。変更されたコードは次のとおりです。
$data_string = json_encode($data); $curl = curl_init('http://webservice.local/'); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string) )); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_string); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($curl); $result = json_decode($result); var_dump($result);
このコードは、JSON コンテンツを示すように HTTP ヘッダーを正しく設定し、データを JSON として送信する前にエンコードします。
追加メモ:
header('Content-type: application/json'); が確実に行われることが重要です。この行は、Web サービス ページに 1 回だけ表示されます。複数回呼び出される場合、適切なヘッダー情報の送信に問題が発生する可能性があります。
以上がPHP で JSON POST データを正しく読み取って解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。