Ir para conteúdo
Fórum Script Brasil
  • 0

Como Modificar Este Script De Listagem De Arquivos De Um Diretório?


andrelino

Pergunta

Como Modificar Este Script De Listagem De Arquivos De Um Diretório?

Olá amigos,

tenho um script muito bom para listar arquivos em um determinado diretório... Porem estou com o seguinte problema, não estou conseguindo adicionar as seguintes funções a ele:

1. Definir um diretório base. Ou seja quero que ele liste apenas o que está dentro do diretório base arquivos (ex. www.meusite.com.br/listfile.php?dir=fotos"qualquer pasta o arquivo a partir daki") se eu modificar a url para listar o que está dentro de um diretório que não seja o definido como base ou qualquer outro que esteja fora do direitório base ou mesmo o raiz do site (ex. wwww.meusite.com.br/listfile.php?dir=filmes), vai resultar em erro.

2. Adicionar um campo para busca de conteúdo. Ou seja se dentro de um pasta tiver 1000 fotos ou arquivos e quero encontrar um com o nome x então basta digitar no campo e pedir para pesquisar e então será retornado todos os arquivos que tiverem o nome que pedir para pesquisar.

3. Paginar os resultados em 100 itens por página. Exemplo, se tenho 1000 arquivos então terei 10 páginas de resultados.

4. Ordenar o resultado em ordem alfabética

Segue abaixo o meu código do arquivo listfile.php

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>
<?php
$dir=isset($_GET['dir'])?$_GET['dir']:"./"
;
if($dir[strlen($dir)-1]!='/')$dir=$dir."/";
echo $dir2=$dir;
?>
</title>
</head>
<body onselectstart="return false" oncontextmenu="return false">


<table width="100%" border="0" align="center">
   <tr bgcolor="#6C7B8B">
    <td width="65%"><div align="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Arquivo</font></strong></div></td>
    <td width="15%"><div align="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Tamanho</font></strong></div></td>
    <td width="20%"><div align="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Data</font></strong></div></td>
     </tr>
<?php

$dir=utf8_encode($dir);
/* Script para listar arquivos do diretório, com os respectivos links */
$list=array_reverse(explode("/",$_SERVER['SCRIPT_NAME']));
$list=$list[0];
if ($handle = @opendir($dir))
{
        
        
        
        $x=0;
        while (false!==($file=readdir($handle)))
        {       //lê arquivos do diretório
                if ($file!="." && $file!=".." && $file!="index.php" )
                {             //evita leitura de . e ..
                        $file2=utf8_decode($file);
                        if($x%2==0)
                        {
                                echo '<tr bgcolor="#D3D3D3">';
                        } //if
                        else
                        {
                                echo '<tr bgcolor="#BEBEBE">';
                        } //else
                        $type=getimagesize($dir.$file);
                        $type=$type['mime'];
                        echo '
                        <td><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><li> <a href="'.(@opendir($dir.$file)?$list."?dir=".$dir2.$file2:
$dir2.$file2).'"'.(empty($type)?'':' class="imagem"').'>'.$file2.'</a></font></strong>
</td>
                        <td align="left"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">'.(@filesize($dir.$file) > 1048576 ? round(@filesize($dir.$file)/1048576,2)." Mb" : round(@filesize($dir.$file)/1024,2)." Kb").'</font></strong></td>
                        <td align="center"><strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">'.date("d/m/Y", @filemtime($dir.$file)).'</font></strong></td>
                        </tr>
                        ';
                        $x++;
                } //if
        } //while
        closedir($handle);                         //fecha o diretório
        if($x<=0)
        {
                echo '
        <tr bgcolor="#D3D3D3">
                <td colspan="3" align="center">Ainda não existem arquivos nesta pasta!</td>
        </tr>';
        }
} //if

function diretorio($path) {
global $tamanho_arquivo, $tamanho_total, $total_pastas;
if ($dir = opendir($path)) {
while (false !== ($file = readdir($dir))) {
if (is_dir($path."/".$file)) {
if ($file != '.' && $file != '..') {

$total_pastas++;
}
}
else {
$tab = " ";
$filesize = $tab . '(' . filesize ($path.'/'.$file) . ' kb)';
$tamanho_total = $tamanho_total + filesize ($path.'/'.$file);
$tamanho_arquivo++;
}
}
closedir($dir);
}
}

diretorio($dir.$file);//path da sua pasta

$tamanho_total = round($tamanho_total / 1024 / 1024, 2);


echo"
<b>Total de Arquivos</b> - $tamanho_arquivo arquivos<br>
<b>Tamanho da Pasta</b> - $tamanho_total MB<br>
";


echo       
              '<tr bgcolor="#6C7B8B">
               <td colspan="1" align="center"> <strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">';
echo
               "<b>Total de arquivos</b> - $tamanho_arquivo arquivos";
echo 
             '</font></strong></td>';
             
echo       
              '<td colspan="2" align="center"> <strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">';
echo
               "<b>Tamanho da pasta</b> - $tamanho_total MB";
echo 
             '</font></strong></td></tr>';

echo       
              '<tr bgcolor="#363636">
               <td colspan="3" align="center"> <strong><font size="2" face="Verdana, Arial, Helvetica, sans-serif">';
echo
               "<----------------------------------->";
echo 
             '</font></strong></td></tr>';

?>

        </tr>
</table>
</body>
</html>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Olá, tentando responder o tópico 1: - Lá pela linha 10, defina o diretorio padrão. Exemplo: $dir="../imagens/";

não permita a mudança de diretório, o que vai facilitar a alteração do script. Pode-se até excluir o envio do $dir via URL, já que ele vai ficar fixo.

tópico 2: use strpos('variavel com texto','texto buscado'); para achar os arquivos na busca:

$x=0;

while (false!==($file=readdir($handle)))

{ //lê arquivos do diretório

if ($file!="." && $file!=".." && $file!="index.php" )

{ //evita leitura de . e ..

if (strpos($file, $busca)>0) {

...

...

$x++;

}// if do busca

} //if

} //while

closedir($handle); //fecha o diretório

if($x<=0)

{ ...

tópico 3: Nesse caso, eu iria optar em fazer a busca completa dos arquivos e guardaria a quantidade de arquivos ($Quantidade). Depois faria um laço e mostraria somente os arquivos que estivessem entre o $posicao_inicial e $posicao_final. Em caso de clique para próxima página, faria o link com o valor de $posicao_inicial=posicao_inicial+100. Para a página anterior: $posicao_inicial=posicao_inicial-100. É claro que tem de verificar se o valor da $posicao_inicial não estrapola o valor de $Quantidade.

tópico 4: Para colocar em ordem alfabética iria pensar em usar o sort(), ("http://www.php.net/manual/pt_BR/function.sort.php"). Teria de colocar todos os resultados da busca em um array...

Espero que essas dicas lhe dêem alguma luz! Não é um código simples de ser alterado para essas suas exigências.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...