2009-03-19 20 views
25

Tengo que escribir una página PHP que aceptar un documento XML enviados a través de una petición POST así:¿Cómo acceder a los datos POST en PHP?

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

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

Esto no es datos de alguna forma HTML, sólo un documento XML sin formato.

¿Cómo puedo acceder a este XML en mi código PHP?

Respuesta

37

Lea de php://input. Por ejemplo, se puede utilizar:

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

o

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

La alternativa, utilizando $HTTP_RAW_POST_DATA, obras, también - pero es más lento y necesita la configuración de PHP always_populate_raw_post_data.

+0

también podría hacer simplexml_load_file ("php: // input"); –

+0

tomhaigh: Sí, instintivamente evito esa función debido a que recuerda que usa su propio subsistema. Resulta que este ya no es el caso de php 5.1. – phihag

-2

Si utiliza print_r ($ _ POST), podrás ver lo que tienes A menos que me falta algo ... Editar: NVM, totalmente olvidado de datos en bruto:/

+1

$ _POST solo contiene datos de formulario, esto no será datos de formulario ya que no tiene nombres de variable asociados. Si, por ejemplo, publica un paquete SOAP en un servicio web, la carga útil del Post HTTP simplemente contendrá XML sin ninguna variable adjunta. –

1

Es posible que desee utilizar el PHP input. Algo así como

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

Cualquiera de estos funcionaría:

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

Sin embargo, para el

$HTTP_RAW_POST_DATA variable 

para trabajar, es posible que tenga que cambiar la configuración .ini en el archivo de configuración

Cuestiones relacionadas