peter
peter

Reputation:

How to access POST data in PHP?

I need to write a PHP page which would accept an XML document sent over a POST request like this:

POST /mypage.php HTTP/1.1
Host: myhost.com
Content-Type: application/xml
Content-Length: ...

<?xml version="1.0" encoding="utf-8"?>
<data>
 ...
</data>

This is not data from some HTML form, just a plain XML document.

How can I access this XML in my PHP code?

Upvotes: 26

Views: 25692

Answers (7)

fidazik
fidazik

Reputation: 433

Any of these would work:

$HTTP_RAW_POST_DATA variable or the php://input stream.

However, for the

$HTTP_RAW_POST_DATA variable

to work, you might need to change .ini setting in your configuration file

Upvotes: 0

Rob Di Marco
Rob Di Marco

Reputation: 44932

You probably want to use the PHP input. Something like

$postText = trim(file_get_contents('php://input'));

Upvotes: 1

Ionuț G. Stan
Ionuț G. Stan

Reputation: 179108

$HTTP_RAW_POST_DATA

or

php://input

Upvotes: 1

Alekc
Alekc

Reputation: 4770

If you use print_r($_POST); you will be able to see what you got. Unless i'm missing something... Edit: nvm, totaly forgot about Raw Data :/

Upvotes: -2

Bob Gettys
Bob Gettys

Reputation: 1202

http://us.php.net/manual/en/reserved.variables.httprawpostdata.php

$HTTP_RAW_POST_DATA should be available assuming the content-type of the request was not multipart/form-data

Upvotes: 2

phihag
phihag

Reputation: 287755

Read from php://input. For example, you could use:

$rawdata = file_get_contents('php://input');

or

$rootNode = simplexml_load_file('php://input');

The alternative, using $HTTP_RAW_POST_DATA, works, too - but it's slower and needs the PHP configuration always_populate_raw_post_data.

Upvotes: 39

Gumbo
Gumbo

Reputation: 655139

Try the $HTTP_RAW_POST_DATA variable or the php://input stream.

Upvotes: 4

Related Questions