返回没有echo PHP的函数结果

时间:2014-10-29 03:07:29

标签: php

我正在尝试使用设置文件夹结构中包含的内容自动生成的内容自动填充一组页面。

我找到了一些代码,这些代码大部分都是我所追求的,但是我正在尝试修改它,以便它是一个可以使用不同文件夹多次调用的函数。 原始代码使用简单的回声而不是函数。

我已经对它进行了编辑并使其成为一个函数,但是我试图弄清楚如何让函数返回指定文件夹中的所有结果。

我正在使用此功能:

    function getDirContents($dir) {
      date_default_timezone_set("Australia/Brisbane");
      $hide = ".";
      if (!isset($_SERVER['QUERY_STRING']) || $_SERVER['QUERY_STRING'] == "" || substr($_SERVER['QUERY_STRING'],0,2) == ".." || strstr($_SERVER['QUERY_STRING'], "..")) {
          $currdir = "$dir";
      } else {
          $currdir = urldecode($_SERVER['QUERY_STRING']);
      }
      if ($currdir == "$dir") {
          $label = "Root";
        } else {
          $path = explode('/', $currdir);
          $label = $path[count($path)-1]; 
      }
      // Opens directory
      $myDirectory = opendir($currdir);
      // Gets each entry
      while ($entryName = readdir($myDirectory)) {
          $dirArray[] = $entryName;
      }
      // Closes directory
      closedir($myDirectory);
      // Counts elements in array
      $indexCount = count($dirArray);
      // Sorts files
      //sort($dirArray);
      // Loops through the array of files
      for ($index = 0; $index < $indexCount; $index++) {
          // Decides if hidden files should be displayed, based on query above.
          if (substr("$dirArray[$index]", 0, 1) != $hide ) {
              // Resets Variables
              $favicon = "";
              $class = "file";
              // Gets File Names
              $name = $dirArray[$index];
              $namehref = ($currdir == "." ? "" : $currdir . '/') . $dirArray[$index];
              $fullname = $currdir . '/' . $dirArray[$index];
              // Gets Date Modified
              $modtime = date("M j Y g:i A", filemtime($fullname));
              $timekey = date("YmdHis", filemtime($fullname));
              // Separates directories, and performs operations on those directories
              if (is_dir($currdir . '/' . $dirArray[$index])) {
                  $extn = "&lt;Directory&gt;";
                  $size = "&lt;Directory&gt;";
                  $sizekey = "0";
                  $class = "dir";
                  // Gets favicon.ico, and displays it, only if it exists.
                  if (file_exists("$namehref/favicon.ico")) {
                      $favicon = " style='background-image:url($namehref/favicon.ico);'";
                      $extn = "&lt;Website&gt;";
                  }
                  // Cleans up . and .. directories
                  if($name=="."){$name=". (Current Directory)"; $extn="&lt;System Dir&gt;"; $favicon=" style='background-image:url($namehref/.favicon.ico);'";}
                  if($name==".."){$name=".. (Parent Directory)"; $extn="&lt;System Dir&gt;";}

                  if ($currdir == "." && $dirArray[$index] == "..")
                      $namehref = "";
                  elseif ($dirArray[$index] == "..") {
                      $dirs = explode('/', $currdir);
                      unset($dirs[count($dirs) - 1]);
                      $prevdir = implode('/', $dirs);
                      $namehref = '?' . $prevdir;
                  }
                  else
                      $namehref = '?' . $namehref;
              }
              // File-only operations
              else {
                  // Gets file extension
                  $extn = pathinfo($dirArray[$index], PATHINFO_EXTENSION);
                  // Prettifies file type
                  switch ($extn){
                      case "png": $extn="PNG Image"; break;
                      case "jpg": $extn="JPEG Image"; break;
                      case "jpeg": $extn="JPEG Image"; break;
                      case "svg": $extn="SVG Image"; break;
                      case "gif": $extn="GIF Image"; break;
                      case "ico": $extn="Windows Icon"; break;

                      case "txt": $extn="Text File"; break;
                      case "log": $extn="Log File"; break;
                      case "htm": $extn="HTML File"; break;
                      //case "html": $extn="HTML File"; break;
                      case "xhtml": $extn="HTML File"; break;
                      case "shtml": $extn="HTML File"; break;
                      case "php": $extn="PHP Script"; break;
                      case "js": $extn="Javascript File"; break;
                      case "css": $extn="Stylesheet"; break;

                      case "pdf": $extn="PDF Document"; break;
                      case "xls": $extn="Spreadsheet"; break;
                      case "xlsx": $extn="Spreadsheet"; break;
                      case "doc": $extn="Microsoft Word Document"; break;
                      case "docx": $extn="Microsoft Word Document"; break;

                      //case "zip": $extn="ZIP Archive"; break;
                      case "htaccess": $extn="Apache Config File"; break;
                      case "exe": $extn="Windows Executable"; break;

                      default: if($extn!=""){$extn=strtoupper($extn);} else{$extn="Unknown";} break;
                  }
                  // Gets and cleans up file size
                  $size = pretty_filesize($fullname);
                  $sizekey = filesize($fullname);

               }
              $row = "<td><a href='$namehref'>$name ($extn, $size)</a>    </td>";
              return $row;   
        }
      }
    }

然后使用类似的变量调用它

 $Term1 = getDirContents('myFolder/Structure/');
 echo $term1;

这会打印出文件夹中的第一个文件,但是在我的生活中我无法找到如何将它们全部列出来。

我的理解是,当你在一个函数中使用return时它会停止函数,但是不应该重新运行for循环吗?

我觉得这里有一些非常基本的东西,所以我非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

一个非常简单的解决方法是更改​​分配表行字符串以将下一行附加到保持变量$row(带.=)的方式,然后移动{{1在循环之外。

我不打算复制整个代码,但最后几行看起来像这样;

return

希望这有帮助。

PS:由于我们要将字符串附加到 $row .= "<td><a href='$namehref'>$name ($extn, $size)</a> </td>"; // deleted 'return $row;' and moved to below } } return $row; } ,因此最好在函数顶部对其进行初始化,以确保内存中没有$row的值。为此,只需编写$row(即将其设置为空白字符串)。