Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

cassiano óliver

Listar pastas de um diretório...

Recommended Posts

pesquisando como listar pastas de um diretório, consegui montar isso...

fiz com base no próprio site do php.net..

<?php

$galerias = "../GaleriaDeFotos/galerias";

$abri = opendir($galerias);

while ($pasta = readdir($abri)) {

if ($pasta != "" && $pasta != ".." && pasta != ".") {

if (is_dir($pasta)) {

echo $pasta;

}

}

}

?>

só que só exibe a pasta _ notes, e outro detalhe, ele exibe assim:

._notes

 

tem mais pastas, mas ele só exibe a _notes e com esse "ponto" antes...

 

outra coisinha, a linha aí em negrito, o que ela faz?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta não é a forma correta de se varrer uma pasta.

Veja o exemplo, retirado do guia de referência:

while (false !== ($file = readdir($handle))) {
		echo "$file\n";
	}

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu sei márcio, o exemplo que postei acima também retirei de lá...

mas mesmo alterando, continua a mesma coisa...

 

<?php
$galerias = "../GaleriaDeFotos/galerias/";
$abri = opendir($galerias);
while (false !== ($pasta = readdir($abri))) {
	if ($pasta != "" && $pasta != ".." && pasta != ".") { 
		if (is_dir($pasta)) {
			echo $pasta;
		}
	}
}
?>

só aparece:

._notes

 

as outras pastas não aparecem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

vou testar em casa hahaah

porque aqui no trabalho a função glob não funciona...

não sei porque, o mesmo script que tenho usando essa função, em casa roda certinho...

aqui no trabalho não funciona...

 

mas vlw frenesi...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se estiver usando o PHP5 você também pode fazer da seguinte forma

 

$dir = new DirectoryIterator('C:');

 

foreach( $dir as $diretorio ){

 

echo $dir.'<BR>';

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

copiei seu código e colei aqui e realmente funcionou...

 

mas quando alterei o diretório, deu erro...

 

<?php
$dir = new DirectoryIterator('../../GaleriaDeFotos/galerias/');

foreach( $dir as $diretorio ){

echo $diretorio.'<br>';

}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

ops..

tava errado mesmo!

 

mas olha só, ta aparecendo as pastas..

mas aparece também um . e ..

 

assim ó:

 

.

..

GaleriaTeste

_notes

 

<?php
$dir = new DirectoryIterator('../GaleriaDeFotos/galerias/');

foreach( $dir as $diretorio ) {
	echo $diretorio.'<br>';
}
?>

corrigi, fazendo isso:

<?php
$dir = new DirectoryIterator('../GaleriaDeFotos/galerias/');

foreach( $dir as $diretorio ) {
	if ($diretorio != "." && $diretorio != "..") {
		echo $diretorio.'<br>';
	}
}
?>

o que é esse "." e ".."?

 

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

 

Ah e outra, essa solução, é php5 certo?

mas o server onde o site ta hospedado é php4 ainda se não me engano, então precisaria de um script que funcione no php4...

 

se puder me ajudar no 1º script que postei...

Compartilhar este post


Link para o post
Compartilhar em outros sites

esse . significa diretório atual .. diretório de recuo, exatamente como no caminho que você havia colocado, eles geralmente são ocultados nos sistemas operacionais mas existem, se você pegar um terminal linux e der um ls -a eles irão aparecer.

 

É só você reparar também no comando cd .., que volta um diretório e no cd . que permanece no diretório.

 

 

Realmente o código que eu te passei só serve para o PHP5( bem mais prático), em todo caso alterei o seu agora ele lista APENAS os diretórios, os arquivos não.

<?php

$galerias = "c:";
$abri = opendir($galerias);

while (false !== ($pasta = readdir($abri))) {
	if ($pasta != "" && $pasta != ".." && $pasta != ".") {
		if (is_dir('/'.$pasta)) {
			echo $pasta.'<BR>';
		}
	}
}

  closedir($abri);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

copiei o seu e colei, mas continua não mostrando as pastas...

 

bom, quase consegui aqui...

testei com o glob agora e funcionou, não sei porque no trabalho não funciona...

 

<?php
$dir = glob ("../GaleriaDeFotos/galerias/*", GLOB_ONLYDIR);
foreach ($dir as $pastas) {
	if (is_dir ($pastas)) {
		echo $pastas."<br>";
	}
}
?>

só que como coloquei GLOB_ONLYDIR, deveria exibir somente os diretórios?

ta aparecendo o caminho todo...

EX: ../GaleriaDeFotos/galerias/pasta

../GaleriaDeFotos/galerias/pasta2

 

aff...

Compartilhar este post


Link para o post
Compartilhar em outros sites

De fato aparece só os diretórios mas com o caminho completo. :)

 

Não precisa dessa comparação que você faz ai dentro do foreach() não, basta o GLOB_ONLYDIR.

 

Use a função basename() para obter somento o nome da pasta.

 

O motivo de não funcionar no seu trabalho pode ser a versão do PHP também. ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.