Autor Zpráva
papirek
Profil *
zdravim vsechny, potreboval bych funkci ktera mi zjisti pocet souboru (nebo fotek) ve slozce kterou si urcim, nebo nejaky zpusob jak to zjistit jinak... predem MOC dekuji za pomoc...
nightfish
Profil
$dir = opendir("adresar");

$pocetSouboru = 0;
while (($f = readdir($dir)) !== false) {
if ($f == "." || $f == "..") continue;
if (is_file("adresar/".$f)) $pocetSouboru++;
}
closedir($dir);
echo "Počet souborů: ".$pocetSouboru;
papirek
Profil *
Dekuji moc si mi pomohl ale jen tak pro zajimavost zatim sem vymyslel toto fungovalo by to taky ??

$dir = "adresar";

$soubory = scandir($dir);

$pocetsouboru = count($soubory);

echo "Počet souborů: ".$pocetsouboru
nightfish
Profil
ale jen tak pro zajimavost zatim sem vymyslel toto fungovalo by to taky ??
scandir nerozlišuje soubory a adresáře, takže kdyby byl jenom adresář s fotkama, tak by to zřejmě fungovalo (tedy pro prázdný adresář by to vrátilo 2, kvůli souborům . a ..)
smiesek
Profil
nightfish, nightfish:
Všude tu čtu pouze návo na výpis počtu souborů z jednoho adresáře, mě by zajímalo jak docílit toho, aby se mi zobrazil počet i z podadresářů/složek.
Mám např. složku barvy, kde jsou další podsložky jako červená, modrá, bílá... a já chci, aby se mi spočítal celkový počet souborů z těch všech 3 složek.
Virtus
Profil
No tak stačí vzít ten kód co napsal nightfish v [#2] a udělat z něj rekurzivní funkci, asi nějak takhle:
function getCountFiles($adresar){
$dir = opendir($adresar);
$pocetSouboru = 0;
while (($f = readdir($dir)) !== false) {
  if ($f == "." || $f == "..") continue;
  if (is_file($adresar.$f)){
   $pocetSouboru++;
  } elseif( is_dir($adresar.$f) ) {
    $pocetSouboru += getCountFiles($adresar.$f);
  }
}
closedir($dir);
return $pocetSouboru;
}
echo "Počet souborů: ".getCountFiles('adresar');
Alphard
Profil
Virtus [#6]:
Do postupně sestavované cesty bude třeba nacpat nějaká lomítka.
Navíc bude asi lepší použít nějakou funkci, která prohledává subadresáře nativně.
Virtus
Profil
Alphard [#7]:
Souhlasím, navíc by to asi chtělo spíš nějakou class než obyčejnou funkci, přece jen, pokud pracuju se soubory asi mně zajímá víc než jejich počet většinou, ale třeba i kolik jich je v konkrétních složkách, jaký mají práva, nebo zda se nejedná o symlinky atd. A ještě si nejsem jistý tou funkcí is_dir() pro kontrolu jestli se jedná o adresář, zda jde takhle vůbec použít viz. php.net:
var_dump(is_dir('bogus_dir/abc'));
The above example will output: bool(false)
ShiraNai7
Profil
Co takhle? $item je instance SplFileInfo.

edit: zjednoduseno :)

$adresar = './adresar';
$pocetSouboru = 0;

foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($adresar)) as $item) {
    if($item->isFile()) {
        ++$pocetSouboru;
    }
}

var_dump($pocetSouboru); // vypise pocet souboru
Majkl578
Profil
[#9] ShiraNai7:
I to by se dalo zjednodušit (resp. zapsat bez foreache a přičítání proměnné):
$pocet = iterator_count(
    new CallbackFilterIterator(
        new RecursiveIteratorIterator(
            new RecursiveDirectoryIterator($adresar)
        ),
        function ($i) { return $i->isFile(); }
    )
);

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: