我正在嘗試自動填充一組頁面,其中包含的內容由包含在設置文件夾結構中的內容自動生成。返回沒有回聲的函數結果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 = "<Directory>";
$size = "<Directory>";
$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 = "<Website>";
}
// Cleans up . and .. directories
if($name=="."){$name=". (Current Directory)"; $extn="<System Dir>"; $favicon=" style='background-image:url($namehref/.favicon.ico);'";}
if($name==".."){$name=".. (Parent Directory)"; $extn="<System Dir>";}
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循環中重新運行它嗎?
我覺得這裏有一些非常基本的東西,我很想念你,所以你的幫助非常感謝。
首先要做的就是將'return'語句移出循環。你也想追加到你的結果('$ row')而不是直接分配。我建議你使用一個數組 – Phil 2014-10-29 03:11:22
而不是在循環中調用return,將'$ row'附加到另一個變量(例如'$ return')並在循環後返回該變量! – wolfgangwalther 2014-10-29 03:12:04
我認爲集中一個字符串('$ return。= $ row')在這裏比使用數組更容易 – wolfgangwalther 2014-10-29 03:14:20