Comunidad de diseño web y desarrollo en internet online

Ordenar el XML generado con php

Citar            
MensajeEscrito el 09 Mar 2011 05:56 pm
Ordenar el XML generado con php
Hola que tal se que hay varios tutos referente a este tema pero lo he leído casi todos (al menos los que encontré) y no logro adaptarlo a mi simple php que lo que hace es cargar los nombre de archivo de un directorio, y lo que quiero es que me los ordene por fecha de modificación. El mas reciente lo coloque primero si es posible. Desde ya que esto lo hago para tomar el XML en flash pero pregunto aca porque es asunto PHP. EL php es el siguiente:


<?php
header("Content-type: text/xml");
$dir="/home/nicoval/public_html/aprendiendo/provedor/";
$dr=@opendir($dir);
if(!$dr){
echo "<error/>";
exit;
} else {
echo "<exploracion>";
// recorremos todos los elementos de la carpeta
while (($archivo = readdir($dr)) !== false) {
// comprobamos que sean archivos y no otras carpetas
if(filetype($dir . $archivo)!="dir"){
$tam=round(filesize($dir . $archivo)/1024,0);
echo "<archivo nombre='$archivo' tam='$tam'/>";
}
}
echo "</exploracion>";
closedir($dr);
}
?>


He probado varias maneras incluso logro ordenarlos sin la estructura xml pero cuando lo quiero hacer al xml tengo problemas con el FirstNode alguien sabe como puedo adaptar un rsort a mi php.
Saludos y desde ya muchas gracias
nico

Por nicoweb85

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 09 Mar 2011 09:29 pm
personalmente era que lo ordenes con el interfaz grafico asi para ahorrar recursos bueno pero me gusto tu pregunta sabes nunca me la habia planteado siempre ordene los arrays y demas con funciones como ksort y demas pero aparte el uso que se le daria a lo que te pongo a continuacion se aplica mas a aplicaciones del tipo PHP-CLI ya que todo es en consola
espero entiendas mi ejemplo :) me tarde 1 hora buscando la forma

Código PHP :

<?php 
header("Content-type: text/xml");
echo '<?xml encoding="UTF-8" version="1.0"?>';
//creamos un contenedor para ordenar los resultados botados por DirectoryIterator
$datos = array();
$fechas = array();
//obtenemos los datos del directorio
//child puede ser un archivo o un directorio
//foreach(new DirectoryIterator("/home/nicoval/public_html/aprendiendo/provedor/") as $child)
foreach(new DirectoryIterator(__DIR__) as $child)
{
   //no necesito explicar lo que hace almenos q no se sepas ingles
   //isFile = es archivo?
   if($child->isFile())
   {
      $datos[] = array("archivo" => $child->getFileName(),
                     "ultima_modificacion" => $child->getMTime() ,
                     "kbytes" => $child->getSize() /1024,
                     );
      $fechas[] = round($child->getMTime());
   }
}
//personalmente primera vez que pruebo multisort y me gusto :)
array_multisort($fechas, SORT_DESC,
$datos);
//creamos el xml
$xml = new simpleXmlElement("<exploracion/>");
foreach($datos as $file)
{
   $xml->addChild("archivo")->addAttribute("nombre",$file["archivo"]);
}
echo $xml->asXml();


este ejemplo es compatible con versiones de php5.2 en adelante es hora de actualizarse php5.3 ya esta liberado solo falta qu lo implementen los hostings
por que ubiera implementado es otra que FilesystemIterator que me gusta mas que el directoryIterator
PD. la practica hace al maestro

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 10 Mar 2011 08:03 pm
ok muchas gracias voy a ver si lo mezclo un poco y funciona te agradezco y si me sale lo publico.

Por nicoweb85

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 Mar 2011 09:09 pm
Bueno es para agradecer anda perfecto, solo había que cerrar el php con ( ?> ) y algo que nunca me había pasado tuve que cambiar
echo '<?xml encoding="UTF-8" version="1.0"?>';
por
echo '<?xml version="1.0" encoding="UTF-8" ?>';
igual en el resultado del xml lo habre así:
<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" ?>

No se porque repite la versión pero anda igual asique no me puedo quejar :)
porque tiraba erro porque aparentemente el encoding necesita la versión podríamos dar vueltas como el huevo y la gallina jeje.
Asique me voy a tener que amoldar a esta nueva forma porque estaba muy acostumbrado a la anterior.
Saludos

Por nicoweb85

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 10 Mar 2011 09:41 pm
Una mas y no jodo mas es porque no logro entenderlo estoy tan acostumbrado al anterior que no logro agregarle un atributo mas o sea el atributte getZise no logro entenderlo debe ser por acostumbrarse a lo viejo no veo como se me queman los papeles si es fácil y me queres malcriar un poco decime mas o menos como o por donde puedo empezar a ver para entenderlo bien. Sino voy a seguir renegando hasta conseguir agregarlo jeje por eso me dedico a esto jeje. Saludos
Nico

Por nicoweb85

18 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Mar 2011 01:41 pm
getSize()? hablas de la clase DirectoryIterator
aca tienes la descripcion de la clase y sus metodos
http://es.php.net/DirectoryIterator
la definicion seria esta
DirectoryIterator::getSize — Get size of current DirectoryIterator item
"" — Obtener el tamaño del item de DirectoryIterator

los items de un directorio pueden ser carpetas o archivos
lo que te estoy mostrando en los ejemplos son ejemplos de uso de clases osea de POO (Programacion Orientada a Objetos) ya todo hayq ue verlo como un objeto en si

ahora lo que te repite el doble header

Código :

<?xml version="1.0" encoding="UTF-8" ?>
<?xml version="1.0" ?> 

es que el simplexmlelement te lo agrega automatico
para solventar esto
puede ser cosa
quita el

Código PHP :

echo  '<?xml version="1.0" encoding="UTF-8" ?>';

y en la parte de

Código PHP :

echo $xml->asXml(); 

reemplazalo por

Código PHP :

echo str_replace('<?xml version="1.0" ?>',
 '<?xml version="1.0" encoding="UTF-8" ?>', $xml->asXml());

SimpleXmlElement tambien es una clase
la ventaja del directoryIterator es que una vez q te acostumbres a su uso podras usar otras cosas como RecursiveDirectoryIterator osea podras hacer con un foreach ver las carpetas subcarpetas como un solo item

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 11 Mar 2011 01:56 pm
otra opcion que estoy viendoe s usar una funcion el simplexml que parsea un string
tienes que reemplazar

Código PHP :

$xml = new simpleXmlElement("<exploracion/>"); 

por

Código PHP :

$xml = simplexml_load_string('<?xml version="1.0" encoding="UTF-8"?>'.
"<exploracion/>");


y borrar el

Código PHP :

echo  '<?xml version="1.0" encoding="UTF-8" ?>'; 

para evitar que te duplique la cabecera

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.