Сценарий использования: пользователь (клиент) отправляет запрос на сервер, на котором работает PHP. Я пытаюсь написать код PHP на сервере, например. конечная точка API для обработки запроса.
У меня есть рабочий PHP-код, который извлекает веб-токен Java (в виде строки) из запроса JSON, где тип контента указан в запрос от клиента — application/json. Следующий код извлекает строку с помощью php://input, которая работает, пока тип содержимого запроса — application/json.
Код: Выделить всё
$jsonString = file_get_contents('php://input');
$jsonArray = json_decode($jsonString, true);
$jwt =$jsonArray['jwt'];
var_dump($jwt); //THIS IS FOR DEBUGGING. COMMENTED OUT IN PRODUCTION
Код: Выделить всё
string(414) "hlMox0-LOTS OF CHARACTERS-za2b"
string(414)
добавлен var_dump. Если я просто отображаю переменную $jwt, она отображает строку сама по себе без этого префикса.
Эта строка веб-токена Java может быть успешно декодирована для аутентификации пользователя.
Теперь мне нужно написать код для другой конечной точки для клиентских запросов, которая позволит клиенту отправлять файл изображения и метаданные. В этом случае для поддержки передачи файлов пользователь/клиент должен указать в запросе тип контента multipart/form-data. Однако php/input не работает с составными данными, и единственный способ получить метаданные — из переменной $_POST. В этом случае результирующая строка при извлечении и отображении с помощью var_dump() обозначается var_dump как необязательная.
Код: Выделить всё
$jwt = $_POST['jwt'];
var_dump($jwt);
Код: Выделить всё
"Optional(414)("hlMox0-LOTS OF CHARACTERS-za2b")";
Необязательно (414)
. Если я просто отображаю значение, то оно идентично строке в первом случае.
Хотя эта строка при отображении выглядит идентичной приведенной выше, я не могу декодировать эту переменную. Var_dump предполагает, что хотя строки и повторяют одно и то же, они разные. Вторая версия является «дополнительной». Для тех, кто не знаком с термином «необязательный», он используется во многих языках программирования для обозначения переменной, которая явно может иметь либо нулевое значение, либо нет. Очевидно, PHP распознает эту идею с помощью функции var_dump. Однако я не могу найти ничего подробного по этому вопросу в документации.
Почему строка, доступ к которой осуществляется через переменную $_POST, отличается от строки, доступ к которой осуществляется через php://input?
Поскольку var-dump определяет разницу между необязательным параметром и строкой, почему доступ к данным через $_POST дает необязательный параметр вместо строки?
В конечном итоге, как мне преобразовать $_POST['jwt'] получен из $_POST в обычную строку. Что с этим может быть не так?
Заранее спасибо за любые предложения.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-in-php
Мобильная версия