[請益] showdir()問題請教

看板PHP作者 (賈斯伯張)時間11年前 (2012/09/13 14:23), 編輯推噓1(108)
留言9則, 3人參與, 最新討論串1/1
各位好,我是最近碰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
這個訊息一定是你沒正確include到或者showdir沒被定義
09/13 15:52, 1F

09/13 16:53, , 2F
k大,我用require showdir.php,意思是showdir.php的code有
09/13 16:53, 2F

09/13 16:54, , 3F
問題?
09/13 16:54, 3F

09/13 17:07, , 4F
require 路徑檢查看看 !!
09/13 17:07, 4F
※ 編輯: GTBUG 來自: 203.65.71.253 (09/13 17:10)

09/13 17:10, , 5F
H大,showdir.php和main.php放再同一資料夾,我把那行
09/13 17:10, 5F

09/13 17:11, , 6F
require的code用黃底紅字標起來了,會是擺放位子的問題嗎?
09/13 17:11, 6F

09/13 17:32, , 7F
你在 showdir 檔案裡面多加一個 echo 看看會不會顯示
09/13 17:32, 7F

09/13 23:32, , 8F
function 的名稱呢 ?!
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
附上showdir()的程式碼,還是想不出來 麻煩大大了!
09/14 14:32, 9F
文章代碼(AID): #1GKNlK47 (PHP)