DIR-Problem

DJPaschi

Digenis Progger
ID: 49867
L
19 Juni 2006
103
6
Moin,

ich versuche mir grad eine Kleine Gallerie zu basteln die ohne DB laufen soll.

Daher hab ich versucht das ganze über das Auslesen der Verzeichnisse zu lösen.

PHP:
<?
$dir=opendir("/var/www/web6/html/Bilder/");
$files=array();
while(false !== $handle=readdir($dir)){
	$i++;
	$files[$i]=$handle;
}
closedir($dir);
$i='0';
echo "<table border='1'>";
for($i='1';$i<count($files);$i++){
	$handle=$files[$i];
	echo "<tr><td>".$handle."</td>";
	if(is_dir($handle)){
		chdir($handle);
		$dir2=opendir(".");
		echo "<td>";
		while(false !== $handle2=readdir($dir2)){
			echo $handle2."<br>";
		}
		closedir($dir2);
		echo "</td></tr>";
	}
}
echo "</table>";
?>

Ich habe hierbei allerdings immer das Problem, dass er mir folgende Fehlermeldung ausspuckt:
Warning: is_dir() [function.is-dir]: open_basedir restriction in effect. File(..) is not within the allowed path(s): (/var/www/web6/html/:/var/www/web6/phptmp/:/var/www/web6/files/:/var/www/web6/atd/) in /var/www/web6/html/Gallerie.php on line 14

Allerdings ist an der Stelle das Opendir doch schon abgehakt oder?

ich habe das über das Array gemacht da der 2. Teil auch innerhalb des 1. Abschnittes nicht funktioniert.

Kann mir da einer von euch weiter helfen?

wäre sehr nett.

MfG
DJPaschi
 
mal grundsaetzlich:
1)
Zeile 9 ist ueberfluessig wenn 2 Zeilen spaeter eh eine for-Schleife benutzt wird, in der $i sowieso initialisiert wird.

2) $i sollte ja wohl kein buchstabe sein, sondern ne zahl, also kannst du ruhig schreiben
PHP:
$i=1


zu deinem Problem:
1)an den Anfang mal ein error_reporting(E_ALL) schreiben,
2)und Klammern und die Zuweisung in Zeile 4 schreiben, ich weiss grad nicht aus dem Kopf welcher Operator Vorrang hat, aber vllt hilft das. auf jeden Fall sieht es schoener aus
3) eine Fehlerbehandlung fehlt voellig, zum beispiel ob die Reihung $files auf Elemente enthaelt. ist das der Fall weisst du schonmal, wo du schauen musst
 
Und bei deiner for() Schleife in Zeile 11 musst du entweder $i 0 zuweisen oder <= als Vergleichsoperator nutzen.
Das wichtigste wird wohl Ich-Ess-Nudeln's Punkt 2) sein.
In Zeile 18 (die while() Schleife) muss es allerdings auch gemacht werden.
 
ich habe nun mir das alles noch mal angeguckt und dabei ist das nun rausgekommen:


PHP:
<?
$i=0;
error_reporting(E_ALL);
$dir=opendir("/var/www/web6/html/Bilder/");
$files=array();
while(false !== ($handle=readdir($dir))){
	$files[$i]=$handle;
	$i++;
}
closedir($dir);
print_r($files);
echo "<table border='1'>";
for($i=0;$i<count($files);$i++){
	$handle=$files[$i];
	if($handle != "." OR $handle != ".."){
	echo "<tr><td>".$handle."</td>";
	if(is_dir($handle)){
		chdir($handle);
		$dir2=opendir(".");
		echo "<td>";
		while(false !== ($handle2=readdir($dir2))){
			echo $handle2."<br>";
		}
		closedir($dir2);
		echo "</td></tr>";
	}
	}
}
echo "</table>";
?>

ich wollt eigentlich keine Externe Klasse benutzen.

Die Frage die ich mir gestellt habe ist, ob es eine andere Möglichkeit gibt zu überprüfen ob der Dateiname ein Verzeichnis oder eine Datei ist. Das würde mir ja auch erst mal weiter helfen.

MfG
DJPaschi
 
Klasse hin oder her...

Die eigentliche Fehlermeldung ist das der Verzeichniss Pfad nicht erlaubt ist. (Sicherheitstechnisch)
Also entweder per php.ini erlauben (open_basedir) oder anderes Verzeichniss wählen in dem du Rechte hast.

Ausserdem geht das auch per scan_dir(). (Du schreibst dir im Prinzip die scan_dir Funktion selbst.) https://php.net/scan_dir siehe Beispiel #2
 
ok gut habe also einfach noch nicht verstanden das ich in der php.ini die Open_basedir erlauben muss.

Dann sage ich mal danke an alle.

Gruss DJPaschi