Return funktioniert nich?

hab1cht

Erfahrenes Mitglied
Hallo,
ich baue gerade ein Script das mir alle Ordner und Dateien in einem Ordner anzeigt.
Kurze Erklärung: als erstes wird eine Selectbox erstellt in der alle Unterordner aufgelistet werden, gleichzeitig werden in einem Array die Dateien dieser Ordner gespeichert, die ich später, sobald ein bestimmter Ordner selected wurde angezeigt werden. Dazu will ich das Array ($dateien) von der Funktion zurückgeben.
Jetzt funktioniert allerdings meiner Meinung nach Return nicht, hier der Code:
PHP:
<select name="ordner">
<option value="images">images</option>
<?php
function ordner($dirid) {
    while (($file = readdir($dirid)) !==false) { 
        if (($file !== ".") && ($file !== "..")) {
	    if(stristr($file, '.') && !is_dir($file)){
		$curdir = getcwd();
		$curdir = strstr($curdir, 'images')."\\";
		$curdir = str_replace("\\", "§", $curdir);    //    \ wird durch § ersetzt, da ungültiger Bezeichnung
		$dateien[$curdir][] = $file;
	    }
            if (is_dir($file)) { 
                $curdir2 = getcwd(); 
                $datei = strstr($curdir2, 'images')."\\";
	$datei .= $file;
	echo "<option value=\"$datei\">$datei</option>";
	chdir($file); 
                $newdir = opendir("."); 
                $closedir = ordner($newdir); 
                closedir($closedir); 
                chdir(".."); 
            }
  
        } 
    }
    return ($dateien[$curdir]); 
}
$dirid = opendir("."); 
$closedir = ordner($dirid); 
closedir($closedir); 
echo "</select>";
print_r ($dateien);  // hier erfolgt keine Ausgabe
?>
Sieht jmd einen Fehler?

Vielen Dank im Voraus

MfG
hab1cht
 
Zuletzt bearbeitet:
So hab jetzt doch noch ein Problem festgestellt, es fehlt jeweils die erste Datei pro Ordner.
Sieht jmd wo mir diese verloren geht?
Soweit ich das beurteilen kann, geht sie schon beim Ordner öffnen verloren.

Hier noch einmal der aktuelle Code:
PHP:
<form name="doublecombo">
<select name="ordner" size="5" onChange="redirect(this.options.selectedIndex)">
<option value="images">images</option>
<?php
function ordner($dirid) {
    while (($file = readdir($dirid)) !==false) { 
        if (($file !== ".") && ($file !== "..")) {
	    if(stristr($file, '.') && !is_dir($file)){
		$curdir = getcwd();
		$curdir = strstr($curdir, 'images')."\\";
		$curdir = str_replace("\\", "§", $curdir);  
		$dateien[$curdir][] = $file;
		global $dateien;
	    }
        if (is_dir($file)) { 
        $curdir2 = getcwd(); 
        $datei = strstr($curdir2, 'images')."\\";
		$datei .= $file;
		echo "<option value=\"$datei\">$datei</option>";
		chdir($file); 
        $newdir = opendir("."); 
        $closedir = ordner($newdir); 
        closedir($closedir); 
        chdir(".."); 
            }
  
        } 
    } 
}
$dirid = opendir("."); 
$closedir = ordner($dirid); 
closedir($closedir); 
echo "</select>";

echo "<select name=\"dateien\" size=\"5\">";
foreach($dateien[images§] as $element){
	echo "<option value=\"$element\">$element</option>";
}
echo "</select>";

$keys = array_keys($dateien);
?>

<script>
<!--
var groups=document.doublecombo.ordner.options.length
var group=new Array(groups)
for (i=0; i<groups; i++)
group[i]=new Array()

<?php
for($i=0; $i<count($keys); $i++){
	for($h=0; $h<count($dateien[$keys[$i]]); $h++){
		?>
		group[<?php echo $i ?>][<?php echo $h ?>]=new Option("<?php echo $dateien[$keys[$i]][$h] ?>","<?php echo $dateien[$keys[$i]][$h] ?>")
		<?php
	}
}
?>

var temp=document.doublecombo.dateien

function redirect(x){
for (m=temp.options.length-1;m>0;m--)
temp.options[m]=null
for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[x][i].text,group[x][i].value)
}
temp.options[0].selected=true
}
//-->
</script>

</form>

Vielen Dank im Voraus

Mfg
hab1cht
 
Zuletzt bearbeitet:
oh Gott, das war bei mir auch mal.
Ich weiß nicht mehr genau, was ich gemacht habe, aber versuch mal die Nummer des Arrays, welches du ausgeben willst, auf -1 zu setzen.
 
wenn ich das Array per print_r() ausgebe, erscheint der Eintrag auch nicht,
echo $dateien[ordner][-1] geht auch nicht.

Trotzdem danke.
Noch jmd eine Idee wo mir die erste Datei jedes Ordners verloren geht?

EDIT: so habe jetzt mal die Fehlerquelle eingeschränkt:
- wenn ich alle Dateien direkt ausgebe, fehlt nichts
- wenn ich sie im Array $dateien speichere und später ausgebe, fehlt jeweils die erste Datei jedes Ordners
-> komisch

mfg
hab1cht
 
Zuletzt bearbeitet:
Ich glaube das der erste Wert überschrieben wird, siehe folgende Ausgabe:
Code:
Array
(
    [images§] => Array
        (
            [0] => de.gif
        )
)
Array
(
    [images§] => Array
        (
            [0] => en.gif
        )
)
Array
(
    [images§] => Array
        (
            [0] => en.gif
            [1] => haha.php
        )
)
Array
(
    [images§] => Array
        (
            [0] => en.gif
            [1] => haha.php
            [2] => haha2.php
        )
)

Was kann ich ändern?


EDIT: so habs jetzt, ich das global $dateien; an den Anfang der Funktion geschrieben und siehe da, es gehen keine Dateien verloren.
 
Zuletzt bearbeitet:
Zurück