2010-09-09 12 views
6

Estoy escribiendo un servicio proxy para almacenar en caché las consultas que mi aplicación móvil hace al servicio web. (Como un hombre en el medio)PHP: archivo XML a cadena que es más rápido file_get_contents o simplexml_load_file con asXML()

La tarea del sitio proxy que he creado es pasar la consulta que recibe de la aplicación al servicio web de terceros y guardar la respuesta del servicio web de terceros como un archivo XML y para todas las subsiguientes pide la misma consulta de lectura del archivo XML y proporciona la respuesta (básicamente almacenando en caché la respuesta, utilizando Php, curl y simplexml_load_file).

Ahora mi pregunta es - ¿Cuál es la forma recomendada de leer un archivo xml y devolver la cadena.

opción 1: $ contents = file_get_contents ($ filename); echo $ contents;

opción 2: $ xml = simplexml_load_file ($ archivo) echo $ xml-> asXML();

+0

¿Es su script php la responsabilidad de almacenar el archivo xml en el proxy? (en ese caso, mi respuesta con respecto a readfile() no encaja del todo ;-)) – VolkerK

Respuesta

4
readfile($filename); 

file_get_contents/eco primero lee todo el contenido en el proceso de php la memoria y lo envía a la secuencia de salida. No es necesario tener todo el contenido en la memoria si todo lo que quiere hacer es id para reenviarlo.
simplexml_load_file() no solo lee todo el contenido en la memoria, sino que también analiza el documento, lo que lleva más tiempo. De nuevo, es innecesario si no desea obtener datos específicos del documento o probarlos/modificarlos.

readfile() envía el contenido directamente a la secuencia de salida y puede hacerlo "de la forma en que se ajuste". Es decir. si es compatible con, puede utilizar archivos mapeados en memoria, si no puede al menos leer los contenidos en trozos más pequeños.

+0

sí, es mi responsabilidad guardar el archivo, pero eso se hace con el código usando \t $ ch = curl_init ($ request); \t \t $ fp = fopen ($ nombre de archivo, "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, luego use readfile() a menos que desee procesar/alterar el documento. – VolkerK

+0

gracias. Readfile funcionó y después de su sugerencia hice algunas búsquedas y todos los puntos para usar readfile para mi escenario. ¡Gracias! – gforg

Cuestiones relacionadas