2010-09-09 18 views
6

Sto scrivendo un servizio proxy per memorizzare nella cache le query che la mia app mobile fa al webservice. (come un uomo nel mezzo)PHP: file XML a stringa che è più veloce file_get_contents o simplexml_load_file con asXML()

L'attività del sito proxy che ho creato è passare la query che ottiene dall'app su webservice di terze parti e salvare la risposta dal webservice di terze parti come file XML e per tutti i successivi richiede la stessa query letta dal file XML e fornisce la risposta (basicamente il caching della risposta -utilizzando Php, curl e simplexml_load_file).

Ora la mia domanda è - Qual è il modo consigliato di leggere un file xml e restituire la stringa.

opzione 1: $ contenuto = file_get_contents ($ nome file); echo $ contenuti;

Opzione 2: $ xml = simplexml_load_file ($ filename) echo $ XML> asXml();

+0

È responsabilità del tuo script php memorizzare il file xml sul proxy? (in tal caso la mia risposta riguardo a readfile() non si adatta completamente ;-)) – VolkerK

risposta

4
readfile($filename); 

file_get_contents/eco prima legge l'intero contenuto nel processo php memoria e quindi invia al flusso di output. Non è necessario avere l'intero contenuto in memoria se tutto ciò che si vuole fare è id per inoltrarlo.
simplexml_load_file() non solo legge l'intero contenuto in memoria, ma analizza anche il documento che richiede più tempo. Di nuovo non necessario se non si desidera ottenere dati specifici dal documento o testarlo/modificarlo.

readfile() invia il contenuto direttamente al flusso di output e può farlo "in qualsiasi modo sia visibile". Cioè se supportato in può utilizzare file mappati in memoria, in caso contrario può almeno leggere il contenuto in blocchi più piccoli.

+0

sì, è mia responsabilità archiviare il file ma che viene eseguito da Arriccia usando il codice come \t $ ch = curl_init ($ richiesta); \t \t $ fp = fopen ($ filename, "w"); \t curl_setopt ($ ch, CURLOPT_FILE, $ fp); \t curl_setopt ($ ch, CURLOPT_HEADER, 0); \t curl_exec ($ ch); \t curl_close ($ ch); – gforg

+0

ah ok, quindi utilizzare readfile() a meno che non si desideri elaborare/modificare il documento. – VolkerK

+0

grazie. Readfile ha funzionato e dopo il tuo suggerimento ho fatto alcune ricerche e tutti i punti per l'utilizzo di readfile per il mio scenario. Grazie! – gforg

Problemi correlati