PHP: як отримати POST JSON

463

Від автора: коли я працював в Mozilla, мені потрібно було написати транзакцію аутентифікації типу OAuth між Bugzilla і Phabricator. Ця задача змусила мене повернутися в світ PHP, до мови, який я давно не використовую (з версії ~5.2). З допомогою PHP я лише створюю теми і плагіни на WP для свого блогу. Повернення до мови, який не практикувався роками, здається чимось абсолютно новим. Починаєш помічати шаблони і методи, про які й не здогадувався раніше.

Де-то в транзакції аутентифікації Phabricator повинен був отримувати POST-запит з JSON. Я думав, що дані виявляться в глобальному масиві $_POST, однак мінлива була порожня. І як же мені отримати POST-дані? Отримати POST JSON в PHP можна з допомогою наступних рядків:

# Отримати JSON як рядок
$json_str = file_get_contents(‘php://input’);
# Отримати об’єкт
$json_obj = json_decode($json_str);

Раніше я думав, що функція file_get_contents уміє витягувати вміст лише з локальних файлів і url’ов. Однак з допомогою спеціального адреси php://input з її допомогою можна отримувати JSON-дані у вигляді рядка. Для перекладу JSON-рядки в робочий об’єкт/масив можна використовувати json_decode.

В принципі, зрозуміло, чому JSON не обробляється в $_POST, адже у нього немає ключа. Нам потрібно просто отримати дані, а зробити це можна за допомогою php://input. Можете перевірити обробку JSON+POST в cURL.