Script PHP Para Exibir Arquivos e Pastas de Um Diretório

13 Comentários 21 março 2010

 
Script PHP Para Exibir Arquivos e Pastas de Um Diretório

Script PHP Para Exibir Arquivos e Pastas de Um Diretório

Muitas vezes, em determinadas tarefas, precisamos listar os arquivos e pastas de algum diretório específico.

E para facilitar a sua vida, estou disponibilizando um script em PHP totalmente grátis que serve para fazer uma listagem elegante com função de navegação. Ou seja, é possível clicar num arquivo para fazer o download, ou numa pasta para vizualizar seu conteúdo.

Além disso, o script possui uma estrutura que torna fácil um mudança completa de layout, ou  a inserção em um layout já pronto.

 

É claro que este sistema ainda pode ser melhorado. Uma alteração que poderíamos providenciar seria o envio de arquivos por email. Outra seria a contagem de pastas e arquivos. E a última, seria a função de deletar arquivos ou pastas, fazer upload de arquivos e criar pastas.

Quem tiver interesse em ajudar, basta se manifestar comentando.

Ajuda é sempre bem-vinda.

<?php

/*
Script distribuído por brasilphp.net
Qualquer dúvida, escreva para contato@brasilphp.net
Para criação e manutenção de scripts e sistemas, escreva para contato@sobralsites.com
*/

function varSet($VAR) { return isset($_GET[$VAR]) ? $_GET[$VAR] : ""; }
$action = varSet("action");
$pasta = base64_decode(varSet("pasta"));

//Lista dos arquivos que nao serão listados
$denyFiles = array(".htaccess","thumbs.db");

if ($action == "download") {
    $file = base64_decode(varSet("file"));
    header("Content-disposition: attachment; filename=\"".basename($file)."\"");
    readfile(".$file");
    exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Listagem de Arquivos</title>
<style type="text/css">
body {
    font:11px Verdana, Arial, Helvetica, sans-serif;
    padding:0px;
    margin:0px;
}
a {
    text-decoration:none;
    color:#003366;
}
a:hover { color:#0099CC }
.row1 { background-color:#F7F7F7 }
.row2 { background-color:#EBEBEB }
.rowOver { background-color:#C7DCFC }
.extCell { font-weight:bold }
</style>
<script language="javascript" type="text/javascript">
function over(Obj) {
    nClass = Obj.className
    Obj.className = "rowOver"
    Obj.onmouseout = function() {
        Obj.className = nClass
    }
}
</script>
</head>

<body>
<?php
if ($action == ""):
$fdir = "./$pasta";
chdir($fdir);
$dir = opendir(".");
while ($file = readdir($dir)) if (is_dir($file)) $dirs[] = $file; else $files[] = $file;
$row = 2;
?>
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
    <td height="50px;"><strong>P.S:</strong> "listar.php" é o arquivo deste sistema</td>
  </tr>
  <tr>
    <td height="50px;"><strong>Exibindo:</strong> ROOT <?php echo empty($pasta) ? "" : $pasta; ?></td>
  </tr>
</table>
<table width="700" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr style="font-weight:bold">
    <td width="55" height="20">&nbsp;</td>
    <td width="204">Nome</td>
    <td width="130">Tamanho</td>
    <td width="316">A&ccedil;&otilde;es</td>
  </tr>
<?php if ($pasta != ""): ?>
  <tr class="row<?php echo $row; ?>" onmouseover="over(this)">
    <td align="center" width="55" height="20" class="extCell">[DIR]</td>
    <td><a href="?pasta=<?php echo base64_encode(substr("$pasta",0,strrpos($pasta,"/"))); ?>">..</a></td>
    <td>--</td>
    <td>&nbsp;</td>
  </tr>
<?php endif; ?>
<?php
if (is_array($dirs)) :
    sort($dirs);
    foreach ($dirs as $nome):
    if ($nome == ".." || $nome == ".") continue;
    if ($row == 2) $row = 1; else $row = 2;
?>
  <tr class="row<?php echo $row; ?>" onmouseover="over(this)">
    <td align="center" width="55" height="20" class="extCell">[DIR]</td>
    <td><a href="?pasta=<?php echo base64_encode("$pasta/$nome"); ?>"><?php echo $nome; ?></a></td>
    <td>--</td>
    <td>&nbsp;</td>
  </tr>
<?php
    endforeach;
endif;
?>
<?php
if (is_array($files)):
    sort($files);
    foreach ($files as $nome):
    if (in_array(strtolower($nome),$denyFiles)) continue;
    if ($row == 2) $row = 1; else $row = 2;
    $tamanho = filesize("./$nome");
    $info = pathinfo("./$nome");
?>
  <tr class="row<?php echo $row; ?>" onmouseover="over(this)">
    <td align="center" width="55" height="20" class="extCell">[<?php echo strtoupper($info["extension"]); ?>]</td>
    <td>
<a href="?action=download&file=<?php echo base64_encode("$pasta/$nome"); ?>"><?php echo $nome; ?></a>
    </td>
    <td><?php echo $tamanho > 1048576 ? round($tamanho/1048576,2)." Mb" : round($tamanho/1024,2)." Kb"; ?></td>
    <td>&nbsp;</td>
  </tr>
<?php
    endforeach;
endif;
?>
</table>
<?php endif; ?>
</body>
</html>
<?php closedir($dir); ?>

Me siga no Twitter para ficar por dentro das novidades do blog.

Leia Também

Tags: , , , , , , , ,

- escreveu 359 artigos em Brasil PHP.

Sou administrador de empresas, programador PHP, desenvolvedor web, marketeiro digital e me considero um problogger. Sou o editor do Brasil PHP e meu principal objetivo é levar conteúdos únicos e altamente relevantes para os leitores do blog. Aqui são abordados assuntos como criação de sites, monetização, programação PHP, SEO, Guias Comerciais, Classificados etc.

Entre em contato com o autor

Seus Comentários

13 Comentários até agora

  1. Igor Souza disse:
    Excelente script! Tem como adapta-lo para exibir somente quando eu apertar um botão e apenas um determinado arquivo em que eu digite seu nome em um campo texto?

    Legal ou Bobagem: Positivo 0 Negativo 0

  2. Kassia Luana disse:
    Hellston parabéns pelo post! Me ajudou muito! Super organizado e explicativo!

    Valeu

    Legal ou Bobagem: Positivo 0 Negativo 0

  3. Eduardo Valente disse:
    Muito boa sua dica. Estava procurando por isso e como sou iniciante na arte foi de muita ajuda. Ele atende as minhas necessidades mas me incomodou a exibição do arquivo index.php. Como faço para proibir a exibição de determindados arquivos? Grato e me avise pro e-mail, please…

    Legal ou Bobagem: Positivo 1 Negativo 0

  4. O leitor Wesley Oliveira me perguntou o seguinte “Sou iniciante em php, e estou usando este seu script. Gostaria de saber como faço para mudar o diretório inicial ex: root/plantas.”

    Para fazer isso basta alterar a linha 11:

    //trocando
    $pasta = base64_decode(varSet("pasta"));
    //por
    $pasta = base64_decode(varSet("plantas"));
    

    Isso deve funcionar. Qualquer dúvida, pode perguntar abaixo. Até mais.

    Legal ou Bobagem: Positivo 0 Negativo 0

    • Kassia Luana disse:
      Fiz assim:

      <?php
      //DE:
      $pasta = base64_decode(varSet("pasta"));
      //PARA:
      $pasta = './arquivos';
      ?>
      

      Não sei se pode causar problema de desempenho. Mas resolveu…rs

      Legal ou Bobagem: Positivo 1 Negativo 0

      • Kassia, não dá problemas de desempenho, mas pode eventualmente não funcionar bem. Mas depende da finalidade que você estiver dando ao script.

        Legal ou Bobagem: Positivo 1 Negativo 0

      • Kassia Luana disse:
        Hellston, pode me ajudar?

        Quando mudo

        //PARA:

        $pasta = ‘./arquivos’;

        não consigo abrir os arquivos que está no diretorio.

        Ja mudei la embaixo do codigo onde fica:

        DE:
        $fdir = “./$pasta”;

        PARA:
        $fdir = “$pasta”;

        Mas mesmo assim não consigo abrir os arquivos, não localiza.

        Pode me ajudar?

        Agradeço!!

        Legal ou Bobagem: Positivo 0 Negativo 0

  5. CHARLES CORRÊA disse:
    Seria legal essas funções Roney, outra coisa legal que seriam bom ter era de abrir, editar e salvar algum arquivo HTML e PHp dentro do script e a função de enviar arquivos via FTP diretamente por ele.

    Ja pensei no assunto e estou estudando o assunto, pois também sou novato em PHP

    Legal ou Bobagem: Positivo 1 Negativo 0

  6. Roney disse:
    Olá, achei tem interessante esse script.
    Estava querendo fazer algumas ações como exemplo (rename) mover um arquivo para uma pasta determinada.

    Como poderia fazer isso, pois sou novato e não estou conseguindo fazer essa “ação”!

    Parabéns pelo site!

    Legal ou Bobagem: Positivo 1 Negativo 0





Comentadores

© 2009/2012 Brasil PHP - Feito com Wordpress - Política de Privacidade -

Tema por Woo Themes