Jump to content


Photo

Listagem de arquivos em diretorios e sub


  • Faça o login para participar
3 replies to this topic

#1 keitarosan

keitarosan

    Normal

  • Usuários
  • 105 posts
  • Sexo:Não informado
  • Localidade:Hinata Sou
  • Interesses:Linguagens de programação.

Posted 25/09/2003, 01:13

Aew pessual, fiz esse script, alias, são dois... Goxtaria que voces testassem e mi falem u ki axaram dele... si axarem bugs, ficarei grato si mi relatarem o mesmo...

 function ListagemDir($InitialDir, $WithSubDir)
  {
    if ($InitialDir[strlen($InitialDir)] == "/") //verificando se o ultimo char de diretorio inicial eh uma barra
      $dirs[0] = $InitialDir; else  //caso seja, atribui ao primeiro elemento do vetor de diretorios
      $dirs[0] = $InitialDir . "/"; //caso contrario, atribui ao primeiro elemento do vetor de diretorios e maix uma barra
    $dir_atual = $dirs[0]; //atribuindo o valor do primeiro diretorio a ser verificado

    //Gerando a lista no diretório inicial
    if ($dir_open = @opendir($dir_atual)) //abrindo o primeiro diretorio
    {
      $contdirs = 0; //contador de total de diretorios e subdiretorios
      $contfiles = 0; //contador de total de arquivos
      while ($file = readdir($dir_open)) //loop - lendo cada arquivo do diretorio que foi aberto
      {
        if (($file <> ".") and ($file <> "..")) //checando se o arquivo atual eh o proprio diretorio atual ou um diretorio acima
        {
          if (is_dir($dir_atual . $file)) //se o arquivo atual for um diretorio
          {
            $cont_dirs++; //Incrementando o contador de diretorios
            $dirs[$cont_dirs] = $dir_atual . $file; //lista de diretorios recebe o diretorio encontrado
          } else
          {
            $files_dir[$cont_files] = $dir_atual; //lista de diretorios do arquivo recebe o diretorio do arquivo
            $files_name[$cont_files] = $file; //lista de arquivos recebe o nome do arquivo encontrado
            $cont_files++; //imcrementando o contador de arquivos
          }
        }
      }
      closedir($dir_open); //fecha o diretorio aberto

      if ($WithSubDir) //Verificando se foi indicado a inclusão de subdiretórios
      {
        for ($cont = 1; $cont < count($dirs); $cont++) //rodando o loop na lista de diretorios
        {
          $dir_atual = $dirs[$cont]; //diretorio atual recebe um item da lista

          if ($dir_open = @opendir($dir_atual)) //abrindo diretorio
          {
            while ($file = readdir($dir_open)) //daki pra frente eh igual tava lah em cima
            {
              if (($file <> ".") and ($file <> ".."))
              {
                if (is_dir($dir_atual . "/" . $file))
                {
                  $cont_dirs++;
                  $dirs[$cont_dirs] = $dir_atual . "/" . $file;
                  $items_d++;
                } else
                {
                  $files_dir[$cont_files] = $dir_atual . "/";
                  $files_name[$cont_files] = $file;
                  $cont_files++;
                  $items_f++;
                }
                $items++;
              }
            }
            closedir($dir_open);
          }
        }
      }

      array_multisort($files_dir, $files_name); //organizando a lista de arquivos por ordem alfabetica
      reset($files_dir); //jogando o ponteiro do vetor para o inicio
      reset($files_name);
      while (list($index, $value) = each($files_dir))
        $files[$index] = $files_dir[$index] . $files_name[$index]; //juntando o diretorio ao nome do arquivo e armazenando em um vetor

      return $files; //retornando o vetor de arquivos
    } else
      return false; //falha, retorando false a função
  }

Syntax:
ListagemDir($InitialDir, $WithSubDir)

$InitialDir (String) - Diretório a ser verificado
$WithSubDir (Boolean) - Especifica se os subdiretórios tambem devem sem verificados

Valor de retorno:
Se a função for executada com sucesso, o valor de retorno é um array contendo todos os arquivos do diretório
Caso, a função encontre algum erro, impedindo-a de ser executada, ela retorna False


--------------------

 function FileSearch($mascara, $files)
  {
    //montando a expressao regular
    $mascara = str_replace(".*", "<pontoa>", $mascara);
    $mascara = str_replace(".", "<ponto>", $mascara);
    $mascara = str_replace("?", ".", $mascara);
    $mascara = str_replace("*", "[[:alnum:][:punct:]_ ]*", $mascara);
    $mascara = str_replace("<ponto>", "\.", $mascara);
    $mascara = str_replace("<pontoa>", "\.?", $mascara);
    $mascara .= "$";
    $mascara = "/$mascara";
    $mascara = explode(";", $mascara);

    reset($files); //jogando o poteiro ao inicio do vetor
    while (list($index, $value) = each($files))
    {
      $value_temp = substr($value, strrpos($value, "/"));
      $cont = 0;
      while ($cont < count($mascara))
      {
        if (eregi($mascara[$cont], $value_temp) > 0)
          $files_masked[$index] = $value;
        $cont++;
      }
    }
    if (isset($files_masked))
      return $files_masked; else
      return false;
  }

Syntax:
FileSearch($mascara, $files)

$mascara (String) - Critérios de busca. ex.: *.jpg;*.gif
$files (Array) - Array contendo a lista de arquivos que serão examinados

Valor de retorno:
Se a função for executada com sucesso, o valor de retorno é um array contendo todos os arquivos que obedecem aos critérios de busca
Caso, a função encontre algum erro, impedindo-a de ser executada, ela retorna False


Bom, deu pra notar que o segundo parametro da segunda função pode ser conseguido, usando a primeira função, neh? hehehe

Vou dar um exemplo de como utilizar:
  //mostrando como funciona a função
  $filelist = ListagemDir(".", true);
  if ($filelist != false)
  {
    $listagem = FileSearch("*.gif;*.jpg", $filelist);
    if ($listagem != false)
    {
      reset($listagem);
      while (list($index, $value) = each($listagem))
        echo "<a href=\"$value\">$value</a><br>";
    }
  }

esse exemplo acima ira criar uma listagem de links dos arquivos encontrados, que no caso podem qualquer arquivo de extensao GIF(*.gif) ou qualquer um de extensão JPG (*.jpg)... notem que coloquei um ponto "." para busca no diretório raiz do servidor, para busca em um subdiretório, basta colocah um caminhu, tipow "subdir/subdir", no raiz eh necessario o "."(ponto)...

Pagina no ar de exemplo

Blz... ixpero que goxtem :D

Edição feita por: keitarosan, 25/09/2003, 07:09.

Você assiste muitos vídeos? ouve muita música? porém está cansado daqueles players super pesados? Pegue então o MOVIE AND ÁUDIO PLAYER, bastante recursos legais e relativamente leve... Aproveite e avalie o player deixando seu voto ^__^v

http://superdownload...oad/i11204.html

function TKeitaroSan.GetIcq: string;
begin
  result = '92197405';
end;

#2 Guest

Guest
  • Visitantes

Posted 29/09/2003, 16:32

Pô véio... era exatamente disso que eu tava precisando, muito bom :P

#3 Balala

Balala

    What you want for yourself?

  • Ex-Admins
  • 3357 posts
  • Sexo:Não informado
  • Localidade:Jaraguá do Sul - SC
  • Interesses:http://forum.wmonline.com.br/index.php?showtopic=5792

Posted 30/09/2003, 09:55

Muito boa sua contribuição para o Fórum keitarosan (y)

Há muitas dúvidas rolando sobre listagem de arquivos
Balala - Admin Geral Webfórum - Retired
Twitter
Stop Spreading Lies!
Posted Image

#4 dattebayoo

dattebayoo

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Não informado

Posted 12/10/2007, 13:18

Parabens!!..eh o q eu procurava....mas eu sou novo nessa area, e to tentando fz algo assim

$number = $_POST["numero"];
$data = $_POST["data"];

//mostrando como funciona a função
$filelist = ListagemDir(".", true);
if ($filelist != false)
{
$listagem = FileSearch($number."-".$data."doc", $filelist);
if ($listagem != false)
{
reset($listagem);
while (list($index, $value) = each($listagem))
echo "<a href=\"$value\">$value</a><br>";
}
}

eu gostaria que o usuario entrasse com parte do nome do arquivo que ele quer encontrar, ex: 93422923-20071021.doc, mas num tah dando certo, alguem poderia me ajudar por favor?..=]




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq