У меня есть система, которая отправляет данные в URL-адрес без отправки пар ключ / значение, но вместо этого с использованием полезной нагрузки XML. Мне нужно прочитать эти данные XML, используя PHP под Apache, но PHP $_POST
Массив предназначен для пар ключ / значение и, следовательно, является пустым, поскольку ключи не указаны.
Я пытался читать с php://input
а также php://stdin
, но это также пусто.
Как я могу прочитать необработанные данные POST, используя PHP? Я не могу контролировать ввод, так как он генерируется сторонним приложением. Представьте, что это RESTful URL, который принимает полезную нагрузку XML.
Согласно руководству по PHP, php://input is not available with enctype="multipart/form-data".
, Если это то, что вам отправляют, PHP не позволит вам получить доступ к необработанным данным.
Один обходной путь к этой проблеме:
(источник: https://stackoverflow.com/questions/1361673/get-raw-post-data)
Добавьте это в ваш apache.conf:
<Location "/backend/XXX.php">
SetEnvIf Content-Type ^(multipart/form-data)(.*) MULTIPART_CTYPE=$1$2
RequestHeader set Content-Type application/x-httpd-php env=MULTIPART_CTYPE
RequestHeader set X-Real-Content-Type %{MULTIPART_CTYPE}e env=MULTIPART_CTYPE
</Location>
Начиная с PHP 5.4, есть также параметр ini «enable-post-data-read» (http://php.net/manual/en/ini.core.php#ini.enable-post-data-reading).
Из руководства по PHP: «Отключение этой опции приводит к тому, что $ _POST и $ _FILES не заполняются. Единственный способ чтения постданных будет через обертку потока ввода php: //. Это может быть полезно для запросов прокси или для обработки данных POST в памяти эффективная мода. «
Попробуйте отключить этот параметр и затем читать из php://input
,
Вы можете проверить, есть ли в вашем сообщении какая-либо информация, выполнив:
print_r( $_POST );
То, что вы хотели бы сделать, это отправка данных XML в ключ с именем xml
или что-то подобное, что приводит к $_POST['xml'] = 'your xml code'
РЕДАКТИРОВАТЬ:
Также было бы хорошо, если бы вы могли опубликовать код, который вы используете для создания $_POST
,