toro
Goto Top

Ich komme irgendwie nicht weiter!

PHP- Countfunktion!

Hallo @ all,
ich hab eine Frage und zwar möchte ich das auf einer Seite angegeben wird wieviele Dateien in einem Ordner sind. Ich habe eine Suchfunktion programmiert der mir alle index.html seiten raussucht und mir auf der Seite den letzten Ordner anzeigt wo diese Index.html drin ist und diesen auch an die index.html seite verklinkt. Ich habe alles mit Tabellen gemacht und möchte bei der 2 Spalte die zahl ausgeben lassen wiviele Dateien in dem Unterordner Documente drin sind!
Ich weiss es ist etwas schwer zu verstehen bzw. schwer zu erklären.
Ich wäre sehr dankbar auf die Lösung den ich bin schon leicht verzweifelt...!
Vielen Dank schonmal im voraus!

Ich poste mal mein Queltext er ist zwar etwas lang hab ihn aber etwas kommentiert! Bin noch ein noob!:

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


    echo "<b>Thema </b>";  
    echo "</td>\n";  
    echo "<td width=50% align=CENTER &#160;>";  
    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)) $name = $name;
    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
  $dir=".";  
   $atest=count_file($dir);

    echo "<tr>\n";  
    echo "<td width=50% align=center &#160;>";  
    echo $link;
    echo "</td>\n";  
    echo "<td width=50% align=center &#160;>";  
    echo "<br />FILES: ".$atest[file];  
    echo "</tr>\n";  
    echo "</td>\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($entry);

      $handle=opendir("D:\\CISCO\Documente");  
      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;
    }



?>
</body>
</html>

Content-Key: 15994

Url: https://administrator.de/contentid/15994

Printed on: April 19, 2024 at 13:04 o'clock

Member: Schrottie
Schrottie Jan 13, 2006 at 13:00:49 (UTC)
Goto Top
ok damit ich dir helfen kann brauche ich noch eine bestätigung:

- Alle Ordner durchsuchen inklusive unter ordner
- Anzahl der Daten pro Ordner auflisten/zusammenrechen
- Die Index.html soll nicht mit an gegeben werden


Schrottie

EDIT:

Ich sehe garde du willst eine Festplatte durchsuchen! Ist das absicht? Eigendlich ist PHP dafür nicht gedacht, dafür gibt es freeware Programme. Auserdem kann es zu problemen kommen wenn du auserhalb des "htdocs"-Ordners arbeitest.
Member: Toro
Toro Jan 13, 2006 at 13:10:42 (UTC)
Goto Top
nur die daten zählen die im Unterordner Documente drin sind!


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

Es soll so angezeigt werden

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

und des Ordner1 soll verlinkt werden auf die index.html

Edit:Ja ich will eine andere Festplatte durchsuchen und bis jetzt hat er keine probleme gemacht!
Member: Schrottie
Schrottie Jan 13, 2006 at 13:12:42 (UTC)
Goto Top
ist in jedem Ordner eine index datei?
Member: Toro
Toro Jan 13, 2006 at 13:18:06 (UTC)
Goto Top
Es sind nicht in jedem Ordner index.html dateien drin!
Member: Schrottie
Schrottie Jan 13, 2006 at 13:21:54 (UTC)
Goto Top
worrauf soll dann verwiesen werden?
Member: Toro
Toro Jan 13, 2006 at 13:23:26 (UTC)
Goto Top
angegeben soll der Ordnername und verwiesen soll auf die index.html die darunter ist!
Das funktioniert ja schon, das problem ist das mit dem zählen!