[SOLUCIONADO] Listar carpetas y archivos en PHP

Iniciado por Only, Junio 28, 2013, 04:31:56 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 28, 2013, 04:31:56 AM Ultima modificación: Marzo 22, 2014, 01:51:58 PM por Expermicid
Hola a todos , lo que quiero es poder listar el contenido de una carpeta que se llama CURSOS, suponiendo que la estructura sea :

CURSOS/CURSO1/INFO.TXT
CURSOS/CURSO1/DOC.TXT
CURSOS/CURSO1/PPT.TXT
CURSOS/CURSO1/PDF.TXT

CURSOS/CURSO2/INFO.TXT
CURSOS/CURSO2/DOC.TXT
CURSOS/CURSO2/PPT.TXT
CURSOS/CURSO2/PDF.TXT

Quiero que me lista el nombre de la carpeta y los archivos que estan dentro de ella , pero no se como hacerlo , espero me puedan ayudar

Gracias a todos

Junio 28, 2013, 04:54:24 AM #1 Ultima modificación: Marzo 27, 2014, 05:26:55 PM por Expermicid
Hola Only, con respecto a tu duda tal vez te pueda servir algo así:

Código: php

<?php
    $dir = (isset($_GET['dir']))?$_GET['dir']:"/";
    $directorio=opendir($dir);
    echo "<b>Directorio actual:</b><br>$dir<br>";
    echo "<b>Archivos:</b><br>";
    while ($archivo = readdir($directorio))
    {
        if($archivo == '.')
            echo "<a href=\"?dir=.\">$archivo</a><br>";
        elseif($archivo == '..')
        {
            if($dir != '.')
            {
                $carpetas = split("/",$dir);
                array_pop($carpetas);
                $dir2 = join("/",$carpetas);
                echo "<a href=\"?dir=$dir2\">$archivo</a><br>";
            }
        }
        elseif(is_dir("$dir/$archivo"))
            echo "<a href=\"?dir=$dir/$archivo\">$archivo</a><br>";
        else echo "$archivo<br>";
    }
    closedir($directorio);
?>


Saludos!!  :D

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

este video: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  del amigo hckdrk tambien sirve :D
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola Only, con respecto a tu duda tal vez te pueda servir algo así:

Código: php

<?php
    $dir = (isset($_GET['dir']))?$_GET['dir']:"/";
    $directorio=opendir($dir);
    echo "<b>Directorio actual:</b><br>$dir<br>";
    echo "<b>Archivos:</b><br>";
    while ($archivo = readdir($directorio))
    {
        if($archivo == '.')
            echo "<a href=\"?dir=.\">$archivo</a><br>";
        elseif($archivo == '..')
        {
            if($dir != '.')
            {
                $carpetas = split("/",$dir);
                array_pop($carpetas);
                $dir2 = join("/",$carpetas);
                echo "<a href=\"?dir=$dir2\">$archivo</a><br>";
            }
        }
        elseif(is_dir("$dir/$archivo"))
            echo "<a href=\"?dir=$dir/$archivo\">$archivo</a><br>";
        else echo "$archivo<br>";
    }
    closedir($directorio);
?>


Saludos!!  :D

Estoy probando tu codigo pero en que parte le especifico la carpeta a escanear?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
este video: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta  del amigo hckdrk tambien sirve :D

Ando checando el video bro muchas gracias

Hola Only, mira esta línea:

Código: php

     $dir = (isset($_GET['dir']))?$_GET['dir']:"/";


La carpeta que será analizada por el código para cargar los archivos que contiene se asigna en la variable $dir, la cual se supone recibe el valor a partir de una petición GET, en caso de que esa petición no se produzca, se da el valor por defecto que es la raíz "/", podrías dejarle también con una ruta absoluta o relativa, por ejm:

Código: php

    $dir = "/var/www/sitio/carpetaAMostrar";


Saludos!  :D

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Hola Only, mira esta línea:

Código: php

     $dir = (isset($_GET['dir']))?$_GET['dir']:"/";


La carpeta que será analizada por el código para cargar los archivos que contiene se asigna en la variable $dir, la cual se supone recibe el valor a partir de una petición GET, en caso de que esa petición no se produzca, se da el valor por defecto que es la raíz "/", podrías dejarle también con una ruta absoluta o relativa, por ejm:

Código: php

    $dir = "/var/www/sitio/carpetaAMostrar";


Saludos!  :D

Gracias bro pero me marca error en la linea de SPLIT ya que segun No tienes permitido ver los links. Registrarse o Entrar a mi cuenta ya es obsoleta, otra cosa, solo me enlista las carpetas, pero no los archivos que estan dentro de las carpetas, espero me puedas ayudar

Gracias

Junio 29, 2013, 01:52:04 AM #6 Ultima modificación: Marzo 27, 2014, 05:27:13 PM por Expermicid
Entonces puedes usar este otro script más simplificado, lo probé recién y si lista tanto archivos como carpetas del directorio actual (.), el cual en el ejemplo lo mando como dato por defecto, tu puedes modificar el código para que sea recibido a través de un formulario, y lo que se hace para diferenciar entre archivos y carpetas, es que estas últimas se muestran entre corchetes.

Código: php

<?php
$directorio = opendir("."); //Ruta a tomar para listar es el directorio actual por defecto
while ($archivo = readdir($directorio))
{
    if (is_dir($archivo))
    {
        echo '<a href="'.$archivo.'">['.$archivo . ']</a><br />';
    }
    else
    {
        echo '<a href="'.$archivo.'">'.$archivo . '</a><br />';
    }
}
?>

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Entonces puedes usar este otro script más simplificado, lo probé recién y si lista tanto archivos como carpetas del directorio actual (.), el cual en el ejemplo lo mando como dato por defecto, tu puedes modificar el código para que sea recibido a través de un formulario, y lo que se hace para diferenciar entre archivos y carpetas, es que estas últimas se muestran entre corchetes.

Código: php

<?php
$directorio = opendir("."); //Ruta a tomar para listar es el directorio actual por defecto
while ($archivo = readdir($directorio))
{
    if (is_dir($archivo))
    {
        echo '<a href="'.$archivo.'">['.$archivo . ']</a><br />';
    }
    else
    {
        echo '<a href="'.$archivo.'">'.$archivo . '</a><br />';
    }
}
?>


Lo acabo de probar bro y solo me lista las carpetas , pero los archivos que estan dentro de esas carpetas no los enlista, espero me puedas ayudar a hacer eso. Gracias
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Lo que necesitas hacer Only es algo llamado recursividad; pero ¿qué es la recursividad?, a términos generales es una función que se llama a sí misma para resolverse, es decir, mientras algo se cumpla se seguirá ejecutando.


Teniendo en cuenta ésto, y qué es más sencillo y gasta menos memoria la función scandir() la cual es más completa llegamos al siguiente resultado:


Código: php
<?php
function scanDirectory($directory){
$files = scandir($directory);
echo '<ul>';
foreach($files as $file){
if($file != '.' && $file != '..'){
if(filetype($directory . $file) == 'dir'){
echo '<li>Directorio :: ' . $directory . $file . '/';
scanDirectory($directory . $file . '/');
}else{
echo '<li>' . $file;
}
echo '</li>';
}

}
echo '</ul>';
}
scanDirectory('./');
?>


Ahora, sino quieres emplear tablas para que el listado sea más estético puedes usar éste otro:


Código: php
<?php
function scanDirectory($directory){
$files = scandir($directory);
foreach($files as $file){
if($file != '.' && $file != '..'){
if(filetype($directory . $file) == 'dir'){
echo '<h1>' . $directory . $file . '/</h1>';
scanDirectory($directory . $file . '/');
}else{
echo $file . '<br />';
}
}
}
}
scanDirectory('./');
?>



¿Qué hace la función?, escanea un directorio en busca de archivos y directorios; al encontrar un directorio vuelve a llamar la función en sí recursivamente para escanear así hasta no encontrar nada.


Saludos,
Xt3mP.
Cada vez que me das Karma me motivas

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Lo que necesitas hacer Only es algo llamado recursividad; pero ¿qué es la recursividad?, a términos generales es una función que se llama a sí misma para resolverse, es decir, mientras algo se cumpla se seguirá ejecutando.


Teniendo en cuenta ésto, y qué es más sencillo y gasta menos memoria la función scandir() la cual es más completa llegamos al siguiente resultado:


Código: php
<?php
function scanDirectory($directory){
$files = scandir($directory);
echo '<ul>';
foreach($files as $file){
if($file != '.' && $file != '..'){
if(filetype($directory . $file) == 'dir'){
echo '<li>Directorio :: ' . $directory . $file . '/';
scanDirectory($directory . $file . '/');
}else{
echo '<li>' . $file;
}
echo '</li>';
}

}
echo '</ul>';
}
scanDirectory('./');
?>


Ahora, sino quieres emplear tablas para que el listado sea más estético puedes usar éste otro:


Código: php
<?php
function scanDirectory($directory){
$files = scandir($directory);
foreach($files as $file){
if($file != '.' && $file != '..'){
if(filetype($directory . $file) == 'dir'){
echo '<h1>' . $directory . $file . '/</h1>';
scanDirectory($directory . $file . '/');
}else{
echo $file . '<br />';
}
}
}
}
scanDirectory('./');
?>



¿Qué hace la función?, escanea un directorio en busca de archivos y directorios; al encontrar un directorio vuelve a llamar la función en sí recursivamente para escanear así hasta no encontrar nada.


Saludos,
Xt3mP.

Implemente la segunda funcion pero me lee todos los archivos de la carpeta raiz, quiero que me lea especificamente una carpeta , como lo podria hacer?

Indicale en el parámetro que le pasas que es lo que debe leer, en éste caso deberías usar ./Carpetaencuestion/.

Saludos,
Xt3mP.
Cada vez que me das Karma me motivas

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Indicale en el parámetro que le pasas que es lo que debe leer, en éste caso deberías usar ./Carpetaencuestion/.

Saludos,
Xt3mP.

Ya se lo indique pero no me hace nada

Mmmmm funciona de maravilla acá.
Cada vez que me das Karma me motivas

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Mmmmm funciona de maravilla acá.

Le paso el parametro $directory

$directory = "./cursos/";

pero me sigue leyendo la carpeta principal del servidor

Julio 19, 2013, 12:22:20 PM #14 Ultima modificación: Marzo 27, 2014, 05:27:33 PM por Expermicid
Yo no se mucho de php, pero aver si esto te funciona:


Código: php
<?php
$dir="cursos";  //directorio a listar
$list=`ls $dir`;
$listado=trim ($list);
$directorios=explode("\n", $listado);

foreach ($directorios as $dirlist){
  $search=`ls $dir/$dirlist/`;
  $interior=trim($search);
  $int=explode ("\n" , $interior);
  echo "$dirlist <br>";
  foreach ($int as $archivos){
      echo "<li>$archivos</li>";
      }
  echo "<hr>";
  }


?>


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta




si el server es windows, no se si se pordra sustituir el "ls" por un "dir".
saludos.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
[email protected]

Julio 30, 2013, 08:10:51 AM #15 Ultima modificación: Marzo 27, 2014, 05:28:16 PM por Expermicid
Yo tengo una función que hice hace poco y funciona muy bien.
Código: php
<?php
function extension($ext){
if(strpos($ext,".")){
  return end(explode(".", $ext));
} else {
  return ".";
}
}

function aex_buscar($ruta, $ext=FALSE){
$archivos = array();
if($ext){
$ext = strtolower($ext);
if(strpos($ext, ",")){
$ext2 = explode(",", $ext);
} else {
$ext2 = array('0' => $ext);
}
}
if (is_dir($ruta)){
if ($dh = opendir($ruta)){
while (($file = readdir($dh)) !== false){
$extension = extension(strtolower($file));
if($file != ".."){
if($file != "."){
if(!is_dir($ruta.'/'.$file)){
if($ext){
if(in_array($extension, $ext2)){
$archivos[] = $ruta.'/'.$file;
}
} else {
$archivos[] = $ruta.'/'.$file;
}
} else {
$archivos = array_merge($archivos, aex_buscar($ruta.'/'.$file, $ext));
}
}
}
}
closedir($dh);
} else {
return FALSE;
}
} else {
return FALSE;
}
return $archivos;
}

$archivos = aex_buscar("/var/www", "php");
$i = 0;
while($i < count($archivos)){
echo $archivos[$i].'<br>';
$i++;
}

?>


Para obtener todos los archivos de un directorio recursivamente simplemente escribes esta sentencia:
$archivos = aex_buscar("/var/www");
Si quieres puedes especificar los archivos que tengan cierta extension de esta forma:
$archivos = aex_buscar("/var/www", "php,txt,html");
Luego todos los archivos de ese directorio se guardan en la variable que tu indiques, en este caso $archivos.
Con estas lineas muestras los archivos en pantalla:
Código: php
 $i = 0;
while($i < count($archivos)){
echo $archivos[$i].'<br>';
$i++;
}

Si tambien quieres que muestre las carpetas bastaría con editar la función aex_buscar() para que guarde las carpetas en el array. Un saludete

El script que te di, Only, funciona perfecto; de hecho lo probé con carpetas estáticas.
Cada vez que me das Karma me motivas