PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   PHP Developer Forum (https://www.php-resource.de/forum/php-developer-forum/)
-   -   Funktionen und Rückgabewerten (https://www.php-resource.de/forum/php-developer-forum/52276-funktionen-und-rueckgabewerten.html)

yodatortenboxwe 23-03-2005 20:14

Funktionen und Rückgabewerten
 
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 20:21

PHP-Code:

function GetDirArray($sPath) {
    return 
/* Array(...) */;
}
function 
xtc_getDownloads() {
    return 
GetDirArray($sPath);



yodatortenboxwe 23-03-2005 21: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:
PHP-Code:

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:
PHP-Code:

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 01:57

Code:

+ php-tags
- scrollballken
---------------------
= leserlicher code


yodatortenboxwe 24-03-2005 11:06

sorry...


so besser???

:dontknow:

onemorenerd 24-03-2005 11:41

Versuch's mit
PHP-Code:

$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 09:49 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG