2009-03-19 16 views
25

Ho bisogno di scrivere una pagina PHP che avrebbe accettato un documento XML inviati tramite una richiesta POST come questo:Come accedere ai dati POST in 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> 

Questo non è i dati da una qualche forma HTML, solo un documento XML semplice.

Come posso accedere a questo codice XML nel mio codice PHP?

risposta

37

Leggi da php://input. Ad esempio, è possibile utilizzare:

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

o

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

L'alternativa, utilizzando $HTTP_RAW_POST_DATA, funziona, troppo - ma è più lento e ha bisogno della configurazione di PHP always_populate_raw_post_data.

+0

potresti anche fare simplexml_load_file ("php: // input"); –

+0

tomhaigh: Sì, istintivamente, evito quella funzione, perché ricordarlo usa il suo sottosistema. Risulta, questo non è più il caso a partire da php 5.1. – phihag

-2

Se si utilizza print_r ($ _ POST); sarai in grado di vedere cosa hai ottenuto. A meno che non mi manca qualcosa ... Edit: nvm, totalmente dimenticato di dati grezzi:/

+1

$ _POST contiene solo dati del modulo, non saranno dati del modulo poiché non ha nomi di variabili associati ad esso. Se ad esempio si pubblica un pacchetto SOAP su un servizio Web, il payload HTTP Post conterrà semplicemente XML senza alcuna variabile associata. –

1

Probabilmente si desidera utilizzare il PHP input. Qualcosa di simile

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

Qualcuno di questi avrebbe funzionato:

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

Tuttavia, per il

$HTTP_RAW_POST_DATA variable 

a lavorare, potrebbe essere necessario modificare le impostazioni .ini nel file di configurazione

Problemi correlati