@zzzmaikzzz
Junior-web

Расскажите подробно про php://input, как пользоваться?

Помогите разобраться, а то на php.net очень скупо описано. Если можно, то с примером или хорошая ссылка на доступное понимание.
Главное понять - зачем и почему, как и для чего :)
  • Вопрос задан
  • 13236 просмотров
Решения вопроса 1
php://input возвращает все необработанные данные после HTTP-заголовков запроса, независимо от типа контента.

Данные, могут быть:
  • application/x-www-form-urlencoded ( application/x-www-form-urlencoded тип application/x-www-form-urlencoded для простых форм- application/x-www-form-urlencoded ) или
  • multipart/form-data-encoded (в основном multipart/form-data-encoded для загрузки файлов)

Это связано с тем, что это единственные типы контента, которые должны поддерживаться браузерами. Поэтому сервер и PHP традиционно не ожидают получения какого-либо другого типа контента (что не означает, что они не могли бы).

Если вы просто отправляете POST-ом обычную HTML-форму, запрос выглядит примерно так:
POST /page.php HTTP/1.1
key1=value1&key2=value2&key3=value3

Но если вы много работаете с Ajax, может понадобиться обмен более сложными данными с типами (строка, int, bool) и структурами (массивы, объекты), поэтому в большинстве случаев JSON является лучшим выбором. Но запрос с JSON-полезной нагрузкой выглядел бы примерно так:
POST /page.php HTTP/1.1
{"key1":"value1","key2":"value2","key3":"value3"}

Теперь содержимое будет application/json (или, по крайней мере, ни один из вышеперечисленных), так что $_POST -wrapper из PHP не знает, как с этим справиться (пока).

Данные всё еще там, вы просто не можете получить к нему доступ через $_POST. Поэтому вам нужно получить его с "сыром" виде помощью file_get_contents('php://input') (если он не закодирован в формате multipart/form-data).

Это также способ доступа к XML-данным или любому другому нестандартному типу контента.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
artem90
@artem90
TeamLead, Developer
var_dump(file_get_contents("php://input"));
Ответ написан
Комментировать
@justpusher
При консольном запуске PHP php://input представляет stdin, и с помощью него можно писать консольные команды, обрабатывающие ввод.
Особенно удобно его использовать в сочетании с SplFileObject для построчного чтения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы