Ahora que ya sabemos crear un XML a partir de un dataset (por ejemplo una matriz) llega el momento de ser capaces de leer un fichero en formato XML.
En contra de lo que muchos piensan al principio, este es un problema inherentemente más complejo que la creación del XML. Esto se debe a que, cuando creamos un XML, nosotros decidimos como debe crearse, que estructura debe tener, cual será el nombre de los nodos y de los atributos, etc. En suma. Nosotros planteamos la estructura del fichero, y escribimos un script que cree ese fichero.
La lectura es justo la operación inversa. Partimos de un fichero XML que nos “viene dado” y debemos tener claros todos sus datos (nombre de los nodos, atributos, etc), porque eso es, exactamente, lo que debemos leer. Es decir, un lector de XML se hace para una estructura dada (siempre, claro está, que se trate de un XML válido y bien formado). Debemos conocer la estructura. Ya no la decidimos nosotros.
Para leer archivos XML en PHP contamos con varias soluciones. Ninguna es, definitivamente, la mejor. Algunas emplean más recursos pero, por otro lado, son más rápidas. Otras son más lentas, pero emplean menos recursos, o son más fáciles de programar… En general, hay que buscar una solución de compromiso. Buscamos una solución fácil, mantenible, lo más flexible que se pueda, y que emplee los resursos justos.
En este artículo vamos a leer el XML que creamos anteriormente, y recuperaremos los datos para que después puedan ser procesados como necesitemos.
USO DE SimpleXMLElement
Esta es, de lejos, la forma más fácil y operativa para leer y parsear un XML. Veamos cómo usarla. Para empezar vamos a partir de una versión simplificada del archivo obras.xml
que tenemos de los ejercicios anteriores. Luego lo iremos complicando hasta llegar a entender todo lo necesario. La versión “reducida” es obras_1.xml
y su listado es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="UTF-8"?> <obras> <obra> Construccion de aparcamiento en el centro </obra> <obra> Adaptación de estación suburbana </obra> <obra> Electrificación de zona restringida </obra> </obras> |
Cómo ves, esta es una versión realmente simplificada, ya que cada nodo obra
solo tiene su propio contenido (el nombre de la obra), sin atributos, ni otros nodos XML anidados. El resultado que esperamos obtener es una matriz que será, también, inherentemente simple y reducida, así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
array(3) { [0]=> array(1) { ["obra"]=>string(41) "Construccion de aparcamiento en el centro" } [1]=> array(1) { ["obra"]=>string(34) "Adaptación de estación suburbana" } [2]=> array(1) { ["obra"]=>string(36) "Electrificación de zona restringida" } } |
El código para obtener este resultado es leer_1.php
, listado a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?php echo "<pre>"; /* Creamos una matriz general para almacenar los datos que recuperemos del XML en un formato procesabledesde PHP (para una base de datos, una renderización en pantalla o lo que sea necesario). */ $matrizDeObras = array(); /* Creamos un objeto de la clase SimpleXMLElement para almacenar en el el contenido del archivo XML en una estructura de objeto procesable. */ $contenidoXML = new SimpleXMLElement("obras_1.xml", 0, true); /* con el nombre de los nodos creamos unas variables (una por nodo) que podemos reorrer para trabajar sobre ellas. */ foreach ($contenidoXML->obra as $obra) { $elementoObra = array(); // Elemento que contendrá datos de cada nodo. $elementoObra["obra"] = trim((string)$obra); // Se agrega el contenido del nodo como cadena. $matrizDeObras[] = $elementoObra; // El elemento de cada nod es agregado a la matriz general. unset($elementoObra); // El contenido de un elemento nodo se recreará en cada iteración. } var_dump ($matrizDeObras); ?> |
El código está suficientemente documentado como para que puedas entender con facilidad lo que hemos hecho. No obstante, vamos a detenernos en algunos detalles.
EL CONSTRUCTOR
Para convertir una fuente de datos XML en un formato de objeto procesable empleamos el constructor de la clase SimpleXMLElement
. Sólo el primer parámetro es obligatorio. Hace referencia a la fuente de datos XML. Por defecto esta sería una variable. Como, en este caso, se trata de un archivo externo, el tercer parámetro debe indicar, cómo ves, un valor true
. El valor false
(que es el que se asume por defecto) indicaría que el origen de datos XML debe buscarse en una variable, no en un archivo. Por ejemplo, si el contenido de datos XML estuviera en una variable de memoria, digamos $datosXML
, el constructor se podría haber puesto así:
$contenidoXML = new SimpleXMLElement($datosXML);
Como no es el caso, ya que trabajamos a partir de un archivo externo, debemos asignar el valor true
al tercer parámetro. Esto nos obliga a establecer, también el segundo parámetro. Este le ponemos, en este ejemplo, con el valor 0
. El segundo parámetro son opciones para el constructor. Estas se refieren al uso de CDATA
, DTD
, etc. Como, por ahora, no vamos a usar estas opciones, mantenemos el 0
sin entrar en más detalles.
RECORRIENDO LOS NODOS
Ya tenemos un objeto con el contenido del XML. Ahora vamos a procesarlos. Los nodos hijos se identifican por su nombre, que se toma como una propiedad de cada nodo. Por eso insitíamos tanto, al principio de este artículo, en tener clara cual es la estructura del XML. Recorremos cada nodo como una variable que, en realidad, es un objeto en sí misma.
foreach ($contenidoXML->obra as $obra) {
Dada la estructura tan sencilla que estamos leyendo, cada una de las variables $obra
(en cada iteración del bucle) contiene el valor del nodo, es decir, en este caso, el nombre de la obra a que se refiere. Sin embargo, lo contiene como u objeto, por lo que, para poder almacenarlo de forma cómoda (es decir, manejable) en una variable, debemos hacerle un casting para pasarlo a cadena, y recortar los posibles espacios y saltos de línea, ya que en el XML los hay a ambos lados del valor del nodo.
trim((string)$obra)
Y ya está. Con este proceso tan simple hemos obtenido la matriz del XML.
CON ATRIBUTOS
Ahora vamos a complicar un poco más la cosa. Lo normal es que los nodos XML puedan tener atributos y, en ese caso, también debemos ser capaces de recuperarlos en la matriz. Suponte la siguiente versión de nuestro archivo XML, al que hemos llamado obras_2.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 |
<?xml version="1.0" encoding="UTF-8"?> <obras> <obra inicio="10/02/2015" final="31/10/2016" contratista="Actuaciones Urbanas" presupuesto="20.000.000"> Construccion de aparcamiento en el centro </obra> <obra inicio="06/08/2016" final="01/11/2016" contratista="Obras del Norte" presupuesto="6.500.000"> Adaptación de estación suburbana </obra> <obra inicio="02/02/2014" final="26/05/2017" contratista="Iluminación y Electricidad, SA" presupuesto="7.800.000"> Electrificación de zona restringida </obra> </obras> |
Esta vez debemos obtener una matriz en la que cada elemento obra
esté formado no sólo por el valor del nodo, sino también por el de los atributos, así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
array(3) { [0]=> array(5) { ["obra"]=>string(41) "Construccion de aparcamiento en el centro" ["fecha_de_inicio"]=>string(10) "10/02/2015" ["fecha_de_finalizacion"]=>string(10) "31/10/2016" ["contratista"]=>string(19) "Actuaciones Urbanas" ["presupuesto"]=>string(10) "20.000.000" } [1]=> array(5) { ["obra"]=>string(34) "Adaptación de estación suburbana" ["fecha_de_inicio"]=>string(10) "06/08/2016" ["fecha_de_finalizacion"]=>string(10) "01/11/2016" ["contratista"]=>string(15) "Obras del Norte" ["presupuesto"]=>string(9) "6.500.000" } [2]=> array(5) { ["obra"]=>string(36) "Electrificación de zona restringida" ["fecha_de_inicio"]=>string(10) "02/02/2014" ["fecha_de_finalizacion"]=>string(10) "26/05/2017" ["contratista"]=>string(31) "Iluminación y Electricidad, SA" ["presupuesto"]=>string(9) "7.800.000" } } |
Para ello, vamos a recurrir al script leer_2.php
, cuyo listado es el siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
<?php echo "<pre>"; /* Creamos una matriz general para almacenar los datos que recuperemos del XML en un formato procesabledesde PHP (para una base de datos, una renderización en pantalla o lo que sea necesario). */ $matrizDeObras = array(); /* Creamos un objeto de la clase SimpleXMLElement para almacenar en el el contenido del archivo XML en una estructura de objeto procesable. */ $contenidoXML = new SimpleXMLElement("obras_2.xml", 0, true); /* con el nombre de los nodos creamos unas variables (una por nodo) que podemos reorrer para trabajar sobre ellas. */ foreach ($contenidoXML->obra as $obra) { $elementoObra = array(); // Elemento que contendrá datos de cada nodo. $elementoObra["obra"] = trim((string)$obra); // Se agrega el contenido del nodo como cadena. /* Obtenemos los atributos del nodo con el método attributes().*/ $atributosDeNodoObra = $obra->attributes(); /* Recorremos todos los atributos asignándolos a la matriz del nodo actual. */ $elementoObra["fecha_de_inicio"] = (string)$atributosDeNodoObra->inicio; $elementoObra["fecha_de_finalizacion"] = (string)$atributosDeNodoObra->final; $elementoObra["contratista"] = (string)$atributosDeNodoObra->contratista; $elementoObra["presupuesto"] = (string)$atributosDeNodoObra->presupuesto; $matrizDeObras[] = $elementoObra; // El elemento de cada nod es agregado a la matriz general. unset($elementoObra); // El contenido de un elemento nodo se recreará en cada iteración. } var_dump ($matrizDeObras); ?> |
Observa las líneas resaltadas. Lo primero que llama la atención es que, una vex dentro del nodo, recuperamos todos los atributos mediante el método attributes()
, así:
$atributosDeNodoObra = $obra->attributes();
Y aquí la cosa se complica un poco más. Lo que obtenemos es una matriz con los atributos del nodo que estamos procesando. Cada uno de ellos se identifica con una propiedad que coindice con el nombre que tiene el atributo en el XML (una vez más, aparece la necesidad de conocer la estructura del XML. El valor de estas propiedades también debe sufrir un casting para poder procesarlo cómo una cadena, como en esta línea de ejemplo:
$elementoObra["fecha_de_inicio"] = (string)$atributosDeNodoObra->inicio;
Es decir. El nodo es un objeto, y los atributos son, a su vez, objetos.
NODOS ANIDADOS
Nuestro XML original contenía, dentro de cada nodo obra, un nodo anidado que se llama personal_tecnico, que, a su vez, tiene un atributo, llamado miembros, que contiene el número de miembros de la dirección facultativa de la obra. En conjunto, podemos considerar obras_3.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <obras> <obra inicio="10/02/2015" final="31/10/2016" contratista="Actuaciones Urbanas" presupuesto="20.000.000"> Construccion de aparcamiento en el centro <personal_tecnico miembros="3"> </personal_tecnico> </obra> <obra inicio="06/08/2016" final="01/11/2016" contratista="Obras del Norte" presupuesto="6.500.000"> Adaptación de estación suburbana <personal_tecnico miembros="4"> </personal_tecnico> </obra> <obra inicio="02/02/2014" final="26/05/2017" contratista="Iluminación y Electricidad, SA" presupuesto="7.800.000"> Electrificación de zona restringida <personal_tecnico miembros="2"> </personal_tecnico> </obra> </obras> |
La matriz que vamos a obtener es la siguiente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
array(3) { [0]=> array(6) { ["obra"]=>string(41) "Construccion de aparcamiento en el centro" ["fecha_de_inicio"]=>string(10) "10/02/2015" ["fecha_de_finalizacion"]=>string(10) "31/10/2016" ["contratista"]=>string(19) "Actuaciones Urbanas" ["miembros_tecnicos"]=>string(1) "3" ["presupuesto"]=>string(10) "20.000.000" } [1]=> array(6) { ["obra"]=>string(34) "Adaptación de estación suburbana" ["fecha_de_inicio"]=>string(10) "06/08/2016" ["fecha_de_finalizacion"]=>string(10) "01/11/2016" ["contratista"]=>string(15) "Obras del Norte" ["miembros_tecnicos"]=>string(1) "4" ["presupuesto"]=>string(9) "6.500.000" } [2]=> array(6) { ["obra"]=>string(36) "Electrificación de zona restringida" ["fecha_de_inicio"]=>string(10) "02/02/2014" ["fecha_de_finalizacion"]=>string(10) "26/05/2017" ["contratista"]=>string(31) "Iluminación y Electricidad, SA" ["miembros_tecnicos"]=>string(1) "2" ["presupuesto"]=>string(9) "7.800.000" } } |
Y el código que la obtiene, leer_3.php
, tiene el siguiente listado:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php echo "<pre>"; /* Creamos una matriz general para almacenar los datos que recuperemos del XML en un formato procesabledesde PHP (para una base de datos, una renderización en pantalla o lo que sea necesario). */ $matrizDeObras = array(); /* Creamos un objeto de la clase SimpleXMLElement para almacenar en el el contenido del archivo XML en una estructura de objeto procesable. */ $contenidoXML = new SimpleXMLElement("obras_3.xml", 0, true); /* con el nombre de los nodos creamos unas variables (una por nodo) que podemos reorrer para trabajar sobre ellas. */ foreach ($contenidoXML->obra as $obra) { $elementoObra = array(); // Elemento que contendrá datos de cada nodo. $elementoObra["obra"] = trim((string)$obra); // Se agrega el contenido del nodo como cadena. /* Obtenemos los atributos del nodo con el método attributes().*/ $atributosDeNodoObra = $obra->attributes(); /* Recorremos todos los atributos asignándolos a la matriz del nodo actual. */ $elementoObra["fecha_de_inicio"] = (string)$atributosDeNodoObra->inicio; $elementoObra["fecha_de_finalizacion"] = (string)$atributosDeNodoObra->final; $elementoObra["contratista"] = (string)$atributosDeNodoObra->contratista; /* Obtenemos la propiedad personal_tecnico del nodo en curso, que contiene todos los datos del nodo anidado con este nombre. A partir de esa propiedad aplicamos el método attributes() para obtener los atributos del sub nodo, (en este ejemplo, sólo uno). */ $atributosDePersonal = $obra->personal_tecnico->attributes(); /* Recuperamos el valor del atributo "miembros", del sub-nodo "personal_tecnico" como una cadena, igual que hacemos con los atributos del nodo obra (el "padre"). */ $elementoObra["miembros_tecnicos"] = (string)$atributosDePersonal->miembros; $elementoObra["presupuesto"] = (string)$atributosDeNodoObra->presupuesto; $matrizDeObras[] = $elementoObra; // El elemento de cada nod es agregado a la matriz general. unset($elementoObra); // El contenido de un elemento nodo se recreará en cada iteración. } var_dump ($matrizDeObras); ?> |
Cómo ya conocemos la mecánica, entender esto es un poco más llevadero. El código está ampliamente comentado, para poder seguirlo. Presta especial atención a las líneas resaltadas.
EL FICHERO DE OBRAS COMPLETO.
Ahora ya tenemos la soltura necesaria para comprender cómo leer el fichero XML con todos los datos que teníamos en el original. Su listado responde a obras_4.xml
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?xml version="1.0" encoding="UTF-8"?> <obras> <obra inicio="10/02/2015" final="31/10/2016" contratista="Actuaciones Urbanas" presupuesto="20.000.000"> Construccion de aparcamiento en el centro <personal_tecnico miembros="3"> <miembro cargo="arquitecto">Pedro Steven De Gloria</miembro> <miembro cargo="aparejador">Manuela Gracia Salmerón</miembro> <miembro cargo="supervisor">Andrés Garrido Fuentes</miembro> </personal_tecnico> </obra> <obra inicio="06/08/2016" final="01/11/2016" contratista="Obras del Norte" presupuesto="6.500.000"> Adaptación de estación suburbana <personal_tecnico miembros="4"> <miembro cargo="arquitecto">Manuel Alarcón Rodríguez</miembro> <miembro cargo="aparejador">Carlos Torres Fuentes</miembro> <miembro cargo="director_de_tunelacion">María García Pérez</miembro> <miembro cargo="jefe_de_compras">Antonia Bisonette Tristán</miembro> </personal_tecnico> </obra> <obra inicio="02/02/2014" final="26/05/2017" contratista="Iluminación y Electricidad, SA" presupuesto="7.800.000"> Electrificación de zona restringida <personal_tecnico miembros="2"> <miembro cargo="jefe_de_electricistas">Laura De la Iglesia Cifuentes</miembro> <miembro cargo="responsable_de_control">Yolanda Torres Torres</miembro> </personal_tecnico> </obra> </obras> |
Aquí la cosa ya se pone “peluda y con dientes”. Dentro de cada nodo obra
, aparte del valor del elemento y sus propios atributos, tenemos un sub-nodo personal_tecnico
, que también tiene un atributo con el número de miembros. Pero, además, cada uno, tiene unos sub-nodos miembro
, con un atributo para el cargo del miembro y, como valor, el nombre de la persona que ostenta dicho cargo. Uffff… La matriz a obtener es la que vemos a continuación:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
array(3) { [0]=> array(7) { ["obra"]=>string(41) "Construccion de aparcamiento en el centro" ["fecha_de_inicio"]=>string(10) "10/02/2015" ["fecha_de_finalizacion"]=>string(10) "31/10/2016" ["contratista"]=>string(19) "Actuaciones Urbanas" ["miembros_tecnicos"]=>string(1) "3" ["personal_tecnico"]=> array(3) { ["arquitecto"]=>string(22) "Pedro Steven De Gloria" ["aparejador"]=>string(24) "Manuela Gracia Salmerón" ["supervisor"]=>string(23) "Andrés Garrido Fuentes" } ["presupuesto"]=>string(10) "20.000.000" } [1]=> array(7) { ["obra"]=>string(34) "Adaptación de estación suburbana" ["fecha_de_inicio"]=>string(10) "06/08/2016" ["fecha_de_finalizacion"]=>string(10) "01/11/2016" ["contratista"]=>string(15) "Obras del Norte" ["miembros_tecnicos"]=>string(1) "4" ["personal_tecnico"]=> array(4) { ["arquitecto"]=>string(26) "Manuel Alarcón Rodríguez" ["aparejador"]=>string(21) "Carlos Torres Fuentes" ["director_de_tunelacion"]=>string(21) "María García Pérez" ["jefe_de_compras"]=>string(26) "Antonia Bisonette Tristán" } ["presupuesto"]=>string(9) "6.500.000" } [2]=> array(7) { ["obra"]=>string(36) "Electrificación de zona restringida" ["fecha_de_inicio"]=>string(10) "02/02/2014" ["fecha_de_finalizacion"]=>string(10) "26/05/2017" ["contratista"]=>string(31) "Iluminación y Electricidad, SA" ["miembros_tecnicos"]=>string(1) "2" ["personal_tecnico"]=> array(2) { ["jefe_de_electricistas"]=>string(29) "Laura De la Iglesia Cifuentes" ["responsable_de_control"]=>string(21) "Yolanda Torres Torres" } ["presupuesto"]=>string(9) "7.800.000" } } |
Como ves, esta sí es (por fin), la matriz completa original, que hemos recuperado para poder procesarla cómo convenga. El script que hace esta lectura es leer_4.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
<?php echo "<pre>"; /* Creamos una matriz general para almacenar los datos que recuperemos del XML en un formato procesabledesde PHP (para una base de datos, una renderización en pantalla o lo que sea necesario). */ $matrizDeObras = array(); /* Creamos un objeto de la clase SimpleXMLElement para almacenar en el el contenido del archivo XML en una estructura de objeto procesable. */ $contenidoXML = new SimpleXMLElement("obras_3.xml", 0, true); /* con el nombre de los nodos creamos unas variables (una por nodo) que podemos reorrer para trabajar sobre ellas. */ foreach ($contenidoXML->obra as $obra) { $elementoObra = array(); // Elemento que contendrá datos de cada nodo. $elementoObra["obra"] = trim((string)$obra); // Se agrega el contenido del nodo como cadena. /* Obtenemos los atributos del nodo con el método attributes().*/ $atributosDeNodoObra = $obra->attributes(); /* Recorremos todos los atributos asignándolos a la matriz del nodo actual. */ $elementoObra["fecha_de_inicio"] = (string)$atributosDeNodoObra->inicio; $elementoObra["fecha_de_finalizacion"] = (string)$atributosDeNodoObra->final; $elementoObra["contratista"] = (string)$atributosDeNodoObra->contratista; /* Obtenemos la propiedad personal_tecnico del nodo en curso, que contiene todos los datos del nodo anidado con este nombre. A partir de esa propiedad aplicamos el método attributes() para obtener los atributos del sub nodo, (en este ejemplo, sólo uno). */ $miembros_tecnicos = $obra->personal_tecnico; $atributosDePersonal = $miembros_tecnicos->attributes(); /* Recuperamos el valor del atributo "miembros", del sub-nodo "personal_tecnico" como una cadena, igual que hacemos con los atributos del nodo obra (el "padre"). */ $elementoObra["miembros_tecnicos"] = (string)$atributosDePersonal->miembros; /* Debemos recuperar el contenido de los sub-sub-nodos miembro en una mini matriz secundaria. */ $elementoObra["personal_tecnico"] = array(); foreach ($miembros_tecnicos->miembro as $directivo){ $elementoObra["personal_tecnico"][(string)$directivo->attributes()["cargo"]] = trim((string)$directivo); } $elementoObra["presupuesto"] = (string)$atributosDeNodoObra->presupuesto; $matrizDeObras[] = $elementoObra; // El elemento de cada nod es agregado a la matriz general. unset($elementoObra); // El contenido de un elemento nodo se recreará en cada iteración. } var_dump ($matrizDeObras); ?> |
Cómo ves, si analizas el código, es siempre “más de lo mismo”. La razón por la que hemos hecho todos estos pasos es para que veas que se puede parsear cualquier XML, por complejo que sea, mientras tengamos clara cual es la estructura, y cual es el resultado que deseamos obtener.
En el próximo artículo aprenderemos más cosas sobre el uso de estas técnicas, para procesos más complejos. De momento, lo dejamos aquí (que ya vale, ¿no?).
Pingback: Leer XML con PHP (II) » eldesvandejose.com
Saludos Jose.
He leído tu artículo y me ha resuelto varias dudas que tenía, pero por desgracia no todas. Explico lo que quiero hacer.
En mi misma máquina, quiero enviar a través de una petición POST con CURL mediante una línea de comandos un archivo .xml (el cuál está validado de antemano) a la clase del servicio del webservice, adjunto el comando tal como creo que debe de ser:
curl -v -X POST -k -f -H “Content-Type: application/xml” -d @xml1.xml https://localhost/ruta_de_mi_webservice/index.php?class=nombre_de_mi_clase_php
El tema es que haciendo pruebas dentro de la misma clase php funciona y puedo obtener sus valores ( o sea parsearlo ) sin ningún tipo de problema, la dificultad la tengo en recuperar/instanciar/rescatar (llámalo como quieras) el .xml que le estoy enviendo a través de curl. No encuentro la manera de recuperarlo de ninguna forma
dentro de mi clase php a la cual se lo estoy enviando.
No sé si puedes ayudarme.
Gracias de antemano y un saludo.
Hola:
No he visto tu código pero, dependiendo de como se haga la llamada, es muy posible que, aunque envíes por post, la matriz $_POST te llegue vacía. En ese caso, es posible que tengas los datos o contenidos enviados en el flujo de entrada de PHP (php://input), y es ahí donde debes leerlos. Esto se da mucho en llamadas de http desde Angular, por ejemplo. Te sugiero que eches un vistazo a http://php.net/manual/es/wrappers.php.php y a https://stackoverflow.com/questions/8893574/php-php-input-vs-post. Si es tu caso (que, por lo que me comentas me da que sí va a ser), en esa envoltura encontrarás tu fichero.
Un saludo.