Foros del Web » Programando para Internet » PHP »

simplexml_load_file error leer xml

Estas en el tema de simplexml_load_file error leer xml en el foro de PHP en Foros del Web. Hola Compañeros. Intento leer un fichero xml en local y no tengo problema. Pero al cambiar la ruta del fichero local por una URL valida ...
  #1 (permalink)  
Antiguo 02/02/2009, 08:59
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
De acuerdo simplexml_load_file error leer xml

Hola Compañeros.
Intento leer un fichero xml en local y no tengo problema. Pero al cambiar la ruta del fichero local por una URL valida de otro servidor que devuelve el mismo fichero xml, se me queda pensando hasta finalizar el tiempo de proceso.

La URL del servidor web es valida, ya que al intentar acceder a ella via web me devuelve un fichero xml
Es del tipo
http://servidor.com/web/xml/Analyse_...,605873,638882


Sinceramente es la primera vez que me pasa esto. No se por donde lo puedo pillar.

Alguna idea...?

Gracias por vuestra ayuda...

Saludos
__________________
LCervantes
--------------------------------------------
www.nerrots.es
  #2 (permalink)  
Antiguo 02/02/2009, 09:46
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: simplexml_load_file error leer xml

Hola lcervantes,

Porque no bajas el archivo a tu PC usando sockets? (fsockopen) y lo guardas en un string temporalmente y posteriormente usas simplexml_load_string para procesarlo?

Saludos
  #3 (permalink)  
Antiguo 03/02/2009, 03:25
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Hola Gator gracias por tu ayuda.
Lo probaré, pero es curioso que no me funcione.
Al fin y al cabo es un simple fichero xml generado.
Lo que si me he dado cuenta es que a lo que intento acceder es una URL que esta corriendo en una aplicación JAVA.
Tiene algo que ver?

Saludos,

Luis

Hola Gator.
No tengo mucha experiencia con sockets. Pero creo entender que accedes a un servidor y puerto.
Lo que pasa es que para acceder al XML que necesito, esta en una URL que tiene varios niveles de carpetas, al menos es lo que dice la URL en el momento de escribirla.

Por otro lado, como puede ser que al intentar acceder a la URL via navegador me carge el fichero XML en pantalla y si accedo via SimpleXML no pueda, teniendo en cuenta que el fichero local es el mismo que muestra en el navegador.

La URL a la que me suministra un xml y a la que quiero acceder es esta:
http://www.vademecum.es/servicios-we...,605873,638882

Alguna idea de porque no puedo utilizar el "simplexml_load_file"

Gracias por vuestra ayuda.

Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es

Última edición por GatorV; 03/02/2009 a las 12:14
  #4 (permalink)  
Antiguo 03/02/2009, 12:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: simplexml_load_file error leer xml

Porque simplexml_load_file carga un archivo desde el sistema de archivos local, tu al pasarle una URL rompes con eso ya que una URL no es un sistema de archivos local, con sockets es bastante sencillo hacerlo, simplemente haces un GET a esa dirección lees la respuesta (el contenido XML) y lo pasas a simplexml_load_string.

Saludos
  #5 (permalink)  
Antiguo 04/02/2009, 05:22
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Respuesta: simplexml_load_file error leer xml

Hola Gator.
He hecho lo que me has dicho. He establecido la conexioon por sockets.
He conseguido que me devuelva información. He quitado las cabeceras y dejado solo el xml, para poderlo tratar.
Pero noto lo siguiente.
- He tenido que poner un set_time_limit(0) ya que sino me daba error.
- He visto que la conexion la establece rápido, pero al intentar leer a partir de un numero de lineas me tengo que esperar 1 minuto para devolverme el resto de información. Es normal?. O es que en el fgets, he de ponerle un valor especial para que no se quede pensando.?

Código:
	$da = fsockopen($host, 80, $errno, $errstr, 15);
	if (!$da) {
	    echo "$errstr ($errno)<br />\n";
	} else {
	    //$salida = "GET / HTTP/1.1\r\n";
	    $salida = "GET $page HTTP/1.1\r\n";
	    $salida .= "Host: " . $host . "\r\n";
	    $salida .= "Connection: Close\r\n\r\n";
	
	    fwrite($da, $salida);
	    $html="";
	    $linea=0;
	    //echo date("His") ."<br>";
	    while (!feof($da)) {
			//echo date("His") ."<br>";
       		$html .= fgets($da, 50);
	    }
	    fclose($da);
	}
        echo $html

Por otro lado eso que dices de la URL he realizado prueba subiendo un fichero a una URL de otro servidor, que no sea de mi equipo. Y veo que el fichero si que lo lee y me lo interpreta perfectamente. Perdona que sea tan cabezon, pero no acabo de entender porque no me funciona. De todas maneras no he visto en el manual de PHP (simpleXML) que especifique que ha de ser un fichero local.

Gracias por tu ayuda nuevamente

Saludos,
__________________
LCervantes
--------------------------------------------
www.nerrots.es
  #6 (permalink)  
Antiguo 04/02/2009, 09:51
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: simplexml_load_file error leer xml

Lo que pasa es que internamente simplexml_load_file si tu le pasas un URL lee la directiva allow_url_fopen, si esta activada te "permite" la lectura de un URL, pero no es lo correcto ya que en la mayoria de los hostings esta desactivada esa directiva.

Por otro lado parece ser que esa es la causa del problema el JSP se tarda un poco en procesar la respuesta del XML y por eso tienes que usar el set_time_limit() para esperar más tiempo y poder recibir la respuesta.

Saludos
  #7 (permalink)  
Antiguo 09/02/2009, 02:58
Avatar de lcervantes  
Fecha de Ingreso: abril-2002
Mensajes: 137
Antigüedad: 22 años
Puntos: 0
Respuesta: simplexml_load_file error leer xml

Hola Gator.
Ante todo gracis por tu ayuda.
Al final ya lo he solucionado.
El poderlo realizar con Sockets me sirvio de mucho, y mas para darme cuenta que habia un problema en la construcción del XML.
Te explico :
- La conexion iba muy rápida.
- La lectura de xml bien,
- Pero al intentar leer el final del fichero se me quedaba esperando hasta 1 minuto.

Esto me llevo a la conclusión hablar con el proveedor del XML que es una empresa externa y se dieron cuenta que un XML leido desde navegador funcionaba perfecto pero si alguien intentaba leer un XML desde un apache, se les quedaba pensando al final. Y al parecer el problema era que el sistema esperaba un caracter de fin de fichero y/o transmisión que no enviaban. Cosa que el navegador hacia caso omiso.
Solucionaron el tema y volví a probarlo con el simplexml.
Y me funcionó a la primera.
Al paracer el problema tambien venía por aquí.

Saludos,

__________________
LCervantes
--------------------------------------------
www.nerrots.es
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:27.