Este tip está basado en uno anterior creado por el maestro Zguillez. Tomando como base su código, siguiendo unos consejos de unos, las peticiones de otros y algunas mejoras añadidas he creado este nuevo script capaz de listar los archivos contenidos en un directorio con php y mostrar el listado en un xml.
El fichero php lo sitúo a continuación:
Código :
<?php
header ("content-type: text/xml");
//---Obtener variables pasadas por GET
$path = !isset($_GET['path']) ? './' : $_GET['path'];
$files = !isset($_GET['files']) ? '\w{3,4}' : '(' . implode(')|(', explode('@', $_GET['files'])) . ')';
$order = !isset($_GET['order']) ? 'name' : $_GET['order'];
//---Arreglo donde se guardarán todos los archivos
$store = array();
//---Regular Expression
$reg = '/\w*+.+'. $files .'$/';
$sum = 0;
//---Si es un directorio
if(is_dir($path)){
//---Abrir el directorio
if($gd = opendir($path)){
//---Recorrer todos los archivos del directorio
while(($archivo = readdir($gd)) !== false){
//---Si se cumple la expresión regular
if(preg_match($reg, $archivo) && !is_dir($archivo)){
//---Guardar todos los datos en el arreglo tomando como index la fecha
$date = filemtime((strpos($path, '/')) ? $path . $archivo : $path . '/' . $archivo);
$store[$date . '_' . $sum] = $archivo;
$sum++;
}
}
}
}
//---Organizar el arreglo
if($order == 'name'){
natcasesort($store);
}else{
ksort($store);
}
//---Crear el XML
$xml = new DomDocument('1.0', 'UTF-8');
//---Crear el nodo raiz
$root = $xml->createElement('folder');
$root = $xml->appendChild($root);
//---Ir creando los nodos
foreach($store as $item => $value){
//---Crear los subnodos
$subnode = $xml->createElement('file');
$subnode = $root->appendChild($subnode);
//---Insertar el texto del nombre en el nodo
$text = $xml->createTextNode($value);
$subnode->appendChild($text);
}
//---Output
echo $xml->saveXML();
?>
Como novedad en el script tenemos la opción de pasarle los siguientes parámetros:
path: ruta de la carpeta que contiene las imágenes. (valor por defecto: la carpeta donde se encuentra el script)
files: Extensión o extensiones de los ficheros a mostrar de la carpeta. (valor por defecto: mostrar todos)
order: Posibilidad de ordenar la lista de archivos por el nombre o por la fecha de creación. (valor por defecto: por nombre)
Los parámetros se pasarán directamente en la url y el fichero php los capturará por GET.
Los siguientes links son reales y podemos observar como se comporta el XML generado dependiendo de los parámetros que pasemos en la url:
Si no le pasamos el parámetro path el script generará una lista con los archivos que se encuentren en su misma carpeta
http://elkikinet.110mb.com/list.phpSi le pasamos el parámetro path el script generará una lista con los archivos contenidos en dicha ruta
http://elkikinet.110mb.com/list.php?path=images_listSi le pasamos una extensión en el parámetro files el script generará una lista sólo con ese tipo de archivo
http://elkikinet.110mb.com/list.php?path=images_list&files=jpgPodemos pasar más de una extensión si las separamos con @
http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gifY por último podemos ordenar los ficheros por nombre
http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gif@png&order=name
O podemos ordenarlos por fecha de modificación
http://elkikinet.110mb.com/list.php?path=images_list&files=jpg@gif@png&order=dateEspero que les sea útil y el crédito es para Zguillez que fue quien creó el script, yo sólo he añadido otras funciones.

Por Martincho7 el 14 de Diciembre de 2009
Para que sea perfecto solo falta que te tire las dimensiones de las imagenes.
Código :
Un saludo
Si necesitas obtener las dimensiones de determinada imagen, solamente la cargas dentro de un contenedor cualquiera y la obtienes a partir del tamaño de este. Algo así funcionaba esto del AS3, ¿no?.
Código :
<?php header ("content-type: text/xml"); //---Obtener variables pasadas por GET $path = !isset($_GET['path']) ? './' : $_GET['path']; $files = !isset($_GET['files']) ? '\w{3,4}' : '(' . implode(')|(', explode('@', $_GET['files'])) . ')'; $order = !isset($_GET['order']) ? 'name' : $_GET['order']; //---Arreglo donde se guardarán todos los archivos $store = array(); $sizes = array(); //---Regular Expression $reg = '/\w*+.+'. $files .'$/'; $sum = 0; //---Si es un directorio if(is_dir($path)){ //---Abrir el directorio if($gd = opendir($path)){ //---Recorrer todos los archivos del directorio while(($archivo = readdir($gd)) !== false){ //---Si se cumple la expresión regular if(preg_match($reg, $archivo) && !is_dir($archivo)){ //---Guardar todos los datos en el arreglo tomando como index la fecha $file = strpos($path, '/') ? $path . $archivo : $path . '/' . $archivo; $date = filemtime($file); $info = getimagesize($file); $store[$date . '_' . $sum . '_' . $info[0] . '_' . $info[1]] = $archivo; $sum++; } } } } //---Organizar el arreglo if($order == 'name'){ natcasesort($store); }else{ ksort($store); } //---Crear el XML $xml = new DomDocument('1.0', 'UTF-8'); //---Crear el nodo raiz $root = $xml->createElement('folder'); $root = $xml->appendChild($root); //---Ir creando los nodos foreach($store as $item => $value){ //---Crear los subnodos $subnode = $xml->createElement('file'); $subnode = $root->appendChild($subnode); //---Insertar el atributo de nombre $name = $xml->createAttribute('nombre'); $name = $subnode->appendChild($name); $text_name = $xml->createTextNode($value); $text_name = $name->appendChild($text_name); //---Insertar los atributos width y height $sizes_array = explode("_", $item); $width = $xml->createAttribute('width'); $width = $subnode->appendChild($width); $text_width = $xml->createTextNode($sizes_array[2]); $text_width = $width->appendChild($text_width); $height = $xml->createAttribute('height'); $height = $subnode->appendChild($height); $text_height = $xml->createTextNode($sizes_array[3]); $text_height = $height->appendChild($text_height); } //---Output echo $xml->saveXML(); ?>Por emo el 18 de Diciembre de 2009
Me encanta como creció este script, primero desde lo básico por parte de Zguillez y ahora ya concluso por mano de Zah.
Por spanisher el 16 de Febrero de 2010
Por pabluzas el 01 de Julio de 2010
Gracias!
Por halguien el 20 de Agosto de 2011