Foros del Web » Programando para Internet » PHP »

Leer archivo xml con php

Estas en el tema de Leer archivo xml con php en el foro de PHP en Foros del Web. Hola a todos, Se que esta pregunta es muy recurrente y os aseguro que me he leido todos los temas, relacionados pero sin solución aparente. ...
  #1 (permalink)  
Antiguo 04/12/2011, 07:38
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Leer archivo xml con php

Hola a todos,

Se que esta pregunta es muy recurrente y os aseguro que me he leido todos los temas, relacionados pero sin solución aparente.

Estoy intentanto leer un archico xml de un servidor externo pero me salta este error:
Warning: simplexml_load_file() [function.simplexml-load-file]: I/O warning : failed to load external entity

Tiene toda la pinta de que tengo que configurar algo para poder abrir archivos de esta forma pero no he encontrado que debo hacer. Alguién me puede aconsejar?
  #2 (permalink)  
Antiguo 04/12/2011, 08:29
Avatar de linuxzero  
Fecha de Ingreso: noviembre-2011
Ubicación: Argentina
Mensajes: 778
Antigüedad: 12 años, 5 meses
Puntos: 160
Respuesta: Leer archivo xml con php

yo me fijaria 2 cosas: si el tipo mime del archivo es definitivamente un xml y tambien si tenes los permisos para leerlo.
__________________
Si todo fuera tan sencillo como un symfony cc la vida seria más fácil.
http://phpnico.wordpress.com
  #3 (permalink)  
Antiguo 04/12/2011, 08:35
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

El archivo a leer es .php pero está bien ya que tiene esto al principio:
<?xml version="1.0" encoding="utf-8"?>

Y por lo de los permisos también lo he comprobado y si que los tengo.
  #4 (permalink)  
Antiguo 04/12/2011, 09:46
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

En el phpinfo me dice que el SIMPLEXML está activado así que...ya no se que más puede ser.

El código que utilizo para leer el feed no puede ser más sencillo, ahí es imposible que esté el fallo...

Código PHP:
<?php

if (file_exists('dirección.php'))
  {
  
$xml simplexml_load_file('dirección.php');
  
var_dump($xml);
  }

else
  {
  exit(
'Error.');
  }
  
?>
  #5 (permalink)  
Antiguo 04/12/2011, 09:51
 
Fecha de Ingreso: agosto-2011
Ubicación: España
Mensajes: 445
Antigüedad: 12 años, 8 meses
Puntos: 89
Respuesta: Leer archivo xml con php

¿Podría ser por usar acento en el nombre dirección.php? ¿Qué contiene el archivo?
  #6 (permalink)  
Antiguo 04/12/2011, 11:35
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Leer archivo xml con php

Cita:
Iniciado por Arkaitz Ver Mensaje
¿Podría ser por usar acento en el nombre dirección.php? ¿Qué contiene el archivo?
Muy bien puede ser lo que indicó Arkaitz, además te recomiendo que si tu xml es generado por php y es un feed al inicio del mismo pongas

<?php
ini_set('short_open_tag',0);
header('Content-type: application/rss+xml; charset=utf-8');
?>

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #7 (permalink)  
Antiguo 04/12/2011, 11:42
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

Ya he descubieto donde está el problema. El feed que me han pasado es .php y tiene la declaración
Código PHP:
<?xml version="1.0" encoding="utf-8"?>
Pues bien si esto es lo que me produce el error al leerlo con:
Código PHP:
$xml simplexml_load_file('dirección.php'); 
Como puedo hacer para eliminarlo del feed antes de leerlo?
  #8 (permalink)  
Antiguo 04/12/2011, 11:59
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Leer archivo xml con php

Por eso te comentaba de incluir al inicio

Código PHP:
Ver original
  1. ini_set('short_open_tag',0);

para que la apertura de la declración xml <? , no sea interpretada por php como la apertura de php, para tu php siempre usa
<?php
?>

si no simplemente renombra tu archivo como xml, habria que ver porque lo estas procesando con php

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #9 (permalink)  
Antiguo 04/12/2011, 12:43
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

El problema es que sobre el feed no tengo ningún control ya que es una web externa la que me lo envía. Parto de la base que lo envían con .php y que no puedo incluir en el feed esto:
Código PHP:
<?php
ini_set
('short_open_tag',0);
header('Content-type: application/rss+xml; charset=utf-8');
?>
Lo que voy a hacer es ver como elimino esa primera línea, mirare a ver si encuentro alguna función en php
  #10 (permalink)  
Antiguo 04/12/2011, 12:49
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Leer archivo xml con php

pero si cargás el feed directamente, te lo muestra bien?

podrias obtener el contenido con file_get_contents(); guardarlo como xml y que tu script abra ese xml y no el php

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #11 (permalink)  
Antiguo 04/12/2011, 12:58
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

Si copio el código y lo pego en un archivo sin <?xml version="1.0" encoding="utf-8"?>, si que lo muestra bien.

El problema es que con file_get_contents(); sigue dando error si lo intento ceger directamente del feed por culpa de <?xml version="1.0" encoding="utf-8"?>
  #12 (permalink)  
Antiguo 04/12/2011, 13:25
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Leer archivo xml con php

mirá yo hice esta prueba
primero habilité el short_open_tag para forzar el error,

cree este archivo
xml.php

Código XML:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <note>
  3.     <to>A</to>
  4.     <from>B</from>
  5.     <heading>C</heading>
  6.     <body>D</body>
  7. </note>

y este para leerlo

Código PHP:
Ver original
  1. <?php
  2. $leer = file_get_contents('xml.php');
  3. echo $leer;
  4. ?>

y me sale en pantalla
A B C D
es decir que funciona correctamente
por supuesto que si abro el xml.php se produce el error porque interpreta el <? de xml como apertura de php. si pongo en off los short_open_tag me lo abre bien si lo llamo directamente

Fijate si podés pasar la url del xml.php que querés leer
Saludos
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #13 (permalink)  
Antiguo 04/12/2011, 14:25
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

Ahora ya lo tengo en mi servidor en un archivo llamado "feed.xml", pero al leerlo me dice lo siguiente:

Código PHP:
Warningsimplexml_load_file() [function.simplexml-load-file]: I/O warning failed to load external entity "<personas> <ad> <id><![CDATA[197]]></id> <url><![CDATA[http://www.... in /lectorxml.php on line 12 
Alguna idea?
  #14 (permalink)  
Antiguo 04/12/2011, 14:42
 
Fecha de Ingreso: abril-2009
Mensajes: 233
Antigüedad: 15 años
Puntos: 5
Respuesta: Leer archivo xml con php

Ya lo he solucionado, ahora me daba el problema porque no era <?xml version="1.0" encoding="utf-8"?> si no <?xml version="1.0" encoding="ISO-8859-1"?>

Muchas gracias por vuestra ayuda, ahora me toca algo más sencillo (al menos para mi) meterlo todo en la base de datos!

Saludos!!
  #15 (permalink)  
Antiguo 04/12/2011, 14:46
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Leer archivo xml con php

ok, ya estaba a punto de contestarte, porque con mi ejemplo tu código me mostraba esto
object(SimpleXMLElement)#1 (4) { ["to"]=> string(1) "A" ["from"]=> string(1) "B" ["heading"]=> string(1) "C" ["body"]=> string(1) "D" }
es decir que lo procesaba correctamente.

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Etiquetas: xml
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 12:27.