PHP lee XML publicado en mi página de PHP

Tengo una página PHP que necesita leer XML publicado en esta página. La publicación se realizará por tipo de contenido: application / xml (no application / x-www-form-urlencoded).

Por ejemplo, mi página se llama test.php, otro servidor publicará el XML en esta página (test.php). Mi pregunta es ¿cómo puedo crear un código en esta página test.php para leer el xml publicado en él?

ACTUALIZAR

Primero, muchas gracias por las respuestas y el tiempo dedicado a ayudarme. Trataré de explicar mejor mi problema. Estoy creando un Messenger Robot. Estoy usando una plataforma llamada “botplataform”. Más información aquí: http://code.google.com/p/botplatform/wiki/RobotServiceHostedOnWebServer

Básicamente, esta plataforma funciona así: escribo un mensaje en mi mensaje instantáneo (en este caso MSN), el mensaje que escribí se envía a mi página PHP mediante un XML POST. La información de cómo esta plataforma hace eso es esta:

“El tipo de contenido de solicitud posterior es application / xml (no application / x-www-form-urlencoded). Por lo tanto, debe leer todo el cuerpo como datos xml, no podría leer ningún parámetro”.

Mi archivo PHP necesita “leer” este XML para saber qué escribe el usuario en MSN. Y les devuelvo mi respuesta a la plataforma que envía el mensaje al usuario.

Puedo enviar una respuesta a la plataforma, pero no puedo leer el XML que el botplataform envía a mi archivo php.

Si desea probar, solo ad mainframe (at) xquad (punto) com (punto) br a su MSN una charla con él. Solo responderá a “Em manutencao” Pero funciona, el php crea un XML y lo hace eco.

Muchas gracias, Flávio

Puede usar $HTTP_RAW_POST_DATA ( entrada manual ) o la secuencia de php://input .

Del manual :

php://input permite leer datos POST sin POST . Es una alternativa menos intensiva en memoria a $HTTP_RAW_POST_DATA y no necesita ninguna directiva php.ini especial. php://input no está disponible con enctype="multipart/form-data" .

Actualización : tal vez algunos ejemplos pueden ayudar.

Aquí hay un script simple al que llamaré input.php :

 < ?php echo file_get_contents('php://input'); ?> 

Usando cURL desde la línea de comando:

curl -d "test" http://localhost/input.php

E incluso configurando el tipo de contenido:

curl -H "Content-Type: application/xml" -d ...

El resultado es (como se esperaba): test

Sin embargo, si intenta subir un archivo, que normalmente configuraría el enctype en multipart/form-data (nota, no el content-type ), no obtendrá nada.

Archivo de muestra ( test.xml ):

  test  

Subiendo archivo usando cURL:

curl -F "name=@test.xml" http://localhost/input.php

curl -F "name=@test.xml;type=application/xml" http://localhost/input.php

Ambos no producirán nada desde input.php . Sin embargo, si modifica la secuencia de comandos para ver la matriz $_FILES (o como quiera que procese las cargas normales a PHP), obtendrá los contenidos.

Llamaré al nuevo script form.php :

 < ?php echo file_get_contents($_FILES['name']['tmp_name']); ?> 

Una carga de archivo con curl:

curl -F "name=@test.xml;type=application/xml" http://localhost/form.php

test.xml los contenidos de test.xml .

Entre estos dos métodos, debe poder manejar el archivo POST o los datos del otro servidor.

Segunda actualización : Forzar la application/xml esta manera evitará que $_FILES funcione, pero luego vuelves a la php://input trabajando de nuevo:

curl -F "name=@test.xml" -H "Content-Type: application/xml"