⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 filemanage.php

📁 PHP4_0入门与提高源程序代码
💻 PHP
📖 第 1 页 / 共 2 页
字号:

	if (!is_dir($fsDir)) Error("Dir not found",$relDir) ; //检查是否为一个目录

	// 读取目录的内容
	if ( !($dir = @opendir($fsDir)) ) //打开目录
		Error("Read Access denied",$relDir) ;
	while ($item = readdir($dir)) {//逐项读取目录中的内容
		if ( $item == ".." || $item == "." ) continue ; //如果为..或.,继续读取下一项
		if ( is_dir($fsDir . $item) ) {	//如果读取的一项为文件夹
			$dirList[] = $item ;	//把该项保存到目录数组中
		}
		else if ( is_file($fsDir . $item) ) {//如果这一项为文件
			$fileList[] = $item ;		//把它保存到文件列表中
		}
		else {
		  // unknown file type
		  // $text = "Could not determine file type of " ;
		  // Error("File Error", $text.$relDir."/".$item) ;
		  // exit ;
		}
	}
	closedir($dir) ; //关闭目录
	$emptyDir = ! (sizeof($dirList) || sizeof($fileList)) ;//检查目录是否为空

	// 开始向浏览器输出
	$text  = "Use this page to add, delete or " ;
	$text .= "revise files on this web site." ;

	StartHTML("(Navigate)",$text) ;

	echo "<TABLE BORDER=0 CELLPADDING=2 
		CELLSPACING=3 WIDTH=\"100%\">" ;

	// 显示上一级目录链接
	if ($fsDir != $fsRoot) {
		$parent = dirname($relDir) ;
		if ($parent == "") $parent = "/" ;
?>

<TR><TD><?php echo $gblIcon("up") ?></TD><TD COLSPAN=4 CLASS=LST>
<A HREF="<?php echo $self ?>?D=<?php echo urlencode($parent) ?>">
<B><?php echo $parent ?></B></A></TD></TR>

<?php
	}

	// 显示子目录
	if (sizeof($dirList) > 0) {
		sort($dirList) ; 
?>

<TR><TD></TD><TD COLSPAN=4 CLASS=TOP><HR>DIRECTORY NAME</TD></TR>

<?php
		while (list($key,$dir) = each($dirList)) {

			$tstr = "<A HREF=\"" . $self . "?D=" ; 
			$tstr .= urlencode($relDir."/".$dir) ;
			$tstr .= "\">" . $dir . "/</A>" ;
?>

<TR><TD><?php echo $gblIcon("fldr") ?></TD>
<TD COLSPAN=4 CLASS=LST><?php echo $tstr ?></TD></TR>

<?php
		}  
	}  
?>

<!--显示文件-->
<TR><TD></TD><TD COLSPAN=4><HR><B><?php echo $webRoot . $relDir ?>
</B></TD></TR>
<TR><TD></TD><TD CLASS=TOP>DOCUMENT NAME</TD>
<TD><?php echo $gblIcon("blank") ?></TD>
<TD CLASS=TOP>LAST UPDATE</TD><TD CLASS=TOP>FILE SIZE</TD></TR>

<?php
	if (sizeof($fileList) > 0) {
	  sort($fileList) ;
	  while (list($key,$file) = each($fileList)) {	
	    $path = $fsDir."/".$file ;
	    $mod  = filemtime($path) ;
	    $sz   = filesize($path) ;

	    if ($sz >= 10240) {
	      $sz = (int)(($sz+1023)/1024) . " k" ;
	    }
	    else {
	      $sz .= " " ;
	    } // end size

	    $a = $b = "" ;

	    if ( ($mod + 30*86400) > time() ) {
	      $a  = "<SPAN CLASS=RED TITLE=\"Newer" ;
	      $a .= " than 30 days\"> * </SPAN>" ;
	    }

	    $tstr = $webRoot . $relDir . "/" . $file ;
	    $tstr  = "<A HREF=\"" . $tstr . "\">" ;
	    $tstr .= $file . "</A>" . $a ;

	    $ext = strtolower(strrchr($file,".")) ;
	    if ( $ext=="" || 
	         strstr(join(" ",$gblEditable),$ext) ) 
	    {  
	      $b  = "<A HREF=\"" . $self . "?A=C&F=" ;
	      $b .= urlencode($file) . "&D=" . urlencode($relDir) ;
	      $b .= "\" TITLE=\"List contents\">" ;
	      $b .= $gblIcon("view") . "</A>" ;
	    }

?>

<TR><TD>
<A HREF="<?php echo $self ?>?A=E&F=<?php echo urlencode($file)
?>&D=<?php echo urlencode($relDir) ?>" TITLE="View/Edit">
<?php echo $gblIcon($ext) ?></A></TD>
<TD CLASS=LST><?php echo $tstr ?></TD>
<TD CLASS=LST ALIGN=center><?php echo $b ?></TD>
<TD CLASS=LST><?php echo date("d/M/y G:i:s",$mod) ?></TD>
<TD CLASS=LST><?php echo $sz ?>Bytes</TD></TR>

<?php
	  }  
	}  

//如果是空目录
	if ($emptyDir) {
?>

<FORM METHOD="POST" ACTION="<?php echo $self ?>">
 <TR><TD></TD><TD COLSPAN=4 CLASS=BAR>
  <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">
  OK TO DELETE THIS EMPTY FOLDER?
  <INPUT TYPE="CHECKBOX" NAME="CONFIRM"> 
  <INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="DELETE">
 </TD></TR>
</FORM>

<?php
	} 
?>
<!--创建新的目录,文件,以及上载文件-->
<TR><TD></TD><TD COLSPAN=4><HR></TD></TR>

<FORM METHOD="POST" ACTION="<?php echo $self ?>">
<TR><TD></TD><TD COLSPAN=4 CLASS=BAR>CREATE NEW
 <INPUT TYPE="RADIO" NAME="T" VALUE="D" CHECKED>DIRECTORY -OR- 
 <INPUT TYPE="RADIO" NAME="T" VALUE="F">FILE : &nbsp;&nbsp;
 <NOBR>NAME <INPUT TYPE="TEXT" NAME="FN" SIZE=14>
 <INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="CREATE">
 <INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">
 <INPUT TYPE="SUBMIT" VALUE="CREATE"></NOBR> 
 <NOBR>OR <A HREF="<?php echo $self 
	?>?A=U&D=<?php echo urlencode($relDir) ?>">UPLOAD</A> A FILE
 </NOBR>
</TD></TR>
</FORM>
</TABLE>

<?php
	EndHTML() ;
} 

//////////////////////////////////////////////////////////////////
//===============================
//作用:上载文件
//参数:$fsRoot	文档根目录
//参数:$relDir	相对路径
//=================================
function UploadPage($fsRoot, $relDir) {

	$self = $GLOBALS["PHP_SELF"] ;
	if ($relDir == "") $relDir = "/" ; 
?>

<P><TABLE BORDER=0 CELLPADDING=5><TR><TD WIDTH=5></TD><TD CLASS=BAR>
<FORM ENCTYPE="multipart/form-data" METHOD="POST" 
 ACTION="<?php echo $self ?>">
DESTINATION DIRECTORY:<B><?php echo " " . $relDir ?></B>
<P>PATHNAME OF LOCAL FILE<BR>
<INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>">
<INPUT TYPE="HIDDEN" NAME="POSTACTION" VALUE="UPLOAD">
<INPUT SIZE=30 TYPE="FILE" NAME="FN"></P>
<P><INPUT TYPE="SUBMIT" VALUE="UPLOAD"></P>
<P>If the <B>[BROWSE...]</B> button is not displayed,<BR>
you must upgrade to an RFC1867-compliant browser.</P>
<P>Your browser:<BR><?php echo $GLOBALS["HTTP_USER_AGENT"] ?></P>
</FORM>
</TD></TR>
<TR><TD></TD><TD>
<FORM METHOD="POST" ACTION="<?php echo $self ?>">
<INPUT TYPE="HIDDEN" NAME="DIR" VALUE="<?php echo $relDir ?>"><BR>
<INPUT TYPE="SUBMIT" NAME="POSTACTION" VALUE="CANCEL">
</FORM>
</TD></TR></TABLE></P>

<?php	
} 

//////////////////////////////////////////////////////////////////
//============================
//作用:输出出错信息
//参数:$title	标题
//参数:$text	文本
//============================
function Error($title,$text="") {
	StartHTML("(".$title.")",$text) ;
	echo "<P ALIGN=center>Hit your Browser's Back Button.</P>" ;
	EndHTML() ;
	exit ;
} 

//////////////////////////////////////////////////////////////////
//================
//作用:检查目录是否可写
//参数:$path	目录的路径
//===================
function Writeable($path) {
	clearstatcache ;
	$perms = @fileperms($path) ;
	$owner = @fileowner($path) ;
	exec("id",$id) ;
	eregi( "^uid=([0-9]*)",$id[0], $regs) ;
	$apacheuid = $regs[1] ;
	$perms = 0777 & $perms ;
	if ( $apacheuid != $owner ) {
		return (06 == (06 & $perms)) ?  1 : 0 ;
	} 
	else {
		return (0600 == (0600 & $perms)) ? 1 : 0 ;
	} 

} 

//////////////////////////////////////////////////////////////////
//===================
//作用:对密码加密
//参数:$user		用户名
//参数:$pw		密码
//====================
function CreateHash($user, $pw) {

	global $gblHash ;  // hash function to use 

	if ($user == "" || $pw == "") {
		$text = "either no password or no username supplied" ;
		Error("Create Hash",$text) ;
	}
	$title = "(Create Hash)" ;
	StartHTML($title) ;
	echo "<P ALIGN=center>" ;
	echo "<BLOCKQUOTE>Copy the value below and paste it " ;
	echo "into the<BR>value for \$gblPw in the source of " ;
	echo "this file<BR><BR><B>" . $gblHash($user.$pw) ;
	echo "</B><BR><BR>Hash function: " . $gblHash ;
	echo "</BLOCKQUOTE></P>" ;
	EndHTML() ;
	exit ;

} 

//////////////////////////////////////////////////////////////////
//==============================
//作用:输出信息:无权进入页面
//参数:无
//===============================
function NoEntry() {

	$user = $GLOBALS["PHP_AUTH_USER"] ;
	$pw   = $GLOBALS["PHP_AUTH_PW"] ;	
	$self = $GLOBALS["PHP_SELF"] ;

	$title = "(401 Unauthorized)" ;
	$text  = "No trespassing !" ;
	StartHTML($title,$text) ;
?>

<FORM ACTION="<?php echo $self ?>?HASH=create" METHOD="POST">
<INPUT TYPE="HIDDEN" NAME="USER" VALUE="<?php echo $user ?>">
<INPUT TYPE="HIDDEN" NAME="PW" VALUE="<?php echo $pw ?>">

<BLOCKQUOTE><B>If you are a site administrator:</B><BR><BR>
Click below to <B>generate a password hash</B><BR>from 
the username-password pair you just<BR>entered. Then include the hash in 
the source<BR>of this file.<BR><BR>
<INPUT TYPE="SUBMIT" VALUE="CREATE HASH">
</BLOCKQUOTE></FORM>

<?php
	EndHTML() ;
	exit ;
}

//////////////////////////////////////////////////////////////////

// 主程序
// ============
// 查询参数:大写字母
// 内部函数:大写字母开始
// 全局常量:以gbl开始

	$gblFilePerms = "644" ;         // 新建文件的默认权限
	$gblDirPerms  = 0755 ;		// 新建目录的默认权限

	// 输出层叠样式表,
	// 创建用户,密码对
	if ($STYLE == "get") { CSS() ; exit ; }
	if ($HASH != "") { 
		CreateHash($USER, $PW) ; 
		exit ; 
	}

	// 执行内部认证
	if ( $gblAuth && 
	     $gblHash($PHP_AUTH_USER.$PHP_AUTH_PW) != $gblPw ) {
		header("WWW-authenticate: basic realm=\"$SERVER_NAME\"") ;
		header("HTTP/1.0 401 Unauthorized") ;
		NoEntry() ;
		exit ;
	}

	// 返回相对与$gblFsRoot的路径
	$relDir = $DIR ;	// 来自于POST
	if ($relDir == "") {	// 如果POST没有定义
		$relDir = urldecode($D) ;  // 使用GET中的变量
	}	

	if ($relDir == "/") $relDir = "" ; 	
	// 默认为站点的根目录

	if (strstr($relDir,"..")) Error("No updirs allowed");
//	echo $SCRIPT_NAME,"<BR>";
	$relScriptDir = dirname($SCRIPT_NAME) ;  	
	//例如 /siteman
//	echo $SCRIPT_FILENAME;
	$fsScriptDir  = dirname($SCRIPT_FILENAME) ; 	
	// 例如 /home/httpd/html/siteman

	$gblFsRoot = substr($fsScriptDir,0,
	  strlen($fsScriptDir)-strlen($relScriptDir)) ;
	// 例如 /home/httpd/html

	$fsDir = $gblFsRoot . $relDir ; // 当前目录
	if ( !is_dir($fsDir) ) Error("Dir not found",$relDir) ;
	
	switch ($POSTACTION) {
	//上载文件
	case "UPLOAD" :
		if (!Writeable($fsDir)) Error("Write denied",$relDir) ;
		if (strstr($FN_name,"/")) 
			Error("Non-conforming filename") ;
		$source = $FN ;
		$target = $fsDir . "/" . $FN_name ;
		exec("cp $source $target") ;
		exec("chmod $gblFilePerms $target") ;
		clearstatcache() ;
		break ;
	//保存文件
	case "SAVE" :
		$path = $gblFsRoot . escapeshellcmd($RELPATH) ;
		$writable = Writeable($path) ;
		$legaldir = Writeable(dirname($path)) ;
		$exists   = (file_exists($path)) ? 1 : 0 ; 
	 	if (!($writable || (!$exists && $legaldir))) 
			Error("Write denied",$RELPATH) ;
		$fh = fopen($path, "w") ;
		fwrite($fh,$FILEDATA) ;
		fclose($fh) ;
		clearstatcache() ;
		break ;
	//创建文件
	case "CREATE" :
		if (!Writeable($fsDir)) Error("Write denied",$relDir) ;
		$path = $fsDir . "/" . $FN ;  // 要创建的文件或目录
		$relPath = $relDir . "/" . $FN ;
		switch ( $T ) {
		case "D" :  // 创建一个目录
		  if ( ! @mkdir($path,$gblDirPerms) ) 
		    Error("Mkdir failed",$relPath) ; 
		  clearstatcache() ;
		  break ;
		case "F" :  //创建一个文件
		  if ( file_exists($path) && !Writable($path) ) 
		    Error("File not writable", $relPath) ;
		  $tstr = $PHP_SELF . "?A=E&D=" . $relDir . "&F=" . $FN ;
		  header("Location: " . $tstr) ;
		  exit ;
		}
		break ;
	//删除文件或目录
	case "DELETE" :  
		if ( $CONFIRM != "on" ) break ;

		$tstr  = "Attempt to delete non-existing object or " ;
		$tstr .= "insufficient privileges: " ;

		if ( $FN != "") {  // 删除一个文件
		  $path =  $fsDir . "/" . $FN ;
		  if ( ! @unlink($path) ) { 
		    Error("File delete failed", $tstr . $path) ; 
		    exit ; 
		  }			
		}
		else {  // 删除一个目录
		  if ( ! @rmdir($fsDir) ) {
		    Error("Rmdir failed", $tstr . $fsDir) ; 
		  }
		  else {
		    $relDir = dirname($relDir) ;  
		  }
		}
		break ;

	default :
		// 用户点击"CANCEL"或其他没有定义的动作
	}

	// 重定向至目录显示页面
	if ( $POSTACTION != "" ) { 
		$tstr = $PHP_SELF . "?D=" . urlencode($relDir) ;
		header("Location: " . $tstr) ;   
		exit ;
 	}
	
	// 
	// $A=U : 上载文件至$D
	// $A=E : 显示并编辑文件$D/$F 
	// $A=C : 显示文件$D/$F中的代码
	// default : 显示目录$D
	
	switch ($A) {
	case "U" :
		// 上载至$relDir
		if (!Writeable($gblFsRoot . $relDir)) 
			Error("Write access denied",$relDir) ;
		$text  = "Use this page to upload a single " ;
		$text .= "file to <B>$SERVER_NAME</B>." ;
		StartHTML("(Upload Page)", $text) ;
		UploadPage($gblFsRoot, $relDir) ;
		EndHTML() ;
		exit ;
	case "E" :
		// 文件$relDir/$F的详细内容
		DetailPage($gblFsRoot, $relDir, $F) ;
		exit ;
	case "C" :
		// 列出$relDir/$F 的内容
		DisplayCode($gblFsRoot, $relDir, $F) ;
		exit ;
	}

	// 默认情况,显示目录的内容
	Navigate($gblFsRoot,$relDir) ;	
	exit ;

	Error("Whooah!","By cartesian logic, this never happens") ;
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -