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->setUseCurl( true );
$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( $return, strpos( $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( $newXML, strpos( $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";
}