作者GTBUG (贾斯伯张)
看板PHP
标题[请益] showdir()问题请教
时间Thu Sep 13 14:23:13 2012
各位好,我是最近碰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
1F:→ kerash:这个讯息一定是你没正确include到或者showdir没被定义 09/13 15:52
2F:→ GTBUG:k大,我用require showdir.php,意思是showdir.php的code有 09/13 16:53
3F:→ GTBUG:问题? 09/13 16:54
4F:→ hom1130:require 路径检查看看 !! 09/13 17:07
※ 编辑: GTBUG 来自: 203.65.71.253 (09/13 17:10)
5F:→ GTBUG:H大,showdir.php和main.php放再同一资料夹,我把那行 09/13 17:10
6F:→ GTBUG:require的code用黄底红字标起来了,会是摆放位子的问题吗? 09/13 17:11
7F:推 kerash:你在 showdir 档案里面多加一个 echo 看看会不会显示 09/13 17:32
8F:→ hom1130:function 的名称呢 ?! 09/13 23:32
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)
9F:→ GTBUG:附上showdir()的程式码,还是想不出来 麻烦大大了! 09/14 14:32