[請益] showdir()問題請教
各位好,我是最近碰php的新手
嘗試寫一個網站伺服器的檔案總管
執行後出現問題: Fatal error: Call to undefined function showdir() in
C:\xampp\htdocs\FTP\main.php on line 108
問題出現的line108,在下面code的最底層,我用藍底黃字標示。
以下是main.php 主檔的code
麻煩大家了,謝謝!!!
<?php
header('content-type:text/html;charset=utf-8');
session_start();
define('WORK_ROOT',$_SERVER['DOCUMENT_ROOT']);
if(!isset($_SESSION['cwd']))
$_SESSION['cwd']=WORK_ROOT;
chdir($_SESSION['cwd']);
//---------------------------------------
if(!empty($_GET['op'])){
$id=$_GET['id'];
switch($_GET['op']){
//切換目錄
case 'enter':
if ($id=='root'){
//切換到網站根目錄
chdir(WORK_ROOT);
}
elseif (id=='up'){
//切換到上一層目錄
chdir($_SESSION['cwd'].'/..');
}
else{
//切換到id參數所指定的目錄
chdir($_SESSION['cwd'].'/'.$_SESSION['dirs'][$id]);
}
//重新讀取目前目錄,(getcwd()會回傳目前目錄)
$_SESSION['cwd']=str_replace('\\','/',getcwd());
//如果目前目錄不再往根目錄,就強迫返回到網站根目錄
if(!ereg('^'.WORK_ROOT,$_SESSION['cwd'])){
chdir(WORK_ROOT);
$_SESSION['cwd']=str_replace('\\','/',getcwd());
}
break;
//刪除檔案
case 'del':
//讀取要刪除的目錄或檔案名稱
if($_GET['type']=='d')
$delFilename=$_SESSION['dirs'][$id];
else
$delFilename=$_SESSION['files'][$id];
unlike($delFilename);
//設定相關訊息
$msg="刪除$delFilename";
break;
//複製檔案
case 'cpy':
//使用迴圈產生檔案複製時 檔名結尾的序號
for($i=1;$i<100;$i++){
$cpyFilename=$_SESSION['files'][$id]."-copy$i";
//如果已有檔案存在該序號,就使用下一個序號
if(file_exists($cpyFilename)){
continue;
}
else{
copy($_SESSION['files'][$id],$cpyFilename);
break;
}
}
//設定相關訊息
$msg=$_SESSION['files'][$id]."複製為$cpyFilename";
break;
}
//切換目錄或檔案操作後,目錄列表會改變,所以刪除記錄列表的session,讓程式重新
讀取
unset($_SESSION['dirs']);
unset($_SESSION['files']);
//showdir()函式會顯示目前目錄的列表
require 'showdir.php';
}
?>
<html>
<head>
<title>網站伺服器檔案總管</title>
<style type=text/css>
*.white_silver{color:white;background:Silver;}
*.white_header{color:white;background:Silver;font-size=36px;}
</style>
</head>
<body>
<p style=text-align:center;>
<?php
echo $msg;
?>
</p>
<p style=text-align:center;>
<table border="3" cellspacing="3" cellpadding="3">
<tr><td class="white_header" colspan="2" rowspan="1">
目前目錄:<?php echo $_SESSION['cwd'];?>
</td>
</tr>
<?php
//顯示目前的目錄列表
echo showdir();
?>
</table>
</p>
</body>
</html>
--
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.65.71.253
→
09/13 15:52, , 1F
09/13 15:52, 1F
→
09/13 16:53, , 2F
09/13 16:53, 2F
→
09/13 16:54, , 3F
09/13 16:54, 3F
→
09/13 17:07, , 4F
09/13 17:07, 4F
※ 編輯: GTBUG 來自: 203.65.71.253 (09/13 17:10)
→
09/13 17:10, , 5F
09/13 17:10, 5F
→
09/13 17:11, , 6F
09/13 17:11, 6F
推
09/13 17:32, , 7F
09/13 17:32, 7F
→
09/13 23:32, , 8F
09/13 23:32, 8F
h大,這是我寫showdir()的code,把function放在這,這樣會有問題嗎?
k大,妳說在這個showdir() 哪裡放echo呢? 抱歉還是想不出來T_T
<?php
function showdir(){
//取得目前城市的檔案名稱
$myUri=$_SESSION['PHP_SELF'];
//取得目前目錄的網址
$cwdUri=str_replace(WORK_ROOT,'',$_SESSION['cwd']);
//設定檔案更名以及上傳的程式檔名
$renphp='rename.php';
$uploadphp='upload.php';
//如果session中紀錄目錄列表的陣列是空的,就重新讀取
if(empty($_SESSION['dirs'])||empty($_SESSION['files'])){
//用陣列$arrDirFile儲存scandir()的傳回值
$arrDirFile=scandir($_SESSION['cwd']);
//將.與..這兩個目錄名稱刪除
unset($arrDirFile[0]);unset($arrDirFile[1]);
//刪除session陣列的內容
unset($_SESSION['dirs']);unset($_SESSION['files']);
//將@ArrDirFile的內容依照目錄與檔案的類型分別記錄於不同陣列
foreach($arrDirFile as $name){
if(is_dir($name)){
$_SESSION['dirs'][]=$name;
}
else{
$_SESSION['files'][]=$name;
}
}
unset($arrDirFile);
}
}
$html='<tr><td class="white_silver" colspan="2" rowspan="1">';
if($_SESSION['cwd']!=WORK_ROOT){
$html.=<<<END_of_HTML
<a href="$myUri?id=up&op=enter">到上層目錄</a>
<a href="$myUri?id=root&op=enter">回網站根目錄</a>
END_of_HTML;
}
$html.=<<<END_of_HTML
<a href="$uploadphp">上傳檔案</a>
</td></tr>
END_of_HTML;
//輸出子目錄列表
if(!empty($_SESSION['dirs'])){
foreach($_SESSION['dirs'] as $key=>$dir){
$html.=<<<END_of_HTML
<tr>
<td class="white_silver">
<a href="$myUri?id=$key&op=enter">$dir</a>
</td>
<td class="white_silver">
<a href="$renphp?type=d&id=key">更名</a>
</td>
</tr>
END_of_HTML;
}
}
//輸出檔案列表
if(!empty($_SESSION['files'])){
foreach($_SESSION['files'] as $key=>$file){
$html.=<<<END_of_HTML
<tr>
<td>
<a href="$cwdUri/$file">$file</a>
</td>
<td>
<a href="$myUri?type=f&id=$key&op=del">刪除</a>
<a href="$myUri?type=f&id=$key&op=cpy">複製</a>
<a href="$renphp?type=f&id=key">更名</a>
</td>
</tr>
END_of_HTML;
}
return $html;
}
?>
※ 編輯: GTBUG 來自: 203.65.71.253 (09/14 14:32)
→
09/14 14:32, , 9F
09/14 14:32, 9F