Autor Zpráva
gizmo
Profil *
Nazdar!
Mám několik adresářů a v každém několik souborů. Potřebuji zjistit počet souborů v každém adresáři. Mám PHP 4, takže scandir() nefunguje
WertriK
Profil *
$adresar = OpenDir("adresar");
$soubor = Array();
while ($zaznam = ReadDir($adresar)) {
if (!Is_Dir("adresar$zaznam")) {
$soubor[] = $zaznam;
}
}

CloseDir($adresar);
$pocet_souboru = count($soubor);
HubiPe
Profil *
Co si udělat funkci která spočítá počet souborů ve složce, a pak pomocí rekurze projít vnořené adresáře (a další vnořené adresáře vnořených adresářů atd.). Udělat si pole do které jsou ukládány názvy souborů, a na konci je pomocí Count() spočítat?
Havel-st
Profil *
tohle by mohlo fungovat:

<?php
$dir = "./adresar/";
$handle=opendir($dir);
while ($folder = readdir($handle)) {
$base = basename($folder);
if ($base!="." && $base!=".." && is_dir($dir.$folder)) {
echo $folder." - ".count(glob($dir.$folder."./*.*"))." soub.<br>\n";
} }
?>

samotné počítání souborů je např:
echo count(glob("./adresar/prvni/*.*"));
gizmo
Profil *
Díky moc!
WertriKovo řešení funguje naprosto spolehlivě.
Ještě jednou díky
Robotus
Profil *
function countFiles($dir) {
echo "reading ".$dir."<br/>";
$adresar = opendir($dir);
$count = 0;
while (($zaznam = readdir($adresar))!==false) {
if (!is_dir($dir.'/'.$zaznam)) {
$count++;
} else {
if ($zaznam!="." && $zaznam!="..") {
$count += countFiles($dir.'/'.$zaznam);
}
}
}
closedir($adresar);
return $count;
}

echo countfiles("./web");


kdyby nekdo s rekurzi:)
Thorai
Profil *
ahoj, nenapsal byste mi někdo prosím skript, který uloží všechny adresáře
i jejich podadresáře a podpodadresáře,....atd do pole ?
Robotus
Profil *
<?
/*Zdroj: http://php.ftp.cvut.cz/manual/cs/function.array-merge.php#51121*/
function multimerge ($array1, $array2) {
if (is_array($array2) && count($array2)) {
foreach ($array2 as $k => $v) {
if (is_array($v) && count($v)) {
$array1[$k] = @multimerge($array1[$k], $v);
} else {
$array1[$k] = $v;
}
}
} else {
$array1 = $array2;
}

return $array1;
}

function countFiles($dir) {
echo "reading ".$dir."<br/>";
$adresar = opendir($dir);
while (($zaznam = readdir($adresar))!==false) {
if (!is_dir($dir.'/'.$zaznam)) {
$adresare[$dir][] = $zaznam;
} else {
$current = $dir.'/'.$zaznam;
if ($zaznam!="." && $zaznam!="..") {
$podadresar = countFiles($dir.'/'.$zaznam);
$adresare = multimerge($adresare, $podadresar);
}
}
}
closedir($adresar);
return $adresare;
}

$arr = countfiles($adresaaaaar);

print_r($arr);
?>

snad to bude ono;)
Thorai
Profil *
to Robotus
Díky moc!
Anonymní
Profil *
$adresar = OpenDir("adresar");
$soubor = Array();
while ($zaznam = ReadDir($adresar)) {
if (!Is_Dir("adresar$zaznam")) {
$soubor[] = $zaznam;
}
}

CloseDir($adresar);
$pocet_souboru = count($soubor);


Zkoušel jsem to, ale jaksi mi to spočítalo, že ve složce jsou dva soubory, ale opticky tam žádný nebyl. Opravdu tato funkce vždy "přičte" dvojku, nebo to je proměnlivé? Pokud to je opravdu na "pevno", pak je to v pohodě (odečtu 2 a mám pokoj).
WanTo
Profil
Anonymní
Nezapočítává se náhodou . a .. ?
koudi
Profil
Jo, rozhodně to bude . a ..
Toto téma je uzamčeno. Odpověď nelze zaslat.