[ Foro de PHP ]

Comprobar Archivos XML

16-Jan-2023 11:39
Juan Carlos Mairata Barcel
0 Respuestas

Estoy haciendo una pequeña aplicación que lo que debe de hacer es recoger de una ubicación los diferentes archivos XML, comprobar si están bien formados, en caso de que alguno de ellos no lo este lo grabe en un log y pase al siguiente archivo XML y finalmente que capturemos unos datos de estos archivos XML y los guardemos en una BBDD.

El problema es que me he atascado y no consigo averiguar como realizar la comprobación de los XML y que luego genere el log.

Les paso el codigo que tengo escrito.

<?php
// Obrim tots els xml i ho guardam en un json
$fitxers = glob("../archivos/*.xml", GLOB_ERR);
$resultat = array();
$a_id = array();

if (is_array($fitxers))
{
foreach($fitxers as $f)
{
$f2 = "";
$ip = explode(".",$f);
echo $f;
echo implode($ip);
$fitxer_ok = FALSE;
// comparar fitxers de wlan (1) o directip (2)
if (substr($ip[2], -3) == "1" && file_exists("../archivos/1.1.1.".$ip[5].".xml"))
{
$fmod = filemtime($f);
$fmod2 = filemtime("../archivos/1.1.1.".$ip[5].".xml");
$f2 = "../archivos/1.1.1.".$ip[5].".xml";
if ($fmod > $fmod2)
$fitxer_ok = TRUE;
}
elseif (substr($ip[2], -3) == "1" && file_exists("../archivos/2.2.2.".$ip[5].".xml"))
{
$fmod = filemtime($f);
$fmod2 = filemtime("../archivos/2.2.2.".$ip[5].".xml");
$f2 = "../archivos/2.2.2.".$ip[5].".xml";

if ($fmod > $fmod2)
$fitxer_ok = TRUE;
}
else
{
$fitxer_ok = TRUE;
}
if ($fitxer_ok && filesize($f) !=0 ) {
$xml = simplexml_load_file($f);
$d = $xml->coordinates[0]->count()-1;

$temp = array (
"id" => (string)$xml->attributes(),
"lat" => (string)$xml->coordinates[0]->coordinate[$d]->latitude,
"lon" => (string)$xml->coordinates[0]->coordinate[$d]->longitude,
"time" => (string)$xml->coordinates[0]->coordinate[$d]->time,
"alt" => (string)$xml->coordinates[0]->coordinate[$d]->altitude,
"ip"=> (string)substr($ip[2], -3),
);

$resultat[] = $temp;
$a_id[] = (string)$xml->attributes();

if (file_exists($f2)) $xml2 = simplexml_load_file($f2);
if (filesize($f) !=0 && filesize($f2) !=0 && (string)$xml->attributes() != (string)$xml2->attributes())
error_log("DISCREPANCIA, el id en les ips ".$f." i ".$f2." té dos ids: ".(string)$xml->attributes()." i ".(string)$xml2->attributes());
}

// Cream un fitxer LOG
$logFile = fopen("logbus.txt", 'a') or die("Error Creant el LOG");
fwrite($logFile, "\n".date("d/m/Y H:i:s")." Fitxer"." ".implode($fitxers)) or die("Error en el fitxer");
fclose($logFile);
}
}

$fp = fopen('as.json', 'w');

fwrite($fp, json_encode($resultat));

fclose($fp);

?>

¿ Alguien tiene alguna idea o se le ocurre alguna cosa para poder resolverlo ?
Gracias.




Si ya eres usuario del sistema, puedes contestar desde tu cuenta y así ganar prestigio.

Si sólo eres un visitante, puedes optar por...