php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Funktionen und Rückgabewerten


 
yodatortenboxwe
23-03-2005, 21:14 
 
hiho,

Frage zu Funktionen und Rückgabewerten...

Eine Funktion wird von einem Dokument mit dem Aufruf xtc_getDownloads() gestartet, ließt ein
Verzeichnis aus und liefert dann durch return $files; das ganze per Rückgabewert zurück.
Das geht alles total Prima…
Aber…
Ich will nun nicht nur das Verzeichnis sondern auch die Dateien aller Unterverzeichnisse
usw. haben. Dazu muss ich das Verzeichnis also Rekursiv auslesen. Ich lasse nun also in der
Funktion xtc_getDownloads() eine neue Funktion aufrufen die die Verzeichnisse rekursiv
auslesen tut. Diese neue Funktion liefert ebenfalls als Ergebnis eine Variable $files die
mit der von der Originalfunktion identisch ist, aber sie hat auch alle Dateien der Unter-
Verzeichnisse dabei. Soweit so gut…
Wie bekomme ich aber nun den Rückgabewert wieder hin… egal ob ich ihn in die erste
Oder zweite Funktion schreibe, ich bekomm nichts zurück zum Dokument das die
Funktion aufruft…
Hast jemand da ne Idee???

Kurzform original:
1. Datei aufruf xtc_getDownloads()
2. xtc_getDownloads() durchsucht Verzeichnis und erstellt $files
3. Rückgabe an Datei der $files von xtc_getDownloads()
Kurzform neu:
1. Datei aufruf xtc_getDownloads()
2. xtc_getDownloads() ruft GetDirArray($sPath) auf
3. GetDirArray($sPath) durchsucht rekursiv das Verzeichnis und erstellt $files
4. Rückgabe an Datei der $files von ???

Wer macht also nun die Rückgabe…erwartet wird sie von der xtc_getDownloads()???


Gruß yoda :rocks:

 
Hopka
23-03-2005, 21:21 
 
function GetDirArray($sPath) {
return /* Array(...) */;
}
function xtc_getDownloads() {
return GetDirArray($sPath);
}

 
yodatortenboxwe
23-03-2005, 22:41 
 
genau das wollte ich wissen...merci

Ich hab zwar nun einen Rückgabewert, aber leider noch nicht alles das was ich wollte.

Es gibt einen Ordner Downloads in dem 2 Dateien sind. In diesem Ordner wiederum ist ein Ordner Test in dem eine Datei liegt.
Das orginal Funktion wird von einer Datei aufgerufen die dann den rückgabewert erwartet. der original code ist folgender:
function xtc_getDownloads() {

$files=array();

$dir=DIR_FS_CATALOG.'download/';
if ($fp=opendir($dir)) {
while ($file = readdir($fp)) {
if (is_file($dir.$file) && $file!='.htaccess'){
$size=filesize($dir.$file);
$files[]=array(
'id' => $file,
'text' => $file.' | '.xtc_format_filesize($size),
'size'=>$size,
'date'=>date ("F d Y H:i:s.", filemtime($dir.$file)));

}//if
} // while
closedir($fp);
}
return $files;
}

Da ich nun alles inkl. Unterverzeichnisse auslesen will habe ich es nun wie oben beschrieben umgesetzt:
function xtc_getDownloads()
{

$dir=DIR_FS_CATALOG.'download/';
GetDirArray($dir);

return GetDirArray($dir);
}

function GetDirArray($sPath)
{
$handle=opendir($sPath);
while ($file = readdir($handle))
{
$retVal[count($retVal)] = $file;
}
closedir($handle);
sort($retVal);

while (list($key, $val) = each($retVal))
{
if (($val != ".") && ($val != "..") && ($val != ".htaccess"))
{
$path = str_replace("//","/",$sPath.$val);
$size=filesize($path);
$file = str_replace(DIR_FS_CATALOG."download/","",$sPath.$val);
if (!is_dir($sPath.$val))
{
$files[]=array(
'id' => $file,
'text' => $file.' | '.xtc_format_filesize($size),
'size'=>$size,
'date'=>date ("F d Y H:i:s.", filemtime($path)));
} // end if
if (is_dir($sPath.$val))
{
GetDirArray($sPath.$val."/");
} // end if
} // end if
} // end while
return $files;
}
So habe ich keinerlei Fehlermeldungen, aber in dem was zurückgegeben wird stehen nur die Dateien der ersten Ebene und nicht die Dateien aus dem Unterverzeichnis.
Wenn ich nun return GetDirArray($sPath); nehme kommen nur fehlermeldungen und nur mit GetDirArray(); ebenfalls...

 
penizillin
24-03-2005, 02:57 
 
+ php-tags
- scrollballken
---------------------
= leserlicher code

 
yodatortenboxwe
24-03-2005, 12:06 
 
sorry...


so besser???

:dontknow:

 
onemorenerd
24-03-2005, 12:41 
 
Versuch's mit
$files[] = GetDirArray($sPath.$val."/");
in der 6.-letzten Zeile deines Codes.

(Wäre schön wenn PHP- und Code-Blöcke eine Zeilennummerierung hätten.)


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:04 Uhr.