APIの受け口や、JavaScriptからの非同期通信(fetchやaxios)をPHPで受け取る際、JSON形式のデータを処理するケースがよくあります。今回は、PHPでPOST送信されたJSONデータを安全かつ確実に受け取って処理する方法を解説します。
JSONデータの送信例(クライアント側)
まずは送信側の例です。以下のJavaScriptコードでは、fetch()を使ってJSONをPOST送信しています。
fetch('receive.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: '田中太郎',
email: 'tanaka@example.com'
})
});
PHPでJSONを受け取る処理
PHP側では、通常の$_POSTではなく、php://inputから生のデータを読み取って処理します。
<?php
// 1. POSTされたJSONデータを取得
$json = file_get_contents('php://input');
// 2. JSONをデコード(連想配列として)
$data = json_decode($json, true);
// 3. データが正しくデコードされたかチェック
if (json_last_error() === JSON_ERROR_NONE) {
// 4. 必要な処理を実行
$name = isset($data['name']) ? htmlspecialchars($data['name'], ENT_QUOTES, 'UTF-8') : '';
$email = isset($data['email']) ? htmlspecialchars($data['email'], ENT_QUOTES, 'UTF-8') : '';
// 5. 応答(JSON形式で返すことも可能)
echo "受け取りました:名前={$name}、メールアドレス={$email}";
} else {
// エラーハンドリング
http_response_code(400);
echo 'JSONデータの解析に失敗しました';
}
セキュリティと注意点
- Content-Typeがapplication/jsonであることを送信側で明示する必要があります。
- 受信側ではjson_decode()の後にjson_last_error()を用いてエラーの有無を必ず確認してください。
- XSS対策のため、受け取った値は表示時にhtmlspecialchars()でエスケープしておくのが望ましいです。
まとめ
JSON形式でのデータ送信と受信は、APIやフロントエンドとの連携には欠かせない技術です。PHPでも簡潔に処理できますが、セキュリティやエラーハンドリングの基本は必ず押さえておきましょう。