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

Definindo Variáveis De Diretórios E Subdiretórios


Illidan

Pergunta

Galera, é o seguinte... Já tentei elaborar um script, mas estou empacado no meio. Eu precisava criar uma forma de definir umas variáveis automaticamente. Começa com isto:

$diretorio[0] = "home"; // diretório raiz

Aí o script abre esse diretório, lê seu conteúdo e vai nomeando os "arquivos" que são diretórios dessa pasta como:

$diretorio[1] = "home/imagens";

$diretorio[2] = "home/contatos";

$diretorio[3] = "home/cifras";

...

...

Entenderam? Aí, ele pega cada diretório desses, e varre por mais subdiretórios:

$diretorio[4] = "home/imagens/fotos";

$diretorio[5] = "home/cifras/paralamas";

$diretorio[6] = "home/cifras/legiao";

...

...

Basicamente, eu queria criar um script que você informando uma pasta "raiz", ele varreria o conteúdo dessa pasta definindo cada subdiretório num array, e assim por diante, até acabarem todos os subdiretórios.

É possível? Alguém já fez algo assim antes?

Por favor, me ajudem! blink.gif

Muito obrigado!

PS: Este é o código que criei até o momento. Ele define as variáveis da raiz:

$diretorio[0] = ".";

if ($dh = opendir($diretorio[0])) {

    $x = "0";

    while (($file = readdir($dh)) !== false) {

        if (is_dir($file) && ($file != ".") && ($file != "..")) {

            $x++;

            $diretorio[$x] = $file;

        }

    }

    closedir($dh);

}

Link para o comentário
Compartilhar em outros sites

Posts Recomendados

  • 0

E o número de pastas dos outros diretórios, tá certo então??? Nossa, acho que foi coincidência! hehehe biggrin.gif

Eu tentei fazer alguma coisa mudando o valor da variável $x, mas aqui não resolveu... ele continua não imprimindo nada. O problema está nesse "if (is_dir...)"

se eu tiro isso, ele retorna todo o conteúdo, inclusive das subpastas! E tb dá umas mensagens de erro pelo meio que eu teria que resolver depois... mas isso quando o script retornar somente os diretórios...

Entendeu onde está o problema? porque ele não retorna os diretórios com a função is_dir() ?

Por isso que cheguei a pensar na função clearstatcache();

Link para o comentário
Compartilhar em outros sites

  • 0
hehehe..

valeu Illidan..

tu mi ajudo... olha só... smile.gif

http://www.blweb.com.br/dir.php?dir=.

eu fazendo assim.... ai ele faz os links, quando tem arquivo inclui.... smile.gif aos pocos vo mudando...

Puxa, cara! Que boa notícia!

Pelo menos essa %$@#& está ajudando alguém... hehehe!

smile.gif

Link para o comentário
Compartilhar em outros sites

  • 0

AAAAAAAAAhhhhhhhhhhhhhhh

CARAMBA!!!!!!! DEU CERTO!!!!!!!!!!! CONSEGUI!!!!!!!

Sabe essa função is_dir($string); ??? O valor de $string TEM QUE SER RELATIVO! ERA ISSO!!!!!!!!

hehehehe biggrin.gifbiggrin.gifbiggrin.gifbiggrin.gifbiggrin.gif

Cara, muito obrigado pela ajuda de vocês!

Esperem que em breve vou postar um script de busca muito útil... você só coloca ele na raiz e ele varre por toda a página, sem precisar trabalhar com banco de dados, nem nada biggrin.gif

Valeu mesmo, meus amigos!

Link para o comentário
Compartilhar em outros sites

  • 0
AAAAAAAAAhhhhhhhhhhhhhhh

CARAMBA!!!!!!! DEU CERTO!!!!!!!!!!! CONSEGUI!!!!!!!

Sabe essa função is_dir($string); ??? O valor de $string TEM QUE SER RELATIVO! ERA ISSO!!!!!!!!

hehehehe biggrin.gifbiggrin.gifbiggrin.gifbiggrin.gifbiggrin.gif

Cara, muito obrigado pela ajuda de vocês!

Esperem que em breve vou postar um script de busca muito útil... você só coloca ele na raiz e ele varre por toda a página, sem precisar trabalhar com banco de dados, nem nada biggrin.gif

Valeu mesmo, meus amigos!

mas não tem perigo de ser muito lento? blink.gif

Link para o comentário
Compartilhar em outros sites

  • 0

É claro que tem esse inconveniente... mas isso vai depender do servidor e da quantidade de páginas a serem pesquisadas, tb...

Mas olhe o lado bom disso: um script que busca por todo o seu site sem você ter que criar tabelas e mantê-las atualizadas!!! Se você cria uma nova pasta, ou novos arquivos, nem precisa se preocupar... o script vai atrás automaticamente biggrin.gif

Fora que você não precisa configurá-lo... é só jogar o busca.php na raiz e boa. Agora vou dar um acabamento nesse script.

Ultimamente, tenho visto muita gente aqui no fórum pedindo esse tipo de coisa...

Link para o comentário
Compartilhar em outros sites

  • 0

Vou postar o código:

if ($dh = opendir($diretorio[0])) {  //  varre os diretórios da raiz

    $x = "0";

    while (($file = readdir($dh)) !== false) {

        if (is_dir($file) && ($file != ".") && ($file != "..")) {

            $x++;

            $diretorio[$x] = $file;

            echo $diretorio[$x] . " - " . $x . "<br />";  //  tirar no final

        }

    }

    closedir($dh);

}

clearstatcache();

for ($y = "1"; isset($diretorio[$y]); $y++) {  //  varre todos os subdiretórios

    if ($dh = opendir($diretorio[$y])) {

        while (($file = readdir($dh)) !== false) {

           if (is_dir("$diretorio[$y]/$file") && ($file != ".") && ($file != "..")) {

                $x++;

                $diretorio[$x] = $diretorio[$y] . "/" . $file;

                echo $diretorio[$x] . " - " . $x . "<br />";  //  tirar no final

            }

        }

        unset($file);

        closedir($dh);

    }

}

Tá vendo ali onde coloquei em vermelho? Antes estava só como $file, e esse era só o nome do arquivo... quando você usa a função is_dir(), você tem que informar o caminho relativo: $diretorio[$y]/$file, entendeu?

Coloque esse script aí e você vai ver ele escrever na tela todas as pastas e subpastas de um diretório raiz biggrin.gif

Ou seja, ele criará um array onde o índice 0 é a raiz, e todos os outros são subdiretórios dessa raiz... pode ser muito útil pra várias coisas rolleyes.gif

Falou! Um abraço!

Link para o comentário
Compartilhar em outros sites

  • 0

Ae, Blood... respondendo àquela sua dúvida: o script é rápido. Ele fez uma pesquisa em 541 arquivos em apenas 0,67 segundos.

O que determina o tempo é o número de ocorrências, pois ele processa cada uma delas (remove as tags, espaços em branco, etc.). Neste caso, ele retornou apenas 2 ocorrências. Mas eu vou criar um sistema de paginação dos resultados, de modo que esse tempo não vai aumentar muito biggrin.gif

Cara, que beleza...

Link para o comentário
Compartilhar em outros sites

  • 0

não se se pode se útil.... mas vo posta como fico o meu tongue.gif

<?php
include "css.css";
if(!$dir && !$arquivo){ $dir = "."; }
$diretorio[0] = "$dir";
if($dir !== "." && $dir){
	print '<a href='.$_SERVER['HTTP_REFERER'].'>Diretório Anterior<br><br></a>';
}
if ($dh = opendir($diretorio[0])) {
    $x = "0";
    while (($file = readdir($dh)) !== false) {
  if(is_dir($file) && $file !== "." && $file !== ".."){
            $x++;
            $diretorio[$x] = $file;
  	if($dir !== "."){
                echo "<b>".$x."</b>. <a href=?dir=".$dir."/".$diretorio[$x].">". $diretorio[$x]."</a><br>";  //  tirar no final
  	}else{
    echo "<b>".$x."</b>. <a href=?dir=".$diretorio[$x].">".$diretorio[$x]."</a><br>"; 
  	}
  }elseif(is_file($file) && $file !== "." && $file !== ".."){ 
  	$x++;
            $diretorio[$x] = $file;
  	if($dir !== "."){
                echo "<b>".$x."</b>. <a href=?arquivo=".$diretorio[$x]."&dir=".$dir.">". $diretorio[$x]."</a><br>";  //  tirar no final
  	}else{
    echo "<b>".$x."</b>. <a href=?arquivo=".$diretorio[$x].">".$diretorio[$x]."</a><br>"; 
  	}
  }
    }
    closedir($dh);
}

	if($arquivo){ 
  print '<br><br><b>Arquivo:</b> '.$arquivo;
  print '<br><br>';
  $e = explode(".", $arquivo);
  $ext = $e[1];
  if($ext=="JPG" || $ext=="jpg" || $ext=="gif" || $ext=="GIF" || $ext=="PNG" || $ext=="png" || $ext=="SWF" || $ext=="swf"){
  	print 'Arquivos de imagem/flash não são suportados =/';
  }else{
  	if($dir){
    include $dir."/".$arquivo; 
  	}else{
    include $arquivo;
  	}
  }
	}
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Valeu, sempre é útil... uma dica para o seu script:

Coloque a extenção assim:

$ext = strtolower(end(explode(".", $arquivo)));

Ele já retorna a extensão em minúsculas (você não precisa repetir no if para o caso da extensão estar em maiúsculas). Além disso, o nome do arquivo pode ter algum ponto pelo meio, e aí a variável $e[1] no seu código não será a extensão, certo? Desta forma ele puxa direitinho por causa da função end(), que retorna o último elemento de um array biggrin.gif

Falou!

Link para o comentário
Compartilhar em outros sites

  • 0

ah... esqueci de loga... laugh.gif

...aproveitando..

o script ali não ta exibindo todos os arquivos.. blink.gif

alguém sabe porque? .. exemplo..

http://blweb.com.br/dir.php?dir=avatar

e

http://www.blweb.com.br/avatar/

...vlws.. ph34r.gif

-----------

ah consigui arruma tongue.gif

o is_file() tava bugando ... flws

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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...