I need the file to list a specific folder

-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>";
   }
   }
?>
    
asked by anonymous 11.02.2015 / 14:09

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');
    
11.02.2015 / 14:12
0

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

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 reassigning values to an array (because in the structured way, you have to do two loops ). It also does not require checking for '.' and '..' , because FileSystemIterator has a method called FileSystemIterator::isFile to check if the current file system is a folder or a file.

    
11.02.2015 / 15:06