Avatar billede flim Nybegynder
24. oktober 2004 - 10:50 Der er 28 kommentarer og
1 løsning

Hvordan læses fra en hel site?

Goddag eksperter!

Jeg vil gerne vise brugerne hvad vi rent faktisk har liggende på vores website.

Jeg har delt det op i følgende kategorier:

*.php
*.jpg/jpeg
*.gif
*.htm
*.avi
og en diverse

Nu vil jeg så gerne lave en funktion som simpelthen læser alle mapper og filer igennem, og til sidst spytter ud hvor mange der var af hver og den samlede størrelse.

Noget i denne dur:

På webstedet ligger:

PHP: 451 filer der fylder 3,25 Mb
HTM: 23 filer der fylder 34 Kb
JPG/JPEG: 4536 filer der fylder 234,51 Mb
GIF: 12 filder der fylder 43 Kb
AVI: 1 fil der fylder 23 Mb
Andet: 34 filer der fylder 83 Kb

Nogen der kan hjælpe med en funktion som simpelthen læser alt igennem fra roden - putter det i arrays (eller hvad der nu er bedst) og printer det ud til sidst?

På forhånd mange tak.
Avatar billede expnet Seniormester
24. oktober 2004 - 10:58 #1
jeg tro Http://php.net søg efter nolge af dem her og du er godt på vej

opendir
closedir
is_dir
readdir

der ligger mange eks'er der er gode
Avatar billede flim Nybegynder
24. oktober 2004 - 11:04 #2
$dir = "hvad_skrives_her_da_den_skal_starte_i_roden?"

if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
            if($file != "." && $file != ".." && !ereg("^\..+", $file)) {   
                if (filetype($file) == 'jpg' || filetype($file){
                  $arrayjpg[] = $file; }
              elseif (osv osv med de andre typer)
            }
            }
      closedir($dh);
  }
}

Noget i den dur ikk'?

Men hvordan læser jeg en mappe i en mappe?
Avatar billede expnet Seniormester
24. oktober 2004 - 11:09 #3
$dir = "."; // betyder at den læser fra hvor scriptet ligge
$dir = "./mappe"; //så gå den ind i en mappe og læser
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
      while (($file = readdir($dh)) !== false) {
            if($file != "." && $file != ".." && !ereg("^\..+", $file)) {   
                if (filetype($file) == 'jpg' || filetype($file){
                  $arrayjpg[] = $file; }
            }
            }
      closedir($dh);
  }
Avatar billede expnet Seniormester
24. oktober 2004 - 11:10 #4
ps. kun en $dir
Avatar billede flim Nybegynder
24. oktober 2004 - 11:14 #5
expnet - det er ikke altid jeg ved hvad de mapper hedder som jeg skal ind i.

Jeg kan forholdsvist nemt læse filerne nu her, men hvordan går jeg ind i en mappe når jeg ikke kender navnet?

Desuden skal jeg en tak tilbage når mappen er læst færdig og læse de andre mapper, og når de så også er færdig skal jeg endnu en tak tilbage og fortsætte.

Hvordan pokker skrives det?
Avatar billede expnet Seniormester
24. oktober 2004 - 11:34 #6
jamen det system/script du vil have/lave sidder jeg ikke og lave da det tager en del tid at lave.
Avatar billede flim Nybegynder
24. oktober 2004 - 11:36 #7
Bare i orden - jeg ser om jeg selv kan lave noget af det :)
Avatar billede expnet Seniormester
24. oktober 2004 - 11:42 #8
har du evt.
msn
Avatar billede flim Nybegynder
24. oktober 2004 - 11:43 #9
Jep - men har ikke så meget tid mere i dag - skal til fødselsdag om en times tid - men hvis jeg ikke kommer videre selv, så vender jeg lige tilbage
Avatar billede bojo Nybegynder
24. oktober 2004 - 11:44 #10
mon ikke du kan bruge den jeg lavede til http://eksperten.dk/spm/548478
Avatar billede flim Nybegynder
24. oktober 2004 - 11:48 #11
Noget af det kan jeg sikkert :)

Men jeg vil jo sådan set ikke vise mapperne - skal bare bruge typen og størrelsen på de enkelte filer og så skal de listes til sidst.

Kan du give mig et hint til hvor jeg skal rette i din kode?
Avatar billede bojo Nybegynder
24. oktober 2004 - 11:52 #12
denne tæller bare op

<?

$bytes=0;

tree( "./", "php", 3, "" );
$kb = $bytes/1024;
$mb=$kb/1024;
$gb=$mb/1024;

echo "Total:<br> $bytes b<br> $kb kb<br> $mb mb<br> $gb gb ";

function tree( $path, $type ) {
    global $bytes;
   
    $d = dir($path);
    while (false !== ($entry = $d->read())) {
        $etdir = is_dir($path.$entry);
        if(  $entry != "." && $entry != ".." && $entry != "" ) {
            $path_parts = pathinfo($entry);
            if( strstr($type, $path_parts["extension"]) || $type=="*" || $etdir ) {
                $bytes += filesize($path.$entry);
            }
            if( $etdir ) {
                tree( $path.$entry."/", $type);
            }
        }
    }
    $d->close();
}
?>
Avatar billede flim Nybegynder
24. oktober 2004 - 11:55 #13
Den tæller jo "kun" den mappe som filen ligger i.

Kan den nemt fikses så den også tager undermapper med? Det er vel en form for rekursiv funktion?
Avatar billede flim Nybegynder
24. oktober 2004 - 11:56 #14
Eller tager jeg fejl - læser den alle php-filer på hele sitet?
Avatar billede bojo Nybegynder
24. oktober 2004 - 12:01 #15
<?

$typer = array( "php", "jpg" );

foreach( $typer as $type ) {
    $bytes=0;
    tree( "./", $type, 3, "" );
    $kb = $bytes/1024;
    $mb=$kb/1024;
    $gb=$mb/1024;
    $size[$type] = $bytes;
//    echo "Total:<br> $bytes b<br> $kb kb<br> $mb mb<br> $gb gb ";
}

foreach( $size as $type => $bytes) {
    echo $type . " " . $bytes . "<BR />";
}

function tree( $path, $type ) {
    global $bytes;

    $d = dir($path);
    while (false !== ($entry = $d->read())) {
        $etdir = is_dir($path.$entry);
        if(  $entry != "." && $entry != ".." && $entry != "" ) {
            $path_parts = pathinfo($entry);
            if( strstr($type, $path_parts["extension"]) || $type=="*" || $etdir ) {
                $bytes += filesize($path.$entry);
            }
            if( $etdir ) {
                tree( $path.$entry."/", $type);
            }
        }
    }
    $d->close();
}
?>
Avatar billede bojo Nybegynder
24. oktober 2004 - 12:02 #16
den tæller fra den mappe der skrives i tree( "./"    erstat "./" med den sti du vil undersøge
Avatar billede flim Nybegynder
24. oktober 2004 - 12:07 #17
Hold da helt op - det ser jo ud til at det bare virker...

Så fyrer jeg bare de filtyper ind i arrayet som jeg vil vhecke op mod...

En samlede størrelse burde være til at lave rimelig nemt så.

En sidste ting - kan man ikke smække en tæller ind, så jeg kan se hvor mange filer der er af hver slags?

Jeg kan ikke umiddelbart overskue hvor den skal ind
Avatar billede flim Nybegynder
24. oktober 2004 - 12:13 #18
Skal så lige høre om en bitte ting mere ;)

Hvis jeg indsætter en filtype som ikke findes på mit site, så udslriver den 1600 Kb - hvorfor mon?
Avatar billede bojo Nybegynder
24. oktober 2004 - 12:15 #19
<?

$typer = array( "php", "jpg" );

foreach( $typer as $type ) {
    $bytes=0;
    $filer=0;
    tree( "./", $type, 3, "" );
    $kb = $bytes/1024;
    $mb=$kb/1024;
    $gb=$mb/1024;
    $size[$type] = $bytes;
    $files[$type] = $filer;
//    echo "Total:<br> $bytes b<br> $kb kb<br> $mb mb<br> $gb gb ";
}

foreach( $size as $type => $bytes) {
    echo $type . " " . $files[$type] . " " . $bytes . "<BR />";
}

function tree( $path, $type ) {
    global $bytes, $filer;

    $d = dir($path);
    while (false !== ($entry = $d->read())) {
        $etdir = is_dir($path.$entry);
        if(  $entry != "." && $entry != ".." && $entry != "" ) {
            $path_parts = pathinfo($entry);
            if( strstr($type, $path_parts["extension"]) || $type=="*" || $etdir ) {
                $bytes += filesize($path.$entry);
                $filer++;
            }
            if( $etdir ) {
                tree( $path.$entry."/", $type);
            }
        }
    }
    $d->close();
}
?>
Avatar billede flim Nybegynder
24. oktober 2004 - 12:18 #20
Smukt, smukt...

Nu kan jeg printe antallet af filer ud for den enkelte...

Kigger lige lidt mere på det, og hvis jeg kan fikse den samlede størrelse, så får du dine velfortjente point
Avatar billede flim Nybegynder
24. oktober 2004 - 12:23 #21
Ja, der er jo altså det problem...

At hvis jeg skrives en filtype som ikke findes (fx "xxx") - så siger den at der er 400 filer med den endelse og en samlet størrelse på 1600 Kb - hvor dælen kommer det tal fra?
Avatar billede bojo Nybegynder
24. oktober 2004 - 12:27 #22
en lille ups :-)

ret til:

            if( strstr($type, $path_parts["extension"]) || $type=="*" && !$etdir ) {
Avatar billede flim Nybegynder
24. oktober 2004 - 12:30 #23
Meget bedre - nu ser det ud til at virke...

Så vil jeg se om jeg kan lave en sammentælling af filer og størrelse :)

Smid et svar og du får dine point.

Men sig mig lige - det 3-tal der står i tree( "./", $type, 3, "" );

Hvad står det for?
Avatar billede bojo Nybegynder
24. oktober 2004 - 12:43 #24
en rest fra det oprindelige script. Jeg lavede det til http://eksperten.dk/spm/548478 3 er hvor mange "space" der skulle rykkes ind ved undermapper. Da jeg så legede lidt videre med den kom , ""  også til, det er det tegn der skal stå mellen mapperne. Begge skal/kan bare fjernes i din kode
Avatar billede flim Nybegynder
24. oktober 2004 - 13:06 #25
Fino bambino...

Smider du et svar - og så evt lige fortæller mig hvordan jeg laver en samlet optælling af filer og den samlede størrelse?

Jeg smutter nu her, men svarer dig engang i aften.

Takker :-D
Avatar billede bojo Nybegynder
24. oktober 2004 - 13:11 #26
Ret fra:

}

foreach( $size as $type => $bytes) {
    echo $type . " " . $files[$type] . " " . $bytes . "<BR />";
}


til:

}
$filestotal=0;
$bytestotal=0;
foreach( $size as $type => $bytes) {
    echo $type . " " . $files[$type] . " " . $bytes . "<BR />";
    $filestotal += $files[$type];
    $bytestotal += $bytes;
}

så har du dem i hhv. $filestotal og $bytestotal

Tag points selv
Avatar billede flim Nybegynder
24. oktober 2004 - 13:30 #27
Takker endnu engang for hjælp :)
Avatar billede olebole Juniormester
24. oktober 2004 - 20:14 #28
<ole>

Er der ikke tale om rystende ligegyldige informationer på linie med, hvormange hits en side har fået, hvorlænge det tog at generere den, hvormange tegn, der står på siden, hvormange <b> tags, der er brugt - osv, osv?
Den slags kan være nyttige info for en webmaster - men er somregel irriterende støj for brugerne  :)

/mvh
</bole>
Avatar billede flim Nybegynder
24. oktober 2004 - 20:23 #29
Både og...

Nu er det i mit tilfælde at folk har efterspurgt det. Men jo, ellers har du ret...
Folk var bare nysgerrige. De ville gerne vide hvor mange billeder og hvor mange dit og dat og så skal de da få det :)
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