PHP - I need Help

  • [PHP]
    <?php
    //Ueberschrift SolutionCenter ... , Blau, Zentriert, Linie unter der UEberschrift
    print("<h1 style='color:blue' align='center'>SolutionCenter Service 4 U</h1><hr align='center'>");


    //Datum
    print (date("D, d F Y -- H:i"));

    echo "<br><br>"; //neue Zeile nach dem Datum

    echo "<table border=1 width=50% align=center bordercolor=#009900>";
    echo "<tr>\n";
    echo "<td width=50% align=CENTER Â >";


    echo "<b>Thema </b>";
    echo "</td>\n";
    echo "<td width=50% align=CENTER Â >";
    echo "<b>Anzahl der Dateien</b>";
    echo "</td>\n";
    echo "</tr>\n";

    echo "</table>";

    // **** START der Funktion
    function travelDirectorys($DIR) {
    // in der Variable "output" werden die Verzeichnisnamen gespeichert
    //in denen die Datei "index.html" vorkommt
    $output = array();

    // Wenn das letzte Zeichen des angegebenen Directorys kein Slash
    //ist, dann fuege diesen hinzu
    // Das ist noetig weil weiter unten im Code die Anweisung "$DIR .
    //$entry" kommt. Wenn in $DIR also
    // zB. "/var/www" gespeichert waehre und $entry "irgendwas"
    //enthaelt, dann wuerde dadurch "/var/wwwirgendwas"
    // entstehen, deshalb wird an das $DIR noch ein Slash angehaengt
    //damit "/var/www/irgendwas" entsteht...
    if(substr($DIR, -1) != "\\") $DIR .= "\\";

    // erzeuge eine Liste aller Eintrage in einem Verzeichnis
    $d = @dir($DIR);

    // gehe jeden Eintrag in dieser Liste durch
    if (!is_object($d)) return NULL;

    while (false !== ($entry = $d->read()))
    {
    // die Verzeichniseintraege "." und ".." werden auch mit
    //aufgelistet, deshalb muessen diese ausgeschlossen werden
    if($entry != "." && $entry != "..") {

    // Wenn der Verzeichniseintrag selbst ein Verzeichnis ist...
    if( is_dir($DIR.$entry)) {
    // dann durchsuche dieses Verzeichnis ebenfalls komplett
    // und haenge dessen Ergebnisse an die bereits
    //vorhandene Ergebnisliste an
    $h = travelDirectorys($DIR.$entry);

    if (is_array($h) && is_array($output))
    $output = array_merge($output, $h);

    // Wenn ein Eintrag "index.html" heisst
    // (ignoriere gross/kleinschreibung indem die Funktion
    //"strtolower" einfach alles in kleinschreibung umwandelt )
    } elseif( strtolower($entry) == "index.html") {

    // Haenge das aktuelle Verzeichnis an die Ergebnisliste an
    $output[] = $DIR.$entry;
    }
    }
    }
    // schliesse die Verzeichnisliste wieder
    $d->close();


    // Gebe die Ergebnisliste zurueck
    return $output;
    }
    // **** ENDE der Funktion

    // ***** Benutzen der Funktion

    // Aufrufen der Funktion mit dem Verzeichnis das durchsucht werden soll
    $result = travelDirectorys("D:\\");

    // Sorge dafuer dass in der Ergebnisliste kein Eintrag mehrfach
    //vorkommt
    $result = array_unique($result);


    // durchwandere die Ergebnisliste und zeige jeden Eintrag an
    foreach($result AS $entry) {
    //trenne den Eintrag an den Slashes auf.
    $name = explode("\\", $entry);


    //drehe das Array einfach um...
    $name = array_reverse($name);

    //schneide das index.html aus
    $name = array_slice($name, 1);


    //sollte der erste Eintrag leer sein (sollte so sein, wenn man nur die //Pfade zurück bekommt), nimm den nächsten.
    if (!empty($name[0])) $name = $name[0];
    else $name = $name[1];

    $entry = substr ($entry,2);

    $stat= stat($entry);

    $link = "<a href=\.$entry. >$name</a>\n";


    echo "<table border=1 width=50% align=center bordercolor=#009900 >";


    echo "<tr>\n";
    echo "<td width=50% align=center  >";
    echo $link;
    echo "</td>\n";
    echo "<td width=50% align=center  >";
    echo"<br />DIRECTORIES: ".$atest[directory] ;
    echo "</td>\n";
    echo "</tr>\n";
    }
    echo "</table>";

    function count_file($dir)
    {

    // Ueberprueft ob das angegebene Verzeichnis existiert
    if(is_dir($dir))
    {
    $afile[directory]=0;
    $afile[file]=0;

    chdir($dir);
    $handle=opendir("D:\\CISCO");
    while($file=readdir($handle))
    {

    // Handelt es sich bei $file um ein Unterverzeichnis?
    if(is_dir($file) && $file!="." && $file!="..")
    {

    // directory um eins erhoehen
    $afile[directory]++;


    // rekursiver Aufruf mit aktuellem Verzeichnis
    $y=count_file($file);

    // Ergebnisse des rekursiven Aufrufs der Funktion zu
    // directory und file aufaddieren
    $afile[directory]+=$y[directory];
    $afile[file]+=$y[file];
    }

    // Handelt es sich bei $file um eine Datei?
    if(is_file($file))
    {

    // file um eins erhoehen
    $afile[file]++;

    }
    }

    // Verzeichnisstruktur zurueck gehen
    if(stristr($dir,"../")) chdir($_SERVER["DOCUMENT_ROOT"].substr($_SERVER["PATH_INFO"],0,strrpos($_SERVER["PATH_INFO"],"/")));
    elseif($dir!=".") chdir("../");

    closedir($handle);
    }

    return $afile;
    }

    // Aufruf der Funktion
    $dir=".";
    $atest=count_file($dir);
    echo"<br />DIRECTORIES: ".$atest[directory] ;
    echo"<br />FILES: ".$atest[file];
    echo"<br />";


    [/PHP]

    3 Mal editiert, zuletzt von Toro (3. Januar 2006 um 13:14)

  • das er mir des was hier drin steth : $atest[directory] (zeile 192)

    in der Tabelle ausgibt (Zeile 132)

  • wie krieg ich es eigentlich hin damit er nicht bei C\\ ... die files zählt sondern

    in jedem Ordner der auch gelinkt wird und da im Documente ordner?

    Einmal editiert, zuletzt von Toro (3. Januar 2006 um 13:31)

  • Zitat

    Original von Toby
    Und dann den Aufruf entsprechend verändern.

    hö? wo?

    Einmal editiert, zuletzt von Toro (3. Januar 2006 um 13:39)

  • hey Toby ich muss die Variable $entry als global definieren damit ich dann dies schreiben kann:

    // Aufruf der Funktion
    $dir="$entry+\Documente";
    $atest=count_file($dir);


    ist das möglich?

    greez

    -T-----------
    ---O---------
    -----R--------
    -------O-----

  • Ja des mit der Zahl der Dateien in dem Ordner Documente, er zeigt mir niergends die anzahl an?
    Bei Zeile 137 ist mein gedanke .... was leider nicht funktioniert!
    und Zeile 37 !

    [PHP]
    <?php
    //Ueberschrift SolutionCenter ... , Blau, Zentriert, Linie unter der UEberschrift
    print("<h1 style='color:blue' align='center'>SolutionCenter Service 4 U</h1><hr align='center'>");

    $entry = "";
    //Datum
    print (date("D, d F Y -- H:i"));

    echo "<br><br>"; //neue Zeile nach dem Datum

    //_TeXt
    echo "<p align=center><font face=Arial size=4><b>";
    echo "Willkommen auf der Solutioncenter Service-Homepage";
    echo "<br>";
    echo "</b></font></p>";

    echo "<p align=center><font face=Arial size=4>";
    echo "Hier können sie mit einem Klick das gewünschte Projekt öffnen";
    echo "</font></p>";

    echo "<br><br>"; //neue Zeile

    echo "<table border=1 width=50% align=center bordercolor=#009900>";
    echo "<tr>\n";
    echo "<td width=50% align=CENTER >";


    echo "<b>Thema </b>";
    echo "</td>\n";
    echo "<td width=50% align=CENTER >";
    echo "<b>Anzahl der Dateien</b>";
    echo "</td>\n";
    echo "</tr>\n";

    echo "</table>";
    global $entry;
    // **** START der Funktion
    function travelDirectorys($DIR) {
    // in der Variable "output" werden die Verzeichnisnamen gespeichert
    //in denen die Datei "index.html" vorkommt
    $output = array();

    // Wenn das letzte Zeichen des angegebenen Directorys kein Slash
    //ist, dann fuege diesen hinzu
    // Das ist noetig weil weiter unten im Code die Anweisung "$DIR .
    //global $entry" kommt. Wenn in $DIR also
    // zB. "/var/www" gespeichert waehre und global $entry "irgendwas"
    //enthaelt, dann wuerde dadurch "/var/wwwirgendwas"
    // entstehen, deshalb wird an das $DIR noch ein Slash angehaengt
    //damit "/var/www/irgendwas" entsteht...
    if(substr($DIR, -1) != "\\") $DIR .= "\\";

    // erzeuge eine Liste aller Eintrage in einem Verzeichnis
    $d = @dir($DIR);

    // gehe jeden Eintrag in dieser Liste durch
    if (!is_object($d)) return NULL;

    while (false !== ($entry = $d->read()))
    {
    // die Verzeichniseintraege "." und ".." werden auch mit
    //aufgelistet, deshalb muessen diese ausgeschlossen werden
    if($entry != "." && $entry != "..") {

    // Wenn der Verzeichniseintrag selbst ein Verzeichnis ist...
    if( is_dir($DIR.$entry)) {
    // dann durchsuche dieses Verzeichnis ebenfalls komplett
    // und haenge dessen Ergebnisse an die bereits
    //vorhandene Ergebnisliste an
    $h = travelDirectorys($DIR.$entry);

    if (is_array($h) && is_array($output))
    $output = array_merge($output, $h);

    // Wenn ein Eintrag "index.html" heisst
    // (ignoriere gross/kleinschreibung indem die Funktion
    //"strtolower" einfach alles in kleinschreibung umwandelt )
    } elseif( strtolower($entry) == "index.html") {

    // Haenge das aktuelle Verzeichnis an die Ergebnisliste an
    $output[] = $DIR.$entry;
    }
    }
    }
    // schliesse die Verzeichnisliste wieder
    $d->close();


    // Gebe die Ergebnisliste zurueck
    return $output;
    }
    // **** ENDE der Funktion

    // ***** Benutzen der Funktion

    // Aufrufen der Funktion mit dem Verzeichnis das durchsucht werden soll
    $result = travelDirectorys("D:\\");

    // Sorge dafuer dass in der Ergebnisliste kein Eintrag mehrfach
    //vorkommt
    $result = array_unique($result);


    // durchwandere die Ergebnisliste und zeige jeden Eintrag an
    foreach($result AS $entry) {
    //trenne den Eintrag an den Slashes auf.
    $name = explode("\\", $entry);


    //drehe das Array einfach um...
    $name = array_reverse($name);

    //schneide das index.html aus
    $name = array_slice($name, 1);


    //sollte der erste Eintrag leer sein (sollte so sein, wenn man nur die //Pfade zurück bekommt), nimm den nächsten.
    if (!empty($name[0])) $name = $name[0];
    else $name = $name[1];

    $entry = substr ($entry,2);

    $stat= stat($entry);

    $link = "<a href=\.$entry. >$name</a>\n";


    echo "<table border=1 width=50% align=center bordercolor=#009900 >";


    // Aufruf der Funktion count file
    $zahl="$entry+\Documente";
    $atest=count_file($zahl);

    echo "<tr>\n";
    echo "<td width=50% align=center >";
    echo $link;
    echo "</td>\n";
    echo "<td width=50% align=center >";
    echo "<br />FILES: ".$atest[file];
    echo "</tr>\n";
    echo "</td>\n";

    }
    echo "</table>";

    function count_file($entry)
    {

    // Ueberprueft ob das angegebene Verzeichnis existiert
    if(is_dir($entry))
    {
    //-- $afile[directory]=0;
    $afile[file]=0;


    chdir($entry);
    $handle=opendir($entry);

    $handle=opendir($entry);
    while($file=readdir($handle))
    {

    // Handelt es sich bei $file um ein Unterverzeichnis?
    if(is_dir($file) && $file!="." && $file!="..")
    {

    // directory um eins erhoehen
    // -- $afile[directory]++;


    // rekursiver Aufruf mit aktuellem Verzeichnis
    $y=count_file($file);

    // Ergebnisse des rekursiven Aufrufs der Funktion zu
    // directory und file aufaddieren
    // -- $afile[directory]+=$y[directory];
    $afile[file]+=$y[file];
    }

    // Handelt es sich bei $file um eine Datei?
    if(is_file($file))
    {

    // file um eins erhoehen
    $afile[file]++;

    }
    }

    // Verzeichnisstruktur zurueck gehen
    if(stristr($entry,"../")) chdir($_SERVER["DOCUMENT_ROOT"].substr($_SERVER["PATH_INFO"],0,strrpos($_SERVER["PATH_INFO"],"/")));
    elseif($entry!=".") chdir("../");

    closedir($handle);
    }

    return $afile;
    }


    ?>
    </body>
    </html>


    [/PHP]

    4 Mal editiert, zuletzt von Toro (12. Januar 2006 um 20:09)

  • Überleg mal, was du eigentlich an die Zählfunktion übergibst... Nein, das ist KEIN Verzeichnis, du übergibst den Pfad einer Datei (da hängt überall index.html dran!).
    Daher kann diese Funktion gar nicht funktionieren.
    Es sind noch haufenweise andere Fehler drin, ich werd meine Mittagspause opfern, das alles korrigieren und dir dann ein funktionierendes Skript geben. Und das solltest du dann nicht mehr verändern.

  • So, da hast du. Unter XAMPP auf Windows getestet (VMWare ist manchmal ganz nützlich).

    Das Ding ermittelt jetzt alle Verzeichnisse, wo eine index.html (oder index.htm) drin ist und listet diese Verzeichnisse (mit allen Files die da drin sind) auf.

    Es werden alle Files und Verzeichnisse rekursiv gezählt, allerdings werden nur Verzeichnisse mitgezählt, die ne index.html haben (wenn du das anders haben willst, musst du es sagen!).

    Das Array, das zurückgegeben wird, sieht in etwa so aus:

    PHP
    array("d:\bla"=>
                array("dircount" => 10,  //alle Verzeichnisse, auch die der darunterliegenden Ordner!
                           "filecount" => 20,  //alle Dateien, auch die der darunterliegenden Ordner!
                            "files" => array(
                               0=>"index.html",
                               1=>"bla.html"
                             )
                );


    Probiers aus, wie gesagt, ich hab das unter Windows ausprobiert, es funktioniert.

  • der soll aber im Ordner Documente die Dateien zählen sonst nix, du hast zu viel gemacht....! :D :D

    ---Ordner
    -------\Ordner1
    -----------------\index.html
    ------- ---------- \Documente
    ------------------------\bild.jpg
    -------------------------\bildbla.jpg
    -------\Ordner2
    -----------------\index.html
    ------- ---------- \Documente
    ------------------------\blub.jpg


    Es soll so angezeigt werden

    -------------------------------
    Ordner1------2------------
    ------------------------------
    Ordner2------1------------
    ------------------------------

    Einmal editiert, zuletzt von Toro (13. Januar 2006 um 13:36)

  • Die Zählfunktion, die du benutzt hast, hat das allerdings auch so gemacht (oder hätte...).

    Der Ordner heißt also "Documente"? Immer?
    Nun ja, wird zwar nicht so schön, aber das kann ich einbauen.

    Funktioniert das Ding denn jetzt wenigstens so, wie du dir das vorstellst?

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!