Переменная $_POST из запроса содержит необязательное значение вместо строки в PHP [закрыто]Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Переменная $_POST из запроса содержит необязательное значение вместо строки в PHP [закрыто]

Сообщение Anonymous »

Сценарий использования: пользователь/клиент отправляет запрос на сервер, на котором работает PHP. Я пытаюсь написать код PHP на сервере, например. конечная точка API для обработки запроса.
У меня есть рабочий PHP-код, который извлекает веб-токен JSON (в виде строки) из запроса 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"
Обратите внимание, что префиксная строка (414) добавляется var_dump. Если я просто отображаю переменную $jwt, она отображает строку сама по себе без этого префикса.
Эта строка веб-токена JSON может быть успешно декодирована для аутентификации пользователя.
Теперь мне нужно написать код для другой конечной точки для клиентских запросов, которая позволит клиенту отправлять файл изображения и метаданные. В этом случае для поддержки передачи файлов пользователь/клиент должен указать в запросе тип контента multipart/form-data. Однако php/input не работает с составными данными, и единственный способ получить метаданные — из переменной $_POST. В этом случае результирующая строка при извлечении и отображении с помощью var_dump() обозначается var_dump как необязательная.

Код: Выделить всё

$jwt = $_POST['jwt'];
var_dump($jwt);
Это дает:

Код: Выделить всё

"Optional(414)("hlMox0-LOTS OF CHARACTERS-za2b")";
И снова var_dump добавляет префикс Необязательный(414). Если я просто отображаю значение, то оно идентично строке в первом случае.
Хотя эта строка при отображении выглядит идентичной приведенной выше, я не могу декодировать эту переменную. Var_dump предполагает, что хотя строки и повторяют одно и то же, они разные. Вторая версия является «дополнительной». Для тех, кто не знаком с термином «необязательный», он используется во многих языках программирования для обозначения переменной, которая явно может иметь либо нулевое значение, либо нет. Очевидно, PHP распознает эту идею с помощью функции var_dump. Однако я не могу найти ничего более подробного по этому вопросу в документации.
Почему строка, доступ к которой осуществляется через переменную $_POST, может отличаться от строки, доступ к которой осуществляется через php://input ?
Поскольку var-dump определяет разницу между необязательным значением и строкой, почему доступ к данным через $_POST дает необязательное значение вместо строки?
В конечном итоге как мне преобразовать $_POST['jwt'], полученный из $_POST, в обычную строку. Что с ним может быть не так?

Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-in-php
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»