Foros del Web » Programando para Internet » PHP »

simpleXML y XML muy grande

Estas en el tema de simpleXML y XML muy grande en el foro de PHP en Foros del Web. Antes que nada un saludo a todos y gracias por leer mi mensaje, la ayuda que puedan brindarme sera bien recibida. Les platico mi problema. ...
  #1 (permalink)  
Antiguo 24/07/2011, 22:10
 
Fecha de Ingreso: noviembre-2004
Mensajes: 15
Antigüedad: 20 años, 1 mes
Puntos: 0
simpleXML y XML muy grande

Antes que nada un saludo a todos y gracias por leer mi mensaje, la ayuda que puedan brindarme sera bien recibida.

Les platico mi problema.

En mi trabajo estamos usando webservice escritos en php, de los cuales la respuesta que recibimos es grande, hablamos de unos 2 mb de xml.

El request hacia dicho webservice y el xml que me regresan como respuesta llegan en su totalidad, sin embargo cuando intento interpretar ese xml y convertirlo a objeto u arreglo, no lo hace.

Para procesar el xml uso simpleXMLElement(); - simplexml_load_string();

Ya se probo con DOM. Pero este no soporto ni la mitad de lo que me soporta el simpleXML

Hice una prueba y el xml de respuesta lo guarde en un archivo al cual llame desde otro archivo php llamado "xml_to_object.php" el cual solo tenia la ejecucion de simpleXML_load_string(); y ahi si lo proceso, el tamaño de la conversion fue de 7,6 mb.

El problema es cuando intento ejecutar todo desde un mismo archivo, el post al webservice, recoger la respuesta y procesar, siempre en la parte de procesar muere no da ninguna salida.

No se a que se deba y me gustaria saber si alguno podria orientarme o ya se ha topado con un problema asi.

primero hago un require de mi clase nusoap para la peticion al webservice.

luego tengo puesto un formulario con un textarea donde pego el xml que envio al hacer clic en "enviar"

luego tengo un isset con el que compruebo si esta activada la respuesta a mi peticion y dentro de esa condicion esta mi proceso

donde hago la llamada al webservice con nusoap, donde la respuesta(2mb) la almaceno en una variable y luego donde la intento pasar a objeto con el simplexml_load_string();

Si alguien tiene alguna idea que pueda ayudarme estaria muy agradecido.

Sin mas muchisimas gracias y estamos en contacto :)

Código PHP:
<?

  
require('nusoap.php');

echo 
'
<form method="post">
    
    <textarea style="width: 100%; height: 350px;" name="xml">' 
str_replace"\\\"""\""$_POST['xml'] ) . '</textarea>
    
    <input type="submit" name="submit" value="Enviar" />
    
</form>
    '
;

if ( isset( 
$_POST['submit'] ) ) {
    
    
$xml str_replace"\\\"""\""$_POST['xml'] );
        
    
$wsdl 'url_del_web_service'
    
    
$client = new nusoap_client(
        
$wsdl
        
false,
        
'',
        
'',
        
'username',
        
'password'
        
);
    
    
$client->setUseCurltrue );
    
    
$client->soap_defencoding 'UTF-8';
    
    
$client->send$xml''); // Peticion al web service

    
$file fopen("file.xml","w");
  
    
$return $client->response// XMl de respuesta
    
    
$return substr$returnstrpos$return"<" ) );
    
    
fwrite$file$return ); // Guardado en archivo. Al principio no se guardaba solo se almacenaba en una variable
    
    
fclose($file);
 
     if ( 
$newXML file_get_contents('file.xml') ) { // Lectura del contenido
        
        
$newXML substr$newXMLstrpos$newXML"<" ) );
        
                if( ! empty( 
$newXML ) ) { echo "newXML setup ok"; } // Comprobando que se pudo leer y alamacenar todo
                
         
$obj simplexml_load_string$newXML ); // Funcion que crea el objeto, aqui muere !!
         
         
print_r$obj ); // Toma la variable como vacia puesto que no hace la converción.
         
         
if( empty ( $obj ) ) { echo "false"; }  // Esto ya no lo hace  apartir del intento de conversion ignora cualquier otra linea del archivo.
        
     
} else { 
        
        echo 
"no"
        
        }
  #2 (permalink)  
Antiguo 24/07/2011, 22:35
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 4 meses
Puntos: 1532
Respuesta: simpleXML y XML muy grande

has intentado aumentar la memoria de uso y el tiempo de proceso (time limit) en el PHP.ini ?
__________________
¡Por favor!: usa el highlight para mostrar código
El que busca, encuentra...
  #3 (permalink)  
Antiguo 24/07/2011, 22:37
 
Fecha de Ingreso: noviembre-2004
Mensajes: 15
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: simpleXML y XML muy grande

Si, ya se han modificado y aumentado esos valores de configuracion dando el mismo resultado.
  #4 (permalink)  
Antiguo 25/07/2011, 07:00
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años, 6 meses
Puntos: 1517
Respuesta: simpleXML y XML muy grande

Cuanto fue la cantidad que aumentaste, necesitas aumentarlo bastante ya que son 2m y eso es mucho para la memoria. ¿cuál es el error que te da en si?
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 25/07/2011, 09:53
 
Fecha de Ingreso: noviembre-2004
Mensajes: 15
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: simpleXML y XML muy grande

Hola que tal, gracias por sus respuestas.

La memoria fue aumentada hasta 1024M y el Time Limit a 50000

En si error en sintaxis no hay, es mas bien como un error interno al manejar la memoria para ejecutar las acciones del codigo.

Veras, justo cuando se intenta ejecutar la operacion de:

$obj = simplexml_load_string( $newXML );

Esta no es llevada acabo, revise si $newXML tenia contenido antes de ingresar a la funcion, retornandome todo el xml que fue leido desde un archivo externo.

Entonces justo cuando pasa a la linea de la conversion deja de funcionar el codigo, no ejecuta ninguna accion, sentencia o comando apartir de esa linea de codigo.

Al principio pense que como al convertir el xml a objeto se generan 7,6 mb en caracteres debia darle tiempo para que procesara, pero lo deje, pensando que apareceria a lo mucho en 5 min pero no dio ninguna respuesta, de echo apenas llega esa instrucción desaparece el icono de cargando del explorador y se detiene toda ejecución.

Sinceramente estoy perdido no se que puede ser :/ ya se me agotaron las ideas jejeje.
  #6 (permalink)  
Antiguo 25/07/2011, 09:55
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: simpleXML y XML muy grande

Lo mejor en lugar de incrementar la memoria en tanto es que uses el XMLReader, ya que trabajan con streams de contenido en lugar de cargar todo el XML y estan diseñados precisamente para estos casos.

Saludos.
  #7 (permalink)  
Antiguo 25/07/2011, 10:58
 
Fecha de Ingreso: noviembre-2004
Mensajes: 15
Antigüedad: 20 años, 1 mes
Puntos: 0
Respuesta: simpleXML y XML muy grande

Entendido, gracias voy a probar con el XMLReader y les cuento como resulto todo. !

Etiquetas: grande, simplexml, xml, formulario, variables
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 15:44.