Archief - PHP: DIRlijst

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

`SeriOUs

Legacy Member
PHP:
<?
$sPath = "content/";
listDir($sPath);

function listDir($psPath) {
	if ($dir = opendir($psPath))
	{
		echo "<ul>";
		while (($file = readdir($dir)) !== false)
		{
			if (($file != '.') and ($file != '..'))
			{
				if (is_dir($psPath.'/'.$file))
				{
					echo "\n";
					echo "<li>";
					echo "\n";
					echo "<a href=\"#\">".$file."</a>";
					echo "\n";
					listDir($psPath.'/'.$file);
					echo "\n";
					echo "</li>";
					echo "\n";
				}
			}  
		}
		echo "</ul>";
	}
	closedir($dir);
}
?>
Het script werkt wel, MAAR, onder elke <a></a> zet hij nu ook een <ul></ul>, en dit mag niet. Hij mag enkel een <ul></ul> weergeven indien er subdirs aanwezig zijn in de gegeven dir.
Kan dit eenvoudig, of moet daar een hele aparte functie voor geschreven worden?
Ik hoop dat het wat duidelijk is.

Alvast bedankt.

0n3Liner

Legacy Member
PHP:
<?php
$sPath = "content/";
listDir($sPath);

function listDir($psPath,$list=false) {
    if ($dir = opendir($psPath))
    {
        if($list) echo "<ul>";

        while (($file = readdir($dir)) !== false)
        {
            if (($file != '.') and ($file != '..'))
            {
                if (is_dir($psPath.'/'.$file))
                {
                    echo "\n";
                    echo "<li>";
                    echo "\n";
                    echo "<a href=\"#\">".$file."</a>";
                    echo "\n";
                    listDir($psPath.'/'.$file,true);
                    echo "\n";
                    echo "</li>";
                    echo "\n";
                }
            }  
        }
         if($list) echo "</ul>";
    }
    closedir($dir);
}
?>

`SeriOUs

Legacy Member
Nope, flaggen heb ik ook al geprobeerd, maar werkt niet. Hij zal altijd de dir openen, ook al zitten er geen subdirs in.
Dit dus ook niet.

Mijn mappenstructuur (benaming natuurlijk niet correct) is dus bv.
Code:
content
  01
  02
    02_01
    02_02
    02_03
  03
  04
   04_01
En dit zou de output dan moeten zijn:
Code:
<ul>
  <li><a>01</a>
  </li>

  <li><a>02</a>
    <ul>
      <li><a>02_01</a></li>
      <li><a>02_02</a></li>
      <li><a>02_03</a></li>
    </ul>
  </li>

  <li><a>03</a>
  </li>

  <li><a>04</a>
    <ul>
      <li><a>04_01</a></li>
    </ul>
  </li>
In elke map zit dan een of meerdere files. (maar die worden niet weergegeven)

Smoerf

Legacy Member
Als je wilt x-aantal mappen diep gaan, zal je toch moeten werken met een recursieve functie denk ik.

*Smoerf kijkt even in z'n php archives ;)

Het is geen kant-en-klare oplossing, want ik heb het vlug gecopy-paste.
Mijn bedoeling was om een mapoverzicht te maken à la Windows Explorer met mapjes, geen files. Dus, mits wat aanpassingen en gesleutel zou het toch moeten lukken denk ik.

PHP:
<html>
<head>
<title>
Disk management
</title>
<style>
body,td	{
	color:#333333;
	font-family:arial,verdana;
	font-size:12px;
	}
</style>
</head>
<body>
<?php

function file_size($filesize){
   if ($filesize < 1024){
      return $filesize . " b";
   }else{
      if (($filesize/1024) < 1024){
         return round(($filesize/1024), 1) . " Kb";
      }else{
         if (($filesize/(1024*1024)) < 1024){
            return round(($filesize/(1024*1024)), 1) . " Mb";
         }else{
            return round(($filesize/(1024*1024*1024)), 1) . " Gb";
         }
      }
   }
}

function get_content($dir, $the_files){
   $dh  = opendir($dir);
   while (false !== ($filename = readdir($dh))) {
      if (($filename != ".") && ($filename != "..")){
         if (filetype($dir . "/" . $filename) == "dir"){
            //array_push($the_files, get_content(($dir . "/" . $filename), $the_files));
            $the_files[] = $dir . "/" . $filename;
            $the_files = get_content(($dir . "/" . $filename), $the_files);
            //echo "<b>" . $dir . "/" . $filename . "</b><br />";
         }else{
            //array_push($the_files, $dir . "/" . $filename);
            $the_files[] = $dir . "/" . $filename;
            //echo $dir . "/" . $filename . "<br />";
         }
      }
   }
   return $the_files;
}

$base_dir = "f:/webroot/DEV";

$content = array();
$content = get_content($base_dir, $content);

//echo count($content) . "<br />";
for ($n = 0;$n < count($content);$n++){
   if (filetype($content[$n]) == "dir"){
      $path_parts = pathinfo($content[$n]);
      if ($path_parts["dirname"] == $base_dir){
//         echo "<font color=\"red\">" . $path_parts["dirname"] . "</font>\n";
         echo "<img src=\"images/folder.gif\" border=\"0\" vspace=\"0\" hspace=\"0\" alt=\"folder\" />&nbsp;<b>" . $path_parts["basename"] . "</b>\n";
         echo "<br />\n";
         $hoofddir = $path_parts["basename"];
      }else{
         $waar = $content[$n];
         $aantal_mappen = substr($waar, strlen($base_dir . "/" .  $hoofddir), strlen($waar));
         $demapjes = split ("/", $aantal_mappen);
         if (count($demapjes) > 1){
            for ($a = 0;$a < (count($demapjes)-2);$a++){
               echo "<span style=\"width:20px;overflow-x:hidden;\">&nbsp;</span>";
            }
            echo "<span style=\"width:20px;overflow-x:hidden;\">|_____________________</span>\n";
            echo "<img src=\"images/folder.gif\" border=\"0\" vspace=\"0\" hspace=\"0\" alt=\"folder\" />&nbsp;" . $demapjes[count($demapjes)-1] . "<br />\n";
         }
/*
         echo "|--><b>" . $aantal_mappen . "</b><br / >";

         echo "|----><font color=\"red\">" . $path_parts["dirname"] . "</font>\n";
         echo "<font color=\"green\">" . $path_parts["basename"] . "</font>\n";
         echo "<font color=\"navy\">" . $path_parts["extension"] . "</font>\n";

         echo "<br />\n";
*/
      }

//      echo $content[$n] . "<br />\n";

   }

}

?>
</body>
</html>

`SeriOUs

Legacy Member
Eigenlijk 2 levels is genoeg. zoals in het voorbeeld.

Maar zelfs zonder recursie krijg ik het niet fatsoenlijk :(

Dus blijf ik maar bij recursie, zodat ik die functie in andere projecten ook kon gebruiken.

`SeriOUs

Legacy Member
Kweet Smoerf, maar ik had het graag echt in een lijst (ul, li) zien staan, en net die ul doet verdomd moeilijk.
Anders was het geen probleem geweest hoor.
Maar toch, al erg bedankt voor de snelle hulp. :)

Smoerf

Legacy Member
Mits wat aanpassingen kunt ge het toch wel omzetten naar <ul> en <li> tags?
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan