Estou trabalhando em um projeto ligeiramente novo. Queria saber quantos arquivos existem em um determinado diretório.
<div id="header">
<?php
$dir = opendir('uploads/'); # This is the directory it will count from
$i = 0; # Integer starts at 0 before counting
# While false is not equal to the filedirectory
while (false !== ($file = readdir($dir))) {
if (!in_array($file, array('.', '..') and !is_dir($file)) $i++;
}
echo "There were $i files"; # Prints out how many were in the directory
?>
</div>
Isso é o que eu tenho até agora (de pesquisar). No entanto, ele não está aparecendo corretamente? Eu adicionei algumas notas, então sinta-se à vontade para removê-las, elas são apenas para que eu possa entendê-las da melhor maneira possível.
Se precisar de mais informações ou se sentir que não descrevi o suficiente, sinta-se à vontade para declará-lo.
count(scandir("uploads/")) - 2
aquele loop.Respostas:
Você pode simplesmente fazer o seguinte:
fonte
FilesystemIterator::SKIP_DOTS
pois é o padrão de qualquer maneira.Você pode obter a contagem de arquivos assim:
onde
"*"
é, você pode alterá-lo para um tipo de arquivo específico, se desejar,"*.jpg"
ou pode fazer vários tipos de arquivo como este:o
GLOB_BRACE
sinalizador expande {a, b, c} para corresponder a 'a', 'b' ou 'c'fonte
__DIR__ .
antes"/path/to/dir/"
(__DIR__ . "/path/to/dir/"
)/path/to/dir
iria falhar, porque primeiro/
significastarting from root dir
. Se houvessepath/to/dir
, então sim,__DIR__ . '/path/to/dir'
ajudaria (neste caso você deve usar/
depois__DIR__
Experimente isso.
Sem contar o '.' e '..'.
fonte
$num_files = count($files) - 2;
? Por causa da.
bem como..
.
e..
tente isto: $ files =array_diff( scandir("/dir"), array(".", "..") );
array_slice(scandir($directory),2)
Você devia ter :
fonte
A melhor resposta na minha opinião:
fonte
Como eu também precisava disso, fiquei curioso para saber qual alternativa era a mais rápida.
Descobri que - se tudo o que você quiser é uma contagem de arquivos - a solução de Baba é muito mais rápida do que as outras. Fiquei bastante surpreso.
Experimente você mesmo:
Execução de teste: (obviamente,
glob()
não conta arquivos de ponto)fonte
Demonstração de trabalho
fonte
Eu uso isso:
fonte
array_slice
funciona de forma semelhante àsubstr
função, mas funciona com matrizes.Por exemplo, isso cortaria as duas primeiras chaves de array de array:
E se você omitir o primeiro parâmetro, como no primeiro exemplo, a matriz não conterá os dois primeiros pares de chave / valor * ('.' E '..').
fonte
Talvez seja útil para alguém. Em um sistema Windows, você pode permitir que o Windows faça o trabalho chamando o comando dir. Eu uso um caminho absoluto, como
E:/mydir/mysubdir
.fonte
Isso deve funcionar, insira o diretório em dirname. e deixe a mágica acontecer.
fonte
fonte
Com base na resposta aceita, aqui está uma maneira de contar todos os arquivos em um diretório RECURSIVAMENTE:
fonte
Aqui está uma função do PHP Linux que é consideravelmente rápida. Um pouco sujo, mas dá conta do recado!
$ dir - caminho para o diretório
$ type - f, d ou false (por padrão)
f - retorna apenas a contagem de arquivos
d - retorna apenas a contagem de pastas
false - retorna a contagem total de arquivos e pastas
Você pode ajustar para atender às suas necessidades.
Observe que isso não funcionará no Windows.
fonte
simples adicionar está feito ....
fonte