Jump to content


Photo

Fazer Diretório Listar Arquivos Por Data De Upload Mais Recente


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

#1 Ricardo KaNu

Ricardo KaNu

    Novato no fórum

  • Usuários
  • 13 posts

Posted 13/05/2009, 15:14

Olá =D

Estou com um probleminha, peguei um script que lista todos os arquivos do meu diretório, até aí beleza, funciona 100%, porém gostaria que o mesmo ordenasse os arquivos por data que foi enviado ao servidor, ou seja, por upload, quanto mais recente for o upload mais em cima o arquivo fica!

Mas atualmente ele está ordenando por ordem alfabética e isso fica meio ruim pro sistema que quero utilizar... então se alguém souber como fazer isso agradeço muito!

Segue abaixo o código:

[codebox]<?php

// pega o endereço do diretório
$diretorio = getcwd();
// abre o diretório
$ponteiro = opendir($diretorio);
// monta os vetores com os itens encontrados na pasta
while ($nome_itens = readdir($ponteiro)) {
$itens[] = $nome_itens;
}

//O que fizemos aqui, foi justamente, pegar o diretório, abri-lo e lê-lo.

//Continuando, vamos usar:
//sort: ordena os vetores (arrays), de acordo com os parâmetros informados. Aqui estou ordenando por pastas e depois arquivos

// ordena o vetor de itens
sort($itens);
// percorre o vetor para fazer a separacao entre arquivos e pastas
foreach ($itens as $listar) {
// retira "./" e "../" para que retorne apenas pastas e arquivos
if ($listar!="." && $listar!=".."){

// checa se o tipo de arquivo encontrado é uma pasta
if (is_dir($listar)) {
// caso VERDADEIRO adiciona o item à variável de pastas
$pastas[]=$listar;
} else{
// caso FALSO adiciona o item à variável de arquivos
$arquivos[]=$listar;
}
}
}

//Vimos acima, a expressão is_dir, indicando que as ações devem esntão ser executadas, ali mesmo, no diretório que já //foi aberto e lido. As ações que executamos ali, foram: ver se tem pastas, listar. Ver se tem arquivos, listar.

//Agora, se houverem pastas, serão apresentadas antes dos arquivos, em odem alfabética.
//Se não houverem, serão apresentados apenas os arquivos, na mesma ordem.
//E se houverem os dois, serão mostrados igualmente.

// lista as pastas se houverem

if ($pastas != "" ) {
foreach($pastas as $listar){
$pastas = $listar;
echo "<li><a href='$listar'><strong>Pasta: </strong>$listar</a></li>" ;
}
}
// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
$arquivos = $listar;
$tamanho = "";
if ( (filesize($arquivos) > 1024)&&(filesize($arquivos) < (1024 * 1000)) ) // KBYTE
$tamanho = number_format((filesize($arquivos) / 1024),2)." Kb";
elseif(filesize($arquivos) > (1024 * 1000)) //MBYTE
$tamanho = number_format((filesize($arquivos) / (1024 * 1024)),2)." Mb";
else $tamanho = number_format(filesize($arquivos),2)." bytes";

if($arquivos == 'index.php' || $arquivos == 'error_log' || $arquivos == 'menu_cond_online.php' || $arquivos == 'functions.php' || $arquivos == 'formulario_login.php')

echo "";
else
echo "<li><a href='$listar'><strong>Arquivo:</strong> $listar -- ", "Upload em: " . date ("d/M/Y \à\s H:i - ", filemtime( $arquivos)) , "Tamanho: ",$tamanho."</li> </a> ";
}
}
?>[/codebox]

Grato desde já

[]'s

Edição feita por: Ricardo KaNu, 13/05/2009, 16:23.


#2 lwirkk

lwirkk

    Veterano

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

Posted 14/05/2009, 12:42

Pega o filemtime() de cada arquivo ^.^
Posted Image
"Se quiser ser feliz por um dia, vingue-se; se quiser ser feliz por uma vida inteira, perdoe."

Muito Obrigado à todos do fórum, e à toda equipe do fórum! =)

#3 Ricardo KaNu

Ricardo KaNu

    Novato no fórum

  • Usuários
  • 13 posts

Posted 22/05/2009, 17:03

Entendi o que você quis dizer... Mas tentei faze aqui e não rolou!

Se alguem puder me mostrar como usar, sou iniciante e não tá tendo jeito, já pesquisei por tudo uma forma de aplicar isso, mas não tá fácil... Sempre que modifico o script e tento aplicar o filemtime() como ordenador dá um monte de erros! tentei usar ksort() ou krsort() e mesmo assim não foi!

Agradeço muito quem puder me ajudar mostrando uma aplicação funcional em meu script!

[]'s

#4 Dudu

Dudu

    Viva la vida

  • Usuários
  • 1437 posts
  • Sexo:Masculino
  • Localidade:Uberlândia - MG
  • Interesses:PHP

Posted 22/05/2009, 17:26

Talvez este código lhe ajude:

[codebox]
<?php

function filemtime_r($path)
{
foreach (glob($path."/*") as $fn)
{
$nome[] .= $fn;
$size[] .= filemtime($fn);
$ret = array_combine($nome, $size);
}
return $ret;
}

$array = filemtime_r('teste');

echo "<h2>Desc</h2><br>";

arsort($array);
echo "<pre>";
print_r($array);
echo "</pre>";


echo "<hr><h2>Asc</h2><br>";
asort($array);
echo "<pre>";
print_r($array);
echo "</pre>";
?>
[/codebox]

Só fazer uma condição:
se for DESC, usar arsort().
se for ASC, usar asort().


Movido


Movi o tópico para a área de dúvidas gerais em PHP.
Fique atento ao postar o tópico as sessões corretas.

.

Até mais ^_^

Edição feita por: Dudu, 22/05/2009, 17:42.

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Moderador


Twitter: HostCheap


#5 Ricardo KaNu

Ricardo KaNu

    Novato no fórum

  • Usuários
  • 13 posts

Posted 09/06/2009, 17:03

Valeu todo mundo que deu uma mão, consegui! =D

coloquei o seguinte no código:

[codebox]// lista os arquivos se houverem
if ($arquivos != "") {
foreach($arquivos as $listar){
$sModified=date("Y/m/d H:i:s",filectime($listar));
$aContent[$sModified]=$listar;
}
krsort($aContent,SORT_STRING);

foreach($aContent as $sModified=>$listar){


$arquivos = $listar;
$tamanho = "";

[...][/codebox]

#6 maestrolim

maestrolim

    Novato no fórum

  • Usuários
  • 1 posts
  • Sexo:Masculino
  • Localidade:Americana

Posted 24/06/2011, 23:48

Valeu todo mundo que deu uma mão, consegui! =D

coloquei o seguinte no código:

// lista os arquivos se houveremif ($arquivos != "") {foreach($arquivos as $listar){  $sModified=date("Y/m/d H:i:s",filectime($listar));  $aContent[$sModified]=$listar;}  krsort($aContent,SORT_STRING);    foreach($aContent as $sModified=>$listar){   $arquivos = $listar;   $tamanho = "";[...]



Depois de 5 anos, rever o tópico? interessante para minha duvida :)

No caso, como listar somente os 10 primeiros arquivos?
Ou então, por data, ex: quero ver os arquivos de 10 dias atrás até hoje...

Alguem consegue ajudar com idéias ?




1 user(s) are reading this topic

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

IPB Skin By Virteq