kostenloser Webspace werbefrei: lima-city


Verzeichnisliste erstellen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    t-li

    t-li hat kostenlosen Webspace.

    hallo!

    ich habe verzweifelt versucht, mit hilfe von php einen tag/re">ref="/tag/ordner">ordner auszulesen und daraus eine liste aller verzeichnisse á la
    verzeichnis1
    verzeichnis2
    verzeichnis3
    ...
    zu erstellen. es sollen nur verzeichnisse und keine dateien aufgelistet werden.

    ich hatte vorher einen code, der nur dateien, aber keine verzeichnisse auslas
    <ul>
    <?PHP
    	$dir = 'img/album'; 
    	$d = dir($dir);
    	
    	//filtert alle nicht-bild-dateien
    	while (false !== ($entry = $d->read())){
    		$tag = false;
    		if(strpos(strtolower($entry), ".jpg") === false
    		&& strpos(strtolower($entry), ".png") === false
    		&& strpos(strtolower($entry), ".gif") === false
    		){ $tag = true; }
    		
    		//bei nicht-bild-datei wird abgebrochen
    		if($tag == true) continue;		
    		//versteckte dateien werden nicht angezeigt
    		if (substr($entry,0,1)==".") continue;
    			
    		echo '<li>'.$entry.'</li>';
    
    	}	
    ?>
    </ul>
    (es ging um bild dateien) und versucht, das analog für nur verzeichnisse, keine dateien zu formulieren:
    <ul>
    <?PHP
    	$dir = 'img/'; 
    	$d = dir($dir);
    				
    	//filtert alle nicht-bild-dateien
    	while (false !== ($entry = $d->read())){
    		$tag = false;
    		if($entry != "."
    		&& $entry != ".."
    		&& strrpos($entry, ".", 3) === true
    		){ $tag = true; }
    		
    		//bei nicht-bild-datei wird abgebrochen
    		if($tag == true) continue;		
    		//versteckte dateien werden nicht angezeigt
    		if (substr($entry,0,1)==".") continue;
    			
    		echo '<li>'.$entry.'</li>';
    
    	}
    ?>
    </ul>
    aber irgendwie klappt das nicht, mir werden sowohl ordner als auch dateien ausgegeben.

    ich hoffe, ihr könnt mir helfen ;)

  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Aus einem anderen Forum (nach 2sek Google), und ungetestet :biggrin: :
    Diese Funktion sucht ab einem voreingstelltem Verzeichnis
    alle Verzeichnisse / Ordner und gibt diese in einem array zurück
    <?php
    function getDir($startquelleverzeichnis){
      $OrdnerList=glob($startquellverzeichnis.'/*',GLOB_ONLYDIR);
        for($i=0;$i<count($OrdnerList);$i++){    
          $subList=glob($OrdnerList[$i].'/*',GLOB_ONLYDIR);
            foreach($subList as $item){
              if(!in_array($item,$OrdnerList)){
                $OrdnerList[]=$item;
              }
            }
          }
      sort($OrdnerList);
      return $OrdnerList;
    }
    
    // hier das startverzeichnis vorgeben oder durch Server-Var ersetzen.
    $start="/var/www/vhosts/web/html";
    $ordner=getDir($start);
    echo '<pre>',var_dump($ordner),'</pre>';
    ?>


    Sieht mir zwar bisschen veraltet aus, aber du kannst es ja mal testen und dir ggf Anregungen holen...

    Beitrag zuletzt geändert: 19.6.2011 11:05:00 von alfr3d
  4. Autor dieses Themas

    t-li

    t-li hat kostenlosen Webspace.

    alfr3d schrieb:
    Aus einem anderen Forum (nach 2sek Google), und ungetestet :biggrin: :
    Diese Funktion sucht ab einem voreingstelltem Verzeichnis
    alle Verzeichnisse / Ordner und gibt diese in einem array zurück
    <?php
    function getDir($startquelleverzeichnis){
      $OrdnerList=glob($startquellverzeichnis.'/*',GLOB_ONLYDIR);
        for($i=0;$i<count($OrdnerList);$i++){    
          $subList=glob($OrdnerList[$i].'/*',GLOB_ONLYDIR);
            foreach($subList as $item){
              if(!in_array($item,$OrdnerList)){
                $OrdnerList[]=$item;
              }
            }
          }
      sort($OrdnerList);
      return $OrdnerList;
    }
    
    // hier das startverzeichnis vorgeben oder durch Server-Var ersetzen.
    $start="/var/www/vhosts/web/html";
    $ordner=getDir($start);
    echo '<pre>',var_dump($ordner),'</pre>';
    ?>


    Sieht mir zwar bisschen veraltet aus, aber du kannst es ja mal testen und dir ggf Anregungen holen...


    danke erstmal ;)

    ich werd's testen, hoffe mal, dass es klappt.

    aber wie bzw wonach hast du bei google gesucht? ich hab mehrere suchbegriffe und jedesmal die ersten 5 seiten ausprobiert... ;p

    EDIT: tja, in den zeilen
    ...
            foreach($subList as $item){
              if(!in_array($item,$OrdnerList)){
                $OrdnerList[]=$item;
    ...
    hängt es sich bei mir immer auf :
    Fatal error: Maximum execution time of 60 seconds exceeded in C:\xampp\htdocs\ordnertest.php on line ...


    Beitrag zuletzt geändert: 19.6.2011 13:46:24 von t-li
  5. t-li schrieb:
    ... verzweifelt versucht, ...
    es sollen nur verzeichnisse und keine dateien aufgelistet werden.
    was du auch immer anzeigen willst! so geht es am einfachsten: directoryiterator oder recursivedirectoryiterator
    kurzes beispiel:
    <?php
    $ls   = "<pre>\n";
    $path = './';
    
    foreach (new DirectoryIterator($path) as $fileInfo) {
        if ($fileInfo->isDot() || $fileInfo->isFile()) {continue;}
        $ls .= $fileInfo->getFilename() . "\n";
    }
    
    exit($ls . '</pre>');
  6. Um es einfach zu halten...
    <?php
    	function directoryTree($dir, $level = 0)
    	{
    		echo $dir."<br />\n";
    		foreach(scandir($dir) as $file)
    		{
    			if(is_dir($dir.'/'.$file))
    				if(($file != '.') && ($file != '..'))
    					{
    						for($i = $level; $i > 0; $i--)
    						{
    							echo '    ';
    						}
    						directoryTree($dir.'/'.$file, $level + 1);
    					}
    		}
    	}
    	
    	directoryTree('Verzeichnis');
    ?>
  7. drafed-map schrieb:
    Um es einfach zu halten...
    ????

    bei mir sieht die ausgabe so aus (wenn <dir> = './').
    ./
    .//forum_data
    .//it-heberle
    .//style
    .//style/a
    .//style/b
    .//template
    das ist mehr als unzufriedenstellend.
    wenn so, dann eher:
    <?php
    /**
     *  hemiolos.lima-city.de/forum/r_dir.php
     */
    
    $ds = DIRECTORY_SEPARATOR;
    function directoryTree($dir, $level = 0) {
      global $ds;
    
      $dir = str_replace($ds . $ds, $ds, realpath($dir));
      echo $dir."<br />\n";
      foreach (scandir($dir) as $file) {
        if (is_dir($dir . $ds . $file)) {
          if (($file != '.') && ($file != '..')) {
            for ($i = $level; $i > 0; $i--) {
              echo '    ';
            }
            directoryTree($dir . $ds . $file, $level++);
          }
        }
      }
    }
    directoryTree(".$ds");  // example: './' oder '.\'
    was das macht:
    1. weg mit hardcodiertem '/'! (ist zwar für die meisten 'wurst', aber ein langer path unter windose sieht besser aus - was mir wiederum wurst ist ;o);
    2. '//' oder '\\' beseitigt;
    3. kaum brauchbare '4 spaces' in der for-schleife mit abspath austauscht.

    aber über einfachheit des kodes würde ich unter keinen umständen sprechen.
    das ist einfach ;o) (und hat viel mehr möglichkeiten!)

    lg

    Beitrag zuletzt geändert: 19.6.2011 21:50:05 von hemiolos
  8. Naja, wenn man die Funktion nicht bedienen kann... -.- Dass der Code einwandfrei funktioniert, beweist dieses Video (ich lösche das Video nach einiger Zeit, es kann sein, dass es dann durch ein anderes Video mit gleicher URL ersetzt wird).

    Beitrag zuletzt geändert: 19.6.2011 22:02:05 von drafed-map
  9. <?php 
    function recurse($it) { 
       echo '<ul>'; 
       for( ; $it->valid(); $it->next()) { 
           if($it->isDir() && !$it->isDot()) { 
               printf('<li class="dir">%s</li>', $it->current()); 
               if($it->hasChildren()) { 
                   $bleh = $it->getChildren(); 
                   echo '<ul>' . recurse($bleh) . '</ul>'; 
               } 
           }
       } 
       echo '</ul>'; 
    } 
    
    recurse(new RecursiveDirectoryIterator('verzeichnis')); 
    ?>
  10. drafed-map schrieb:
    Naja, wenn man die Funktion nicht bedienen kann...
    cli????, aber tolles fernsehprog :o)

    ich halte es von allen etwas überzogen, ein programmteil so zu programmieren, dass das ergebnis gleich und nur auf eine art und weise darstellbar ist.
    ich gebe außerdem NIE mitten in schleifen oder sont wo 'videosequencen' mit echo o. sonstwie aus. (ich gebe nur die komplette, fertige html seite einmal aus, aber das ist die frage der logik. wer nicht hat, programmiert spagettikode.) daher kommt zuerst einmal alles in variablen.

    außerdem sind noch immer alle lösungen zu kompliziert. daher zum schluss eine 'nakte' lösung, wo man das ergebnis noch weiter verarbeiten kann - falls nötig:
    <?php
    $path = realpath('./');
    #$path = './';  // funktioniert auch
    $res  = null;
    $dir  = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST);
    foreach ($dir as $name => $object) {
      $res[str_replace('/', '_', dirname($name))][] = basename($name);
    }
    
    exit('<pre>' . print_r($res, true));


    lg
  11. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!