I need the file to list a specific folder

Asked

Viewed 749 times

-1

I need this file to list a folder that is set manually. Currently it lists the directory where the file is, would like to list for example: /arquivos

<?php

// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro  = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
    $itens[] = $nome_itens;
}

//O que fizemos aqui, foi justamente, pegar o diretório, abri-lo e lê-lo.

//Continuando, vamos usar:
//sort: ordena os vetores (arrays), de acordo com os parâmetros informados. Aqui estou ordenando por pastas e depois arquivos

// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
   if ($listar!="." && $listar!=".."){

// checa se o tipo de arquivo encontrado é uma pasta
                if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
                        $pastas[]=$listar;
                } else{
// caso FALSO adiciona o item à variável de arquivos
                        $arquivos[]=$listar;
                }
   }
}

//Vimos acima, a expressão is_dir, indicando que as ações devem esntão ser executadas, ali mesmo, no diretório que já //foi aberto e lido. As ações que executamos ali, foram: ver se tem pastas, listar. Ver se tem arquivos, listar.

//Agora, se houverem pastas, serão apresentadas antes dos arquivos, em odem alfabética.
//Se não houverem, serão apresentados apenas os arquivos, na mesma ordem.
//E se houverem os dois, serão mostrados igualmente.

// lista as pastas se houverem

if ($pastas != "" ) {
foreach($pastas as $listar){
   $pastas = $listar;
   echo "<li><a href='$listar'><strong>Pasta: </strong>$listar</a></li>" ;
   }
   }
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
   $arquivos = $listar;
   $tamanho = "";
   if ( (filesize($arquivos) > 1024)&&(filesize($arquivos) < (1024 * 1000)) ) // KBYTE
                $tamanho = number_format((filesize($arquivos) / 1024),2)." Kb";
   elseif(filesize($arquivos) > (1024 * 1000)) //MBYTE
        $tamanho = number_format((filesize($arquivos) / (1024 * 1024)),2)." Mb";
   else $tamanho = number_format(filesize($arquivos),2)." bytes";

    if($arquivos == 'index.php' || $arquivos == 'error_log' || $arquivos == 'menu_cond_online.php' || $arquivos == 'functions.php' || $arquivos == 'formulario_login.php' || $arquivos == 'logo.jpg' || $arquivos == 'arquivos.php'
    || $arquivos == 'index.html' || $arquivos == '.gitignore' || $arquivos == '.jshintrc' || $arquivos == 'CONTRIBUTING.md' || $arquivos == 'Gruntfile.js' || $arquivos == 'README.md' || $arquivos == 'angularjs.html'
    || $arquivos == 'basic-plus.html' || $arquivos == 'basic.html' || $arquivos == 'blueimp-file-upload.jquery.json' || $arquivos == 'bower.json' || $arquivos == 'jquery-ui.html' || $arquivos == 'listaarquivos.php' || $arquivos == 'package.json')

                echo "";
        else
                echo "<li><a href='$listar'>$listar</a>  ", "Enviado em: " . date ("d/M/Y - ", filemtime(       $arquivos)) ,  "Tamanho: ",$tamanho."</li>";
   }
   }
?>

2 answers

0


Just change the following lines:

// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro  = opendir($diretorio);

To:

// abre o diretório
$ponteiro  = opendir(__DIR__ . '/arquivos');
  • now I have the following error: Notice: Undefined variable: folders in C: xampp htdocs files.php on line 41 Warning: filesize(): stat failed for A3_CPU.jpg in C: xampp htdocs files.php on line 52 Warning: filesize(): stat failed for A3_CPU.jpg in C: xampp htdocs files.php on line 54 Warning: filesize(): stat failed for A3_CPU.jpg in C: xampp htdocs files.php on line 56

0

There is an easier way to list a directory in PHP. This can be done through the class FileSystemIterator;

See in small example:

        $fileIt = new FileSystemIterator(__DIR__ . '/arquivos');

        foreach($fileIt as $file) {

            if ($file->isFile()) {
                echo 'caminho completo: ', $file->getRealPath(), '<br>', 
                     'nome: ', $file->getFilename(), '<br>', 
                     'tamanho: ', $file->getSize(), '<br/>';
            }

        }

So you could avoid unnecessary loops and reallocation of values to an array (because in the structured way, you have to do two loops). Also waiver of verification of '.' and '..', for FileSystemIterator has a method called FileSystemIterator::isFile to check whether the current file system is a folder or a file.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.