Verzeichnis auslesen

Funky_MF

Erfahrenes Mitglied
Ich steh mal wieder auf dem Schlauch, hiermit lese ich ein Verzeichnis aus und stell die darin enthaltenen Files als Links dar:
PHP:
<?php

$dir = '/www/htdocs/public'; 
$content = opendir($dir);

while($file = readDir ($content)) { 
      if(($file != ".") && ($file != "..") && ($file != ".htaccess") && ($file != ".htpasswd") && ($file != "index.php")) { 
            echo "<a href=\"/public/".$file."\">".$file."</a><br>"; 
            } if (empty($file)) {
                  echo "Zur Zeit sind keine Dateien zum Download verfügbar";
                  }
      }
      
?>
Soweit so gut, allerdings wird mir im Fall, daß das Vereichnis leer ist, nichts angezeigt, dabei überprüfe ich dies ja mit if (empty($file)) , aber das scheint wohl nicht richtig zu sein. Kann mir da jemand weiterhelfen ?
 
Dein Problem ist, das $file nie empty werden kann.
Aber so müsste es gehen:
PHP:
$dir = './test';
$content = opendir($dir);
$i = 0;
while($file = readDir ($content))
{
  if(($file != ".") && ($file != "..") && ($file != ".htaccess") && ($file != ".htpasswd") && ($file != "index.php"))
  {
    echo "<a href=\"/public/".$file."\">".$file."</a><br>";
    $i++;
  }
}
if($i == 0)
  echo "Zur Zeit sind keine Dateien zum Download verfügbar";

redlama
 
Hab da was ... ist eine alte Klasse von mir mit ein wenig zusätzlichem Klimmbimm.
Wenn du alle Dateien anzeigen möchtest setze einfach eine aureichend hohe Zahl
als Parameter ein und für page kannst du 0 einsetzen. Ansonsten hast du die Möglichkeit
die Dateien seitenweise auszugeben .. über $class->temp_files bekommst du ein Array zurück.

PHP:
class file_collector
{
	var $block_array;

	var $temp_names;
	var $temp_files;
	
	var $page;
	var $perpage;

	var $files;
	var $pages;
	
	var $counter;
	var $done;
	
	function file_collector($dir,$block,$page=0,$perpage=0)
	{
		if(!is_dir($dir))
			return FALSE;
			
		$this->block_array = $block;

		$this->temp_names = array();
		$this->temp_files = array();

		$this->page		=	$page;
		$this->perpage	=	$perpage;
		
		$this->files	=	0;
		
		if($dir == "")       $dir = ".";
		
		$this->counter	=	$this->perpage * $this->page;
		$this->done	=	0;
	
		$this->filecount($dir);
		
		$this->pages	=	ceil($this->files/$perpage)-1;

		$this->collect($dir);
	}

	function filecount($dir)
	{
		if(isset($dir_handle)) 
			closedir($dir_handle);

		$dir_handle	=	opendir($dir);
		
		while($_var	=	readdir($dir_handle))
		{
			$_path = $dir."/".$_var;
			if((is_dir($_path))
			&& ($_var != ".")
			&& ($_var != "..")
			&& (!in_array($_var,$this->block_array)))
				$this->filecount($_path);

			if(!is_dir($_path))
				$this->files++;
		}
	}
	
	function collect($dir)
	{
		if(isset($dir_handle)) 
			closedir($dir_handle);

		$dir_handle	=	opendir($dir);
		
		while($_var	=	readdir($dir_handle))
		{
			if($this->done==($this->counter+$this->perpage))
				break;
				
			$_path = $dir."/".$_var;

			if((is_dir($_path))
			&& ($_var != ".")
			&& ($_var != "..")
			&& (!in_array($_var,$this->block_array)))
				$this->collect($_path);

			if(!is_dir($_path))
			{
				$this->done++;
				
				if($this->done<=$this->counter)
					continue;
			
				$this->temp_names[] = array("path"=>$dir,
											"file"=>strtolower($_var));
				$this->temp_files[] = $_path;
			}
		}
	}
}
 
Vielen Dank für die Hilfe

@redlama: genauso wollte ich es haben ! :)

@Nils: Dank dir auch, aber mit OOP bin ich noch nicht so vertraut, werds mir aber trotzdem mal anschauen, kann bestimmt noch was draus lernen ;-)

Gruß Funky
 
Zurück