Für FatalimlokalenNetzwerk und alle die testen wollen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Für FatalimlokalenNetzwerk und alle die testen wollen

    kann den Code leider nicht testen, wer hat lust ??

    Ist dass das was du wolltest ?
    PHP-Code:
    <?php
    /*
            VerzeichnisTree von JoelH (c)(p) 2002
            für FatalimlokalenNetzwerk
    */
    $vaterid = -1;  // ist die ID des übergeordeten Verzeichnisses, das Ausgangsverzeichnis hat keins also -1
    $aktuell 0;    // ist das Verzeichnis das Aktuell ist
    $zaehler 0;   // zaehlt mit wo wir gerade im Array sind
    $dir "/root";  // Die Ausgangsbasis, muss ein Directory sein glaub ich, sonst macht es keinen Sinn.
    $tree [$zaehler]["art"] = "d"// wie gesagt, muss ein Dir sein  also können wir das setzen
    $tree [$zaehler]["vaterid"] = $vaterid;  // Das Ausgangsverzeichnis ist ebene -1 
    $tree [$zaehler]["name"] = $dir;  
    $tree [$zaehler]["pfad"] = $dir;
    $tree [$zaehler]["tiefe"] = 0;  // die Tiefe ist noch Null
    $vaterid++; //Wir gehen in die Schleife mit dem Basisverzeichnis, darum muss man jetzt erstmal den Vater neu setzen und zwar auf die 0.
    $zaehler++; // und den Arrayzähler noch eins hoch
                
    while ($aktuell $zaehler)  // wenn aktuell >= zaehler wird sind wir durch den Verzeichnisbaum durch und damit am Ende des Programms
                    
    {
                        
    $inhalt opendir($tree[$aktuell]["pfad"]);  // Schaun wir mal ins aktuell Verzeichnis was dort so alles rumfliegt.
                        
    while ($auslesen readdir($inhalt))  // Ich brauche Input, gib mir was zu lesen
                            
    {
                                if (
    $auslesen != "." && $auslesen != "..")  // Diese Verzeichnisse brauchen wir nicht.
                                    
    {
                                        if (
    is_dir($auslesen))  // Hab ich ein Verzeichniss gefunden ? Cool dann schön das d als Art eintragen
                                            
    {
                                                
    $tree[$zaehler]["art"] = "d";
                                                
    $tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1;   // Die Verzeichnisstiefe ist eins tiefer als der Vater
                                                
    $tree[$zaehler]["vaterid"] = $aktuell;
                                                
    $tree[$zaehler]["name"] = $auslesen;
                                                
    $tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen// Der Pfad ist der Vaterpfad + das neue
                                            
    }
                                        else  
    // Kein Verzeichniss :( Macht ja nichts, gibts ein f als Art und ich spare Arbeit
                                            
    {
                                                
    $tree[$zaehler]["art"] = "f";
                                                
    $tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1;
                                                
    $tree[$zaehler]["vaterid"] = $aktuell;
                                                
    $tree[$zaehler]["name"] = $auslesen;
                                                
    $tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen;
                                            }
                                        
    $zaehler++; // und wieder gehts ein Feld weiter
                                    
    }
                            }
                        
    closedir($inhalt); // Alles gelesen dann kann man es auch schliesen
                        
    $aktuell++; // Das aktuelle Verzeichniss ist nun abgearbeitet mal sehen .....
                        
    while ($tree[$aktuell]["art"] <> "d" && $aktuell $zaehler)   // .... ob wir noch ein weiteres Art "d"  finden
                            
    {
                                
    $aktuell++;
                            }
                    }
    /*
        Die Ausgabe muss noch sortiert werden hab da zwei Ideen,
        man sollte es am besten rekursiv in die richtige Reihenfolge bringen.
        Wer kann das ??
        Oder noch eine Idee, anhand der Tiefe und der Vaterid könnte man ein 
        2D Array machen, und die Tiefe und die VaterID als Koordinaten nehmen, 
        okay man braucht noch eine Dimension damit man auch mehrer Einträge 
        auf einer Koordinate    hinbekommt. Dann einfach von oben nach unten 
        von links nach rechts auslesen.
        Wer kann das ??
    */
    for ($i=0;$i<$zaehler;$i++)
        {
            echo    
    $tree[$i]["art"].
                    
    $tree[$i]["tiefe"].
                    
    $tree[$i]["vaterid"].
                    
    $tree[$i]["name"].
                    
    $tree[$i]["pfad"];
        }
    ?>

  • #2
    3 Fehlermeldungen:
    Warning: OpenDir: Invalid argument (errno 22) in c:\inetpub\wwwroot\uebung\phptree.php on line 28

    Warning: Supplied argument is not a valid Directory resource in c:\inetpub\wwwroot\uebung\phptree.php on line 29

    Warning: Supplied argument is not a valid Directory resource in c:\inetpub\wwwroot\uebung\phptree.php on line 52
    d0-1/root/root

    Kann das sein, weil mein Server Win2k is ???

    Ich glaube joelh, du hast mich falsch verstanden, ich wollte nicht die Ordnerstruktur/Dateistruktur, sondern ein Menü!!

    Beispiel:
    http://www.javarea.de/javascript/j**...a/ie-index.htm

    So ein Menü meinte ich! Die Links sollen aus der DB kommen...

    Das Problem an dem ich die ganze Zeit hänge, ist die Dynamische gestaltung der Anzahl der Untermenüs. Will der Benutzer eben 5 haben, sollen 5 erklickbar sein (das soll aber ohne Javascript laufen).

    gruss

    Kommentar


    • #3
      hmm,

      und ich wollte nicht die Fehlermeldungen sondern ein funzendes Programm
      Naja dies hier geht jetzt :
      PHP-Code:
      <?php
      /*
              VerzeichnisTree von JoelH (c)(p) 2002
              für FatalimlokalenNetzwerk
      */
      $vaterid = -1;  // ist die ID des übergeordeten Verzeichnisses, das Ausgangsverzeichnis hat keins also -1
      $aktuell 0;    // ist das Verzeichnis das Aktuell ist
      $zaehler 0;   // zaehlt mit wo wir gerade im Array sind
      $dir "/var/www/html";  // Die Ausgangsbasis, muss ein Directory sein glaub ich, sonst macht es keinen Sinn.
      $tree [$zaehler]["art"] = "d"// wie gesagt, muss ein Dir sein  also können wir das setzen
      $tree [$zaehler]["vaterid"] = $vaterid;  // Das Ausgangsverzeichnis ist ebene -1
      $tree [$zaehler]["name"] = $dir;  
      $tree [$zaehler]["pfad"] = $dir;
      $tree [$zaehler]["tiefe"] = 0;  // die Tiefe ist noch Null
      $vaterid++; //Wir gehen in die Schleife mit dem Basisverzeichnis, darum muss man jetzt erstmal den Vater neu setzen und zwar auf die 0.
      $zaehler++; // und den Arrayzähler noch eins hoch
                  
      while ($aktuell $zaehler)  // wenn aktuell >= zaehler wird sind wir durch den Verzeichnisbaum durch und damit am Ende des Programms
                      
      {
                          
      $inhalt opendir($tree[$aktuell]["pfad"]);  // Schaun wir mal ins aktuell Verzeichnis was dort so alles rumfliegt.
                          
      while ($auslesen readdir($inhalt))  // Ich brauche Input, gib mir was zu lesen
                              
      {
                                  if (
      $auslesen != "." && $auslesen != "..")  // Diese Verzeichnisse brauchen wir nicht.
                                      
      {
                                          if (
      is_dir($auslesen))  // Hab ich ein Verzeichniss gefunden ? Cool dann schön das d als Art eintragen
                                              
      {
                                                  
      $tree[$zaehler]["art"] = "d";
                                                  
      $tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1;   // Die Verzeichnisstiefe ist eins tiefer als der Vater
                                                  
      $tree[$zaehler]["vaterid"] = $aktuell;
                                                  
      $tree[$zaehler]["name"] = $auslesen;
                                                  
      $tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen// Der Pfad ist der Vaterpfad + das neue
                                              
      }
                                          else  
      // Kein Verzeichniss :( Macht ja nichts, gibts ein f als Art und ich spare Arbeit
                                              
      {
                                                  
      $tree[$zaehler]["art"] = "f";
                                                  
      $tree[$zaehler]["tiefe"] = $tree[$aktuell]["tiefe"]+1;
                                                  
      $tree[$zaehler]["vaterid"] = $aktuell;
                                                  
      $tree[$zaehler]["name"] = $auslesen;
                                                  
      $tree[$zaehler]["pfad"] = $tree[$aktuell]["pfad"]."/".$auslesen;
                                              }
                                          
      $zaehler++; // und wieder gehts ein Feld weiter
                                      
      }
                              }
                          
      closedir($inhalt); // Alles gelesen dann kann man es auch schliesen
                          
      $aktuell++; // Das aktuelle Verzeichniss ist nun abgearbeitet mal sehen .....
                          
      while ($tree[$aktuell]["art"] <> "d" && $aktuell $zaehler)   // .... ob wir noch ein weiteres Art "d"  finden
                              
      {
                                  
      $aktuell++;
                              }
                      }
      /*
          Die Ausgabe muss noch sortiert werden noch hab ich neu eine Idee,
          man sollte es am besten rekursiv in die richtige Reihenfolge bringen.
          Wer kann das ??
          Oder noch eine Idee, anhand der Tiefe und der Vaterid könnte man ein 
          2D Array machen, und die Tiefe und die VaterID als Koordinaten nehmen, 
          okay man braucht noch eine Dimension damit man auch mehrer Einträge 
          auf einer Koordinate    hinbekommt. Dann einfach von oben nach unten 
          von links nach rechts auslesen.
          Wer kann das ??
      */
      for ($i=0;$i<$zaehler;$i++)
          {
              echo    
      $tree[$i]["art"]." ".
                      
      $tree[$i]["tiefe"]. " ".
                      
      $tree[$i]["vaterid"]." ".
                      
      $tree[$i]["name"].    " ".
                      
      $tree[$i]["pfad"]."\n";
          }
      ?>
      Das Problem mit dem Opendir ist wegen fehlender Rechte, ausserdem war wohl noch was anderes falsch.


      Wie ist die Lage mit dem Menü, was willst du von mir ?

      Kommentar


      • #4
        hmm,

        das geht 'nur' mit JS, zumindestens sinnvollerweise, da es ansonsten immer neu geladen werden müsste, das ist nicht so fein.

        Kommentar


        • #5
          hmm,

          kann mir mal einer Sagen was an dem Script falsch ist ? Er geht nur in tiefe 1 alles was tiefer liegt geht irgendwie nicht, geht eventuell irgendwas mit is_dir nicht oder was mach ich falsch, gerade mal wieder auf dem Schlauch steh.

          Kommentar


          • #6
            hmm,

            UP

            Kann mir keiner helfen ? Titus ??

            Kommentar


            • #7
              Ich hab gerade nicht gesehen, warum es nicht rekursiert,
              aber zum Sortieren gibt´s usort:

              usort ($tree, 'treecmp');

              und
              PHP-Code:
              function treecmp ($a$b)
              {
                if (!(
              $ret strcmp ($a['pfad'], $b['pfad'])))
                  if (!(
              $ret strcmp($a['art'], $b['art'])))
                    
              $ret strcmp($a['name'], $b['name']);
                return 
              $ret;

              P.S.: Wenn du beim Pfad nicht noch den Namen anhängst, funktioniert das auch so, wie ich´s gemeint hatte.
              Zuletzt geändert von Titus; 17.05.2002, 13:01.
              mein Sport: mein Frühstück: meine Arbeit:

              Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

              Kommentar


              • #8
                ok, ich hab´s

                1) vor der äußeren Schleife $pfad = $dir setzen
                2) if (is_dir($pfad.'/'.$auslesen))

                und gleich verkürz ich das Ganze noch ein wenig.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  Ok, mit dem $pfad hab ich mich ein wenig vertan, die Var muss natürlich in der Schleife definiert werden ...
                  Und ein neues Array-Element 'sort', damit das Sortieren einfacher geht (und so funktioniert, wie´s soll).
                  Oder wolltest du die Inhalte des Verzeichnisses direkt unter dem Verzeichniseintrag selbst? Dann benutze beim Sort das hier: (is_dir($pfad.'/'.$auslesen) ? '':chr(255))
                  PHP-Code:
                  <?php
                  function treecmp ($a$b)
                  {
                    return 
                  strcmp($a['sort'], $b['sort']);
                  }
                  /*
                          VerzeichnisTree von JoelH (c)(p) 2002
                          für FatalimlokalenNetzwerk
                  */
                  $aktuell 0;    // ist das Verzeichnis das aktuell ist
                  $dir '.';  // Ich fange mal im aktuellen Verzeichnis an
                  $tree = array(array(
                    
                  'art'     => 'd',
                    
                  'vaterid' => -1,  // Das Ausgangsverzeichnis ist Ebene -1 
                    
                  'name'    => $dir,
                    
                  'pfad'    => $dir,
                    
                  'tiefe'   => 0,  // die Tiefe ist noch Null
                    
                  'sort'    => ''
                  ));
                  $vaterid 0//Wir gehen in die Schleife mit dem Basisverzeichnis, darum muss man jetzt erstmal den Vater neu setzen und zwar auf die 0.
                  $zaehler 1// und den Arrayzähler auf eins
                  while ($aktuell $zaehler)  // wenn aktuell >= zaehler wird sind wir durch den Verzeichnisbaum durch und damit am Ende des Programms
                  {
                    
                  $pfad $tree[$aktuell]["pfad"];
                    
                  $inhalt opendir($pfad);  // Schaun wir mal ins aktuell Verzeichnis was dort so alles rumfliegt.
                    
                  while ($auslesen readdir($inhalt))  // Ich brauche Input, gib mir was zu lesen
                      
                  if ($auslesen != "." && $auslesen != "..")  // Diese Verzeichnisse brauchen wir nicht.
                        
                  $tree[$zaehler++] = array(
                          
                  'art' => (is_dir($pfad.'/'.$auslesen) ? 'd':'f'),
                          
                  'tiefe' => $tree[$aktuell]['tiefe']+1,
                          
                  'vaterid' => $aktuell,
                          
                  'name' => $auslesen,
                          
                  'pfad' => $pfad.'/'.$auslesen,
                          
                  // mit dem neuen Element 'sort' wird das Vergleichen einfach
                          
                  'sort' => $pfad.'/'.(is_dir($pfad.'/'.$auslesen) ? '[d]':'[f]').$auslesen
                        
                  );
                    
                  closedir($inhalt); // Alles gelesen dann kann man es auch schliesen
                    // Das aktuelle Verzeichniss ist nun abgearbeitet mal sehen .....
                    // .... ob wir noch ein weiteres Art "d"  finden
                    
                  for ($aktuell++; $tree[$aktuell]["art"] <> 'd' && $aktuell $zaehler$aktuell++);
                  }
                  usort ($tree'treecmp');
                  echo 
                  '<table border="1"><tr>
                    <th>ID</th><th>Art</th><th>Tiefe</th>
                    <th>VaterID</th><th>Name</th><th>Pfad</th>
                  </tr>'
                  ;
                  for (
                  $i=0;$i<$zaehler;$i++)
                  {
                    
                  $leaf $tree[$i];
                    echo    
                  "<tr>
                    <th>
                  $i</th><td>$leaf[art]</td><td>$leaf[tiefe]</td>
                    <td>
                  $leaf[vaterid]</td><td>$leaf[name]</td><td>$leaf[pfad]</td>
                    </tr>"
                  ;
                  }
                  echo 
                  '</table>';
                  ?>
                  Zuletzt geändert von Titus; 17.05.2002, 13:58.
                  mein Sport: mein Frühstück: meine Arbeit:

                  Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                  Kommentar

                  Lädt...
                  X