Tratamiento de archivos XML con PHP
En algunas ocasiones es necesario o práctico tratar o guardar información en archivos para recuperarlos en otro momento.
Para conseguir esto se suele guardar esta información en una base de datos pero en ocasiones no disponemos de este servicio o nos vemos en la necesidad de guardar esta información en un archivo.
En este artículo vamos a ver un ejemplo de como guardar y recuperar información en un archivo XML.
Vamos a guardar y recuperar 3 datos; un titular, un imagen y una descripción de un artículo.
En nuestro <body> necesitaremos tener un formulario para permitir la acción de rellenar y guardar la información que queremos almacenar en el archivo XML.
<form action="index.php" method="post" enctype="multipart/form-data"> <p>Titulo<br/> <input type="text" name="title" value="<?=$xml->title?>" /></p> <p>Descripción<br/> <textarea name="description" rows="3" cols="70"><?=$xml->description?></textarea></p> <p>Imagen<br/> <input type="file" name="image" /><?=$xml->img?></p> <input type="submit" name="save" value="Guardar"/> </form>
Se trata de un formulario sencillo. Las particularidades que pueda tener son que permite la subida de un archivo y en los values de los inputs vemos que tenemos puesto un valor que representa lo que hay guardado en el archivo XML.
A continuación mostramos el código que recibe los datos enviados del formulario:
<?php //Si se desea almacenar información if (isset($_POST['save'])) { //Comprobamos que el archivo a subir es una imagen tipo gif, jpg o png if ((($_FILES["image"]["type"] == "image/gif") || ($_FILES["image"]["type"] == "image/jpeg") || ($_FILES["image"]["type"] == "image/png"))) { //Comprobamos si se ha podido subir el archivo if (move_uploaded_file($_FILES['image']['tmp_name'], $_FILES['image']['name'])) { $fp = fopen('article.xml', 'w+'); $newXml = '<?xml version=\'1.0\' encoding=\'utf-8\' ?>'."\n"; $newXml .= '<article>'."\n"; $newXml .= '<title>'.$_POST['title'].'</title>'."\n"; $newXml .= '<description>'.$_POST['description'].'</description>'."\n"; $newXml .= '<img>'.$_FILES['image']['name'].'</img>'."\n"; $newXml .= '</article>'."\n"; fwrite($fp, $newXml); fclose($fp); } } else { echo '<p>La extensión del archivo no es correcta. Debe ser un archivo jpg, png o gif.</p>'; } } ?>
El código anterior comprueba que el archivo a subir sea una imagen tipo gif, jpg o png, hacemos la subida de la imagen y generamos el archivo XML con los datos facilitados en el formulario.
A continuación, para mostrar los datos del artículo, añadimos el siguiente código:
if (file_exists('article.xml')) { if ($xml = simplexml_load_file('article.xml')) { echo '<h2>'.$xml->title.'</h2>'; echo '<img src="timthumb.php?src='.$xml->img.'&h100&w=350" title="'.$xml->title.'" /><br/>'; echo '<p>'.$xml->description.'</p>'; } } else { echo '<p>El archivo XML todavia no existe</p>'; }
Con esta porción de código lo que hacemos es comprobar si existe el archivo XML para posteriormente cargarlo o leerlo. Lo mostramos con el estilo deseado.
Saludos,
Gracias por compartir esta valiosa información la cual tiene mucha utilidad para quienes tenemos la necesidad de guardar información y no siempre se puede usar una base de datos.
Por ultimo quisiera saber como guardan los archivos. Su nombre y extensión para poder practicar con ellos gracias.
Hol,
El formato debe ser .xml.
Saludos
ahora como aria para agregar mas datos al archivo xml conservando los ya guardados
Hola buenos días,
Para este tipo de ayudas que se salen de lo que hay en el blog debe enviarnos un ticket al centro de soporte y allí le indicaremos como podemos proceder:
https://www.jose-aguilar.com/soporte/
Saludos
funcionó perfecto!!
Gracias
hola jose, he provado tu código y parece que funciona, pero no se donde deja el archivo article.xml no lo encuentro en mi servidor
dbería guardarse en raiz