angular编写仿Explorer资源管理器 – php的api接口

5.15 写的 angular编写仿Explorer资源管理器,只完成了界面部分。没有固定后台的程序语言,只要返回正确的格式,使用任何语言都可以对接。
现在写了一个php版本的接口。使用方法非常简单,只需要将 本脚本(详细代码件下方)通过FTP或任何一种方式传到您的 WEB 目录下。访问:http://www.miaoqiyuan.cn/products/web-explorer/,按提示输入API地址和API密码即可使用(您可以直接在API地址中输入:http://www.miaoqiyuan.cn/products/web-explorer/demo.asp,点击连接即可测试,这个是ASP版本的,使用方法都一样)。

有网友反应我的程序注释很乱。这里提示一下:注释如果存在不对齐,是因为你没有使用等宽字体,建议百度一下。

废话很多了,直接上代码(代码下载地址:http://www.miaoqiyuan.cn/products/web-explorer/php.api.rar):

<?php
	
	#===========================================================================
	#=                 Copyright (c) 2016 猫七(QQ:77068320)                    =
	#=                      All rights reserverd.                              =
	#===========================================================================
	#=           Web-Explorer 服务器端API接口(PHP版本)                         =
	#=  程序地址:http://www.miaoqiyuan.cn/products/web-explorer/php.api.rar   =
	#=  前端程序:http://www.miaoqiyuan.cn/products/web-explorer/              =
	#=  使用说明:http://www.miaoqiyuan.cn/p/web-explorer-php-api              =
	#=  邮箱地址:mqycn@126.com   QQ:77068320 1301425789                      =
	#===========================================================================
	
	$password = "miaoqiyuan.cn";	#密码,如果不设置请留空
	
	#请求的路径
	function GetCurrentPath(){
		$currentPath = $_GET["path"];
		if($currentPath == ""){
			$currentPath = "/";
		}
		$currentPath = str_replace("..", "", $currentPath);
		$currentPath = str_replace("//", "/", $currentPath);
		if( substr($currentPath, 0, 1) != "/" ){
			$currentPath = '/' . $currentPath;
		}
		return InFileName($currentPath);
	}
	
	#获取绝对路径
	function ServerPath($path = '.'){
		return str_replace('\\', '/', $_SERVER['DOCUMENT_ROOT']) . $path;
	}
	
	#获取相对路径
	function RelactivePath($path = '.'){
		return str_replace(ServerPath("/"), "/", $path);
	}
	
	#是否运行在Windows系统
	function RunInWindowServer(){
		return strpos(strtolower($_SERVER['SERVER_SOFTWARE']), "iis");
	}
	
	#大坑,Windows文件名是GBK编码保存,Linux是UTF-8
	#输入文件名,输入的是UTF-8,如果是Windows转成GBK
	function InFileName($filename){
		if( RunInWindowServer() ){
			return mb_convert_encoding($filename, "GBK", "UTF-8");
		}else{
			return $filename;
		}
	}
	
	#输出文件名,Windows下文件名时GBK,如果是Windows转成UTF-8
	function OutFileName($filename){
		if( substr($filename, strlen($filename) - 1, 1) == '/'){
			$filename = substr($filename, 0, strlen($filename) - 1);
		}
		if( RunInWindowServer() ){
			return mb_convert_encoding($filename, "UTF-8", "GBK");
		}else{
			return $filename;
		}
	}
	
	#批量转换文件名为UTF-8
	function OutFileNameArray( $arr ){
		foreach( $arr as $index => $value){
			$arr[$index]['name'] = OutFileName($value['name']);
		}
		return $arr;
	}
	
	#获取当前路径的父路径
	function GetParentPath($path){
		$find = strripos($path , "/");
		if( $find === false){
			return "/";
		}else{
			return substr($path, 0, $find);
		}
	}
	
	#(核心) 打开目录
	function OpenFolder($path = '.'){
		$arr = Array(
			'path' => OutFileName(RelactivePath($path)),	#当前路径
			'folder' => Array(),							#目录列表
			'file' => Array()								#文件列表
		);
		$files = scandir($path);
		foreach( $files as $filename ){
			if( $filename != '.' && $filename != '..'){
				$realname = $path . '/' . $filename;
				if( is_dir($realname) ){
					$arr['folder'][] = Array(				#添加新目录
						"name" => $filename
					);
				}else{
					$arr['file'][] = Array(					#添加新文件
						"name" => $filename,				#文件名
						"size" => filesize($realname)		#文件大小
					);
				}
			}
		}
		return $arr;
	}
	
	#回调函数
	function Callback($arr = Array()){
		$template = "#CALLBACK#(#RESULT#)";
		$template = str_replace("#CALLBACK#", isset($_GET['callback'])?$_GET['callback']:'callback', $template);
		$template = str_replace( "#RESULT#", json_encode($arr), $template);
		die( $template );
	}
	
	#(递归)获取某个目录下所有文件大小
	function GetFolderSize($path = '.'){
		$openFolder = OpenFolder($path);
		$size = 0;
		foreach( $openFolder['file'] as $file ){
			$size += $file['size'];
		};
		foreach( $openFolder['folder'] as $folder ){
			$size += GetFolderSize($path . "/" . $folder['name']);
		};
		return $size;
	}
	
	#(API返回)返回某个目录文件大小
	function CalcFolderSize($path = '.'){
		$arr = Array(
			'parent' => OutFileName(GetParentPath(RelactivePath($path))),
			'path' => OutFileName(RelactivePath($path)),
			'index' => (int)(isset($_GET['index'])?$_GET['index']:0),
			'size' => (int)(GetFolderSize($path)) + 1
		);
		return $arr;
	}
	
	#(API返回)返回某个目录的所有文件和文件夹
	function GetFolder($path = '.'){
		$arr = OpenFolder($path);
		$arr['folder'] = OutFileNameArray($arr['folder']);
		$arr['file'] = OutFileNameArray($arr['file']);
		return $arr;
	}
	
	#入口
	#如果设置密码,则验证密码
	if( $password != '' && $password != (isset($_GET['pwd'])?$_GET['pwd']:'')){
		$arr = Array(
			"err" => "密码错误"
		);
	}else{
		
		#输入的目录
		$path = ServerPath(GetCurrentPath());
		if( !is_dir($path)){
			$path = ServerPath("/");
		}
		
		#根据不同的action调用对应的函数
		switch( $_GET['action'] ){
			case "getsize":
				$arr = CalcFolderSize($path);
				break;
			default:
				$arr = GetFolder($path);
				break;
		}
	}
	
	#处理后的数组 到 Callback处理
	#print_r($arr);
	Callback($arr);
	
?>

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.