Avatar billede razmuz Nybegynder
08. juli 2003 - 13:11 Der er 12 kommentarer og
1 løsning

tæl filer i folder

Hej Eksperter!

Jeg skal bruge et script, der tæller hvor mange billeder i en bestemt mappe der har en variabel som første 3 karaktere i navnet.

Filerne i mappen (img/biler/) har navne således:
$id-$originalnavn
Dvs. de har deres oprindelige navn, men et id_nummer er puttet foran på hver enkel fil.

Scriptet skal finde alle filer med et bestemt id_nummer.
fx $id = 44 => så skal den finde alle filer der hedder 44-irrelevant.xxx

Det er nok at foretrække at lægge dataene i en array.
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:11 #1
Mon ikke der er en php-syntax, som tæller filer i en mappe,.... jeg ved det ikke
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:13 #2
Dataene er selvfølgelig filernes fulde navn.
Avatar billede rrm Nybegynder
08. juli 2003 - 13:34 #3
Hejsa razmuz, følgende eksempel viser alle filer i en mappe: http://dk2.php.net/manual/en/function.opendir.php, så kan du modificere denne så den passer dine behov...
Avatar billede al1407 Nybegynder
08. juli 2003 - 13:35 #4
function countFiles ($match = '')
{
    $match_count = 0;

    $dh = opendir(".");
    if ($dh)
    {
        while ($file = readdir($dh))
        {
            $match_count++;
            if (preg_match("'^" . $match . "'i", $file)) $
        }

        closedir($dh);
    }

    return $match_count;
}

brug således:

print countFiles('44');

så vil den vise alle filer der starter med 44 .. evt.:

print countFiles('44.*\.(jpg|png|gif)$');

hvis den skal tælle filerne '44<whatever_her>.jpg|gif|png' ..
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:41 #5
Hvad sker der hvis nogle filer hedder 44-noget.jpg, 44-nogetandet.jpg mens nogle andre hedder 444-filer1.jpg, 444-sdf.png????

Tæller funktionen det der står på venstre side af '-'?
Avatar billede al1407 Nybegynder
08. juli 2003 - 13:44 #6
Det du skriver er det der må være i begyndelsen ..

men den her:

print countFiles('44.*\.(jpg|png|gif)$');

er en regular expression og betyder at den SKAL begynde med '44' .. der næst betyder '.*' at der må være et hvilkensomhelst tegn (undtagen newline) og det må der være 0 eller flere gange (*). dvs. '44-dfs', '44foo' vil blive talt med.

til sidst bestemmer vi at der kun må være filer af typen jpg, png eller gif ..

\. er et "literal" punktum (escapes)
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:58 #7
Følgende giver "10" på skærmen.... og der er altså kun 7 filer (dog ikke med 44 i starten) samt en mappe... hvad er der galt?

function countFiles ($match = '') {
    $match_count = 0;
    $dh = opendir("img/biler/");
    if ($dh) {
        while ($file = readdir($dh)) {
            $match_count++;
            if (preg_match("'^" . $match . "'i", $file)) { echo "hej"; }
        }
        closedir($dh);
    }
    return $match_count;
}

print countFiles('44');
Avatar billede razmuz Nybegynder
08. juli 2003 - 13:58 #8
Kan filnavnene ikke puttes ind i en array temmelig nemt???? kan du?
Avatar billede al1407 Nybegynder
08. juli 2003 - 14:13 #9
hovsa! .. jeg lavede en fejl ..

function getFiles ($match = '') {
    $ret = array();
    $dh = opendir("img/biler/");
    if ($dh) {
        while ($file = readdir($dh)) {
            if (preg_match("'^" . $match . "'i", $file)) $ret[] = $file;
        }
        closedir($dh);
    }

    return $ret;
}

$files = getFiles('44');
print "<pre>Der er " . sizeof($files) . " filer. Liste: <br>"
print_r($files);
print "</pre>";
Avatar billede razmuz Nybegynder
08. juli 2003 - 14:26 #10
næstnederste linie... der er fejl!!! hvad skal der stå?
Avatar billede razmuz Nybegynder
08. juli 2003 - 14:29 #11
nej det virker nu... det var i linien før der var fejl... der manglede ";" i enden :)
Avatar billede razmuz Nybegynder
08. juli 2003 - 14:31 #12
Mit eneste problem nu er, at jeg får både 44-billede1.jpg, 44-billede3.jpg og 442-billede3242.jpg... kan man ikke redde den?
Avatar billede al1407 Nybegynder
08. juli 2003 - 23:24 #13
Jamen så skriver du bare:

$files = getFiles('44-');

så vil du kun få filer der starter med '44-' .. dvs. '442-billede3242.jpg' vil IKKE blive talt med..

evt.
$files = getFiles('44-.*\.(jpg|png|gif)$');
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester