• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

vitoque

Listar directorio por data

14 mensagens neste tópico

$abrir  = opendir($diretorio); 
while ($nome_arquivos = readdir($abrir)) {    
$arquivos[] = $nome_arquivos;
}

foreach($arquivos as $listar){ 
$tamanho_arquivo = round(filesize("$diretorio/$listar")/1024);
$dataficheiro = date ("d/M/Y \à\s H:i:s", filemtime("$diretorio/$listar"));
}

Como poço listar este directorio os ficheiros que lá tem dentro por ordem de criação?

Ou seja quero listar por ordem de entrada é possivel?

Eu já tenho as datas dos ficheiros $dataficheiro[]

que me dá algo do tipo:

26/Jun/2009 as 14:36:49

26/Jun/2009 as 14:36:48

26/Jun/2009 as 14:36:55

26/Jun/2009 as 14:36:51

26/Jun/2009 as 14:36:53

se eu fizer :

sort($dataficheiro);	
foreach($datafile as $bb){
echo"$bb<br>";
}

Ele irá dar isto que eu quero :

26/Jun/2009 as 14:36:48

26/Jun/2009 as 14:36:49

26/Jun/2009 as 14:36:51

26/Jun/2009 as 14:36:53

26/Jun/2009 as 14:36:55

Mas o mal é que depois já não consigo ir buscar os ficheiro é possivel ordenar com o foreach? é que não tou a ver como fazer isto

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes definir no foreach um array, onde a key irá ser filemtime("$diretorio/$listar") depois fazes um ksort e iteras novamente o esse array.... com isso tens o teu problema resolvido ( por exemplo, claro, existem outras maneiras... )

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podes definir no foreach um array, onde a key irá ser filemtime("$diretorio/$listar") depois fazes um ksort e iteras novamente o esse array.... com isso tens o teu problema resolvido ( por exemplo, claro, existem outras maneiras... )

Não percebi muito :) podias me exemplificar sff, se nao for pedir muito!

É que nao estou a ver como posso dizer ao array que a key vai ser o filemtime("$diretorio/$listar")

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não percebi muito :) podias me exemplificar sff, se nao for pedir muito!

É que nao estou a ver como posso dizer ao array que a key vai ser o filemtime("$diretorio/$listar")

O que pretendes exactamente fazer com os ficheiros depois de ordenar por data?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu apenas quero é listar um directorio e o que tiver esse directorio é listar esses ficheiros por data só isso... mais nada...

tenho isto:

<?

$directorio= "ano";

$ponteiro  = opendir($diretorio); // monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {    
$itens[] = $nome_itens;
}


sort($itens);
foreach ($itens as $listar) {  
if ($listar!="." && $listar!=".." && $listar!="Thumbs.db" && $listar!=".svn"){ 	
	if (is_dir("$diretorio/$listar")) { 	
	$pastas[]=$listar; 		
	} else{
	$arquivos[]=$listar;
	}   
}
}

//lista as pastas se ouver
if ($pastas != "" ) { 
foreach($pastas as $listar){
echo"$listar"; 
}

//lista os arquivos se houver
if ($arquivos != "") {

foreach($arquivos as $listar){  
echo"$listar";
}

}

?>

Agora eu nao sei é fazer com que ao listar ordenar por data...

O que pretendes exactamente fazer com os ficheiros depois de ordenar por data?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu apenas quero é listar um directorio e o que tiver esse directorio é listar esses ficheiros por data só isso... mais nada...

Fiquei a saber o mesmo, mas vou partir do pressuposto que queres listar os directórios com o nome respectivo e data. Nesse caso, é melhor usares a função array_multisort().

Exemplo (não testado) :

<?

$abrir  = opendir($diretorio); 
while ($nome_arquivos = readdir($abrir)) {    
$arquivos[] = $nome_arquivos;
}

foreach($arquivos as $listar){ 
$tamanho_arquivo = round(filesize("$diretorio/$listar")/1024);
$datafile = date ("d/M/Y \à\s H:i:s", filemtime("$diretorio/$listar"));
$nomefile = $listar;
}


///////////////////


array_multisort($datafile, $nomefile);
$max = count($datafile);
for (x = 0; x<=$max; $x++) {        
echo "nome : ".$nomefile[$x].", data :".$datafile[$x]."<br>";
}

?>

Se não funcionar avisa, escrevi o código por alto e falta meter aí pelo meio o resto do código que tens, foi apenas para dar a ideia do funcionamento. :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yoda o que eu quero é ordenar por data tudo o que esta dentro do directorio, realmente não me estava a fazer entender, tenho este código:

<?

$directorio= "ano";

$ponteiro  = opendir($diretorio); // monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {    
$itens[] = $nome_itens;
}


sort($itens);
foreach ($itens as $listar) {  
        if ($listar!="." && $listar!=".." && $listar!="Thumbs.db" && $listar!=".svn"){         
                if (is_dir("$diretorio/$listar")) {         
                $pastas[]=$listar;                 
                } else{
                $arquivos[]=$listar;
                }   
        }
}

//lista as pastas que existir
if ($pastas != "" ) { 
foreach($pastas as $listar){
echo"$listar"; 
}

//lista os arquivos que existir
if ($arquivos != "") {

foreach($arquivos as $listar){  
echo"$listar";
}

}

?>

É possivel ordenar por data?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O exemplo que dei foi pensado para ordenar por data e manter a relação entre a data e o nome do ficheiro, para poder ser listado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

yoda.pt o codigo que escreveste tive a testar e nao esta a funcionar: até a parte de listar e guardar num array funciona mas esta acho que não a dar o que será?

array_multisort($datafile, $nomefile);
$max = count($datafile);
for (x = 0; x<=$max; $x++) {        
echo "nome : ".$nomefile[$x].", data :".$datafile[$x]."<br>";
}

O exemplo que dei foi pensado para ordenar por data e manter a relação entre a data e o nome do ficheiro, para poder ser listado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Quando estás a listar a directoria, vais enchendo ao mesmo tempo do $ficheiros uma array $ficheirosMod com o filemtime(), e depois, usas uma das funções de sort para ordenar o $ficheirosMod sem alterar os indexes. Depois é só iterar o $ficheirosMod com o foreach desta maneira:

foreach($ficheirosMod as $k => $v) echo "Nome: ", $ficheiros[$k], " Modificado: ", $v, "<br />\n";

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

amigo yoda.pt

tens um erro no teu codigo

quando fazes

$max = count($datafile);

for (x = 0; x<=$max; $x++) {       

echo "nome : ".$nomefile[$x].", data :".$datafile[$x]."<br>";

}

nao é menor ou igual é so menor

for (x = 0; x<count($datafile):confused: {       

echo "nome : ".$nomefile[$x].", data :".$datafile[$x++]."<br>";

}

tenta assim

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@elcsat,

não se deve colocar chamadas a funções num ciclo, vai fazer o php chamar a função em cada ciclo e só come mais tempo de execução :cheesygrin:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ainda gostava de saber como evitas fazer chamadas de funções num ciclo?!?!?!? a menos que n faças nem um echo tas tramado lol.

mas há tantas formas de fazer isso

ao ler o directório podes ordenar logo isso, vais adicionando a um array e verificas a ordem da data.

podes usar funções recursivas etc.

Um bocadinho de algoritmia antes de passar a código ajuda

fica bem

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ainda gostava de saber como evitas fazer chamadas de funções num ciclo?!?!?!? a menos que n faças nem um echo tas tramado lol.

Colocar uma função count(), neste caso, dentro de um ciclo for, vai fazer a função ser chamada tantas vezes quantas o ciclo tiver de se repetir. Se colocares a chamada dessa função fora do ciclo e atribuires o resultado a uma variável, evitas gastar tempo de execução / memória desnecessariamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora