Ответ 1
- $_ POST содержит URL-кодированные (прикладные/www-url-закодированные) переменные, которые отправляются на ваш script, и PHP их декодирует для вас. Вы используете это, когда имеете дело с данными HTML FORM.
- file_get_contents ( "php://input" ) - получает необработанные данные POST, и вам нужно использовать это при написании API-интерфейсов и необходимости XML/JSON/... input, которые не могут быть декодированы до $_POST с помощью PHP.
- $HTTP_RAW_POST_DATA - теоретически это то же самое, что и выше, но зависит от php.ini.
Я всегда использую метод # 2 вместо # 3, когда мне нужно не приложение/www-url-encoded.