شرح صفوف ومحتوى الفقرة
عندما يرسل العميل طلباً بنوع محتوى Content-Type: application/json، لا يملأ PHP مصفوفة $_POST تلقائياً! بل يجب قراءة جسم الطلب الخام عبر مجرى الإدخال php://input.
- تُملأ مصفوفة
$_POSTفقط عندما يكون الطلب مرسلاً بترميز النماذج التقليديةurlencodedأوmultipart/form-data. - اقرأ نص JSON الخام من جسم الطلب باستخدام
$raw = file_get_contents("php://input"). - حلل النص بأمان داخل كتلة
try / catch (JsonException $e)عبر الدالةjson_decode($raw, true, 512, JSON_THROW_ON_ERROR).
يؤدي تمرير true كمعامل ثانٍ إلى إرجاع مصفوفة ترابطية، بينما يضمن العلم JSON_THROW_ON_ERROR إطلاق استثناء JsonException عند وجود خطأ نحوي في JSON.
PHP
<?php
// Simulated raw body read from file_get_contents('php://input')
$rawBody = '{"title":"REST API Guide","views":450}';
try {
$input = json_decode($rawBody, true, 512, JSON_THROW_ON_ERROR);
echo "Decoded Title : " . ($input['title'] ?? 'N/A') . "\n";
echo "Decoded Views : " . ($input['views'] ?? 0) . "\n";
} catch (JsonException $e) {
http_response_code(400);
echo "400 Invalid JSON: " . $e->getMessage() . "\n";
}