tags:

views:

1418

answers:

6

Hello,

I need to write PHP page which would accept XML document sent over POST request. Request itself looks 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 plain XML document. I am not sure how to access this XML in my PHP code. Any hints? (Pointer to correct functions in manual is fine)

(I am sorry if this is too trivial... I cannot find correct functions in manual. Normally I don't do PHP)

+3  A: 

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

Gumbo
+8  A: 

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.

phihag
you could also do simplexml_load_file("php://input");
Tom Haigh
tomhaigh: Yes, I instinctively avoid that function due to remembering it uses its own subsystem. Turns out, this is not the case anymore as of php 5.1.
phihag
+2  A: 

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

firebird84
A: 

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 :/

Alekc
$_POST only contains form data, this won't be form data as it has no variable names associated with it. If for example you post a SOAP packet to a web service, the HTTP Post payload will simply contain XML without any variables attached.
firebird84
+1  A: 

$HTTP_RAW_POST_DATA

or

php://input

Ionuț G. Stan
+1  A: 

You probably want to use the PHP input. Something like

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