<?php
require_once("../../lib/cs_conn.php");
require_once("../../lib/cs_common.php");
@set_time_limit(0);
if(!isset($_COOKIE["cs_name"]) && !isset($_COOKIE['CS_AdminUP'])){
	exit('非法操作！');
}
$ac=CS_Request('ac');
?>
<html>
<head>
<title>文件上传</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<style type="text/css">
<!--
td{font-size:12px}
a{color:#000000;text-decoration: none}
a:hover{text-decoration: underline}
.tx{height:16px;width:30px;border-color:black black #000000;border-top-width:0px;border-right-width: 0px; border-bottom-width: 1px; border-left-width: 0px; font-size: 12px; background-color: #eeeeee; color: #0000FF}
.button{font-size:12px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width: 0px; height: 16px; width: 80px; background-color: #FF9966; cursor: hand}
.tx1{height:20px;width:30px;font-size:12px;border:1px solid;border-color:black black #000000;color: #0000FF}
-->
</style>
<script language="javascript">
<!--
function mysub()
{
		esave.style.visibility="visible";
}
-->
</script>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<form enctype="multipart/form-data" method="post" action="?ac=go">
  <div id="esave" style="position:absolute; top:18px; left:40px; z-index:10; visibility:hidden"> 
    <TABLE WIDTH=340 BORDER=0 CELLSPACING=0 CELLPADDING=0>
      <TR><td width=20%></td>
	<TD bgcolor=#104A7B width="60%"> 
	<TABLE WIDTH=100% height=120 BORDER=0 CELLSPACING=1 CELLPADDING=0>
	<TR> 
	          <td bgcolor=#eeeeee align=center><font color=red>正在上传文件，请稍候...</font></td>
	</tr>
	</table>
	</td><td width=20%></td>
	</tr></table></div>
  <table width="400" border="1" cellspacing="0" cellpadding="3" align="center" bordercolordark="#779FDC" bordercolorlight="#779FDC">
    <tr bgcolor="#FFCC00"> 
      <td height="22" align="left" valign="middle" bgcolor="#D6DFF7" width="400">&nbsp;文件上传 </td>
    </tr><input type="hidden" name="MAX_FILE_SIZE" value="500000000" />
    <tr align="center" valign="middle"> 
      <td align="left" id="upid" height="80" width="400"> 选择文件:<input type="file" name="file" />
      </br></br><font color="#FF0000">*注意：目前只支持 mp3|wma|rm|mp4 类型大小为10M以下的文件</font>
      </td>
    </tr>
    <tr align="center" valign="middle" bgcolor="#BBBBBB"> 
      <td bgcolor="#D6DFF7" height="24" width="400"> 
        <input type="submit" name="submit" value="· 开始上传 ·" class="button" onClick="javascript:mysub()">      </td>
    </tr>
  </table>
</form>
<?php
if ($ac==go) {
$fname=$_FILES['file']['name'];
if($fname=="")  die("<script language=javascript>alert('请选择要上传的文件!');history.back();</script>");
$sys=pathinfo($fname);//获取文件名后缀
$Panfname=$sys['extension'];
//判断是否是音乐文件
if($Panfname!="mp3" && $Panfname!="wma" && $Panfname!="rm" && $Panfname!="mp4" && $Panfname!="flv"){exit("<script language=javascript>alert('对不起,请上传正确的音乐文件！');history.back();</script>");}
$tmpName = basename($_FILES['file']['tmp_name']);
if($_FILES['file']['size']< 507819){
       if(file_exists($tmpName)){
          @unlink($tmpName);
       }
 exit("<script language=javascript>alert('对不起,请上传正确的音乐文件！');history.back();</script>");
}
@move_uploaded_file($_FILES['file']['tmp_name'], "../../annex/music/".$tmpName)  or die("<script language=javascript>alert('无法上传文件的工作目录,请常识修改php.ini默认上传大小!');history.back();</script>");
$config = array(
			'hostname' => CS_FtpIp,
			'username' => CS_FtpName,
			'password' => CS_FtpPwd,
			'port' => CS_FtpDk
				);
    $ftp = new Ftp();
    $ftp->connect($config)  or die("<script language=javascript>alert('抱歉，FTP无法连接，请检查FTP配置是否正确!');history.back();</script>");
    $ftp->mkdir(date('Ymd'));
    if($ftp->upload("../../annex/music/".$tmpName,CS_FtpDir."/".date('Ymd')."/".$fname)){
       if(file_exists('../../annex/music/'.$tmpName)){
          @unlink('../../annex/music/'.$tmpName);
       }
       $Url=str_replace("./","",CS_FtpDir."/".date('Ymd')."/".$fname);
       $Name=substr($fname,0,-4);
?>
<script>
opener.document.getElementById('CS_Name').value= "<?php echo $Name; ?>";
opener.document.getElementById('CS_PlayUrl').value= "<?php echo $Url; ?>";
opener.document.getElementById('CS_DownUrl1').value= "<?php echo $Url; ?>";
opener.document.getElementById('Msg').innerHTML = '<font color=#0000ff><b>恭喜您，上传成功,请完成下面信息发布!</b></font>';
this.parent.$('.webox').css({display:'none'});
this.parent.$('.background').css({display:'none'});
<script>
<?php
    }else{
       if(file_exists('../../annex/music/'.$tmpName)){
          @unlink('../../annex/music/'.$tmpName);
       }
       die("<script language=javascript>alert('抱歉，上传失败，请联系管理员!');window.close()</script>");
    }
}

class Ftp {

	private $hostname	= '';
	private $username	= '';
	private $password	= '';
	private $port 		= 21;
	private $passive 	= TRUE;
	private $debug		= TRUE;
	private $conn_id 	= FALSE;
	
	/**
	 * 构造函数
	 *
	 * @param	array	配置数组 : $config = array('hostname'=>'','username'=>'','password'=>'','port'=>''...);
	 */
	public function __construct($config = array()) {
		if(count($config) > 0) {
			$this->_init($config);
		}
	}
	
	/**
	 * FTP连接
	 *
	 * @access 	public
	 * @param 	array 	配置数组
	 * @return	boolean
	 */
	public function connect($config = array()) {
		if(count($config) > 0) {
			$this->_init($config);
		}
		
		if(FALSE === ($this->conn_id = @ftp_connect($this->hostname,$this->port))) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_connect");
			}
			return FALSE;
		}
		
		if( ! $this->_login()) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_login");
			}
			return FALSE;
		}
		
		if($this->passive === TRUE) {
			ftp_pasv($this->conn_id, TRUE);
		}
		
		return TRUE;
	}

	
	/**
	 * 目录改变
	 *
	 * @access 	public
	 * @param 	string 	目录标识(ftp)
	 * @param	boolean	
	 * @return	boolean
	 */
	public function chgdir($path = '', $supress_debug = FALSE) {
		if($path == '' OR ! $this->_isconn()) {
			return FALSE;
		}
		
		$result = @ftp_chdir($this->conn_id, $path);
		
		if($result === FALSE) {
			if($this->debug === TRUE AND $supress_debug == FALSE) {
				$this->_error("ftp_unable_to_chgdir:dir[".$path."]");
			}
			return FALSE;
		}
		
		return TRUE;
	}
	
	/**
	 * 目录生成
	 *
	 * @access 	public
	 * @param 	string 	目录标识(ftp)
	 * @param	int  	文件权限列表	
	 * @return	boolean
	 */
	public function mkdir($path = '', $permissions = NULL) {
		if($path == '' OR ! $this->_isconn()) {
			return FALSE;
		}
		
		$result = @ftp_mkdir($this->conn_id, $path);
		
		if($result === FALSE) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_mkdir:dir[".$path."]");
			}
			return FALSE;
		}
		
		if( ! is_null($permissions)) {
			$this->chmod($path,(int)$permissions);
		}
		
		return TRUE;
	}
	
	/**
	 * 上传
	 *
	 * @access 	public
	 * @param 	string 	本地目录标识
	 * @param	string	远程目录标识(ftp)
	 * @param	string	上传模式 auto || ascii
	 * @param	int		上传后的文件权限列表	
	 * @return	boolean
	 */
	public function upload($localpath, $remotepath, $mode = 'auto', $permissions = NULL) {
		if( ! $this->_isconn()) {
			return FALSE;
		}
		
		if( ! file_exists($localpath)) {
			if($this->debug === TRUE) {
				$this->_error("ftp_no_source_file:".$localpath);
			}
			return FALSE;
		}
		
		if($mode == 'auto') {
			$ext = $this->_getext($localpath);
			$mode = $this->_settype($ext);
		}
		
		$mode = ($mode == 'ascii') ? FTP_ASCII : FTP_BINARY;
		
		$result = @ftp_put($this->conn_id, $remotepath, $localpath, $mode);
		
		if($result === FALSE) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_upload:localpath[".$localpath."]/remotepath[".$remotepath."]");
			}
			return FALSE;
		}
		
		if( ! is_null($permissions)) {
			$this->chmod($remotepath,(int)$permissions);
		}
		
		return TRUE;
	}
	/**
	 * 重命名/移动
	 *
	 * @access 	public
	 * @param 	string 	远程目录标识(ftp)
	 * @param	string	新目录标识
	 * @param	boolean	判断是重命名(FALSE)还是移动(TRUE)	
	 * @return	boolean
	 */
	public function rename($oldname, $newname, $move = FALSE) {
		if( ! $this->_isconn()) {
			return FALSE;
		}
		
		$result = @ftp_rename($this->conn_id, $oldname, $newname);
		
		if($result === FALSE) {
			if($this->debug === TRUE) {
				$msg = ($move == FALSE) ? "ftp_unable_to_rename" : "ftp_unable_to_move";
				$this->_error($msg);
			}
			return FALSE;
		}
		
		return TRUE;
	}
	
	/**
	 * 修改文件权限
	 *
	 * @access 	public
	 * @param 	string 	目录标识(ftp)
	 * @return	boolean
	 */
	public function chmod($path, $perm) {
		if( ! $this->_isconn()) {
			return FALSE;
		}
		
		//只有在PHP5中才定义了修改权限的函数(ftp)
		if( ! function_exists('ftp_chmod')) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_chmod(function)");
			}
			return FALSE;
		}
		
		$result = @ftp_chmod($this->conn_id, $perm, $path);
		
		if($result === FALSE) {
			if($this->debug === TRUE) {
				$this->_error("ftp_unable_to_chmod:path[".$path."]-chmod[".$perm."]");
			}
			return FALSE;
		}
		return TRUE;
	}
	
	/**
	 * 获取目录文件列表
	 *
	 * @access 	public
	 * @param 	string 	目录标识(ftp)
	 * @return	array
	 */
	public function filelist($path = '.') {
		if( ! $this->_isconn()) {
			return FALSE;
		}
		
		return ftp_nlist($this->conn_id, $path);
	}
	
	/**
	 * 关闭FTP
	 *
	 * @access 	public
	 * @return	boolean
	 */
	public function close() {
		if( ! $this->_isconn()) {
			return FALSE;
		}
		
		return @ftp_close($this->conn_id);
	}
	
	/**
	 * FTP成员变量初始化
	 *
	 * @access	private
	 * @param	array	配置数组	 
	 * @return	void
	 */
	private function _init($config = array()) {
		foreach($config as $key => $val) {
			if(isset($this->$key)) {
				$this->$key = $val;
			}
		}

		//特殊字符过滤
		$this->hostname = preg_replace('|.+?://|','',$this->hostname);
	}
	
	/**
	 * FTP登陆
	 *
	 * @access 	private
	 * @return	boolean
	 */
	private function _login() {
		return @ftp_login($this->conn_id, $this->username, $this->password);
	}
	
	/**
	 * 判断con_id
	 *
	 * @access 	private
	 * @return	boolean
	 */
	private function _isconn() {
		if( ! is_resource($this->conn_id)) {
			if($this->debug === TRUE) {
				$this->_error("ftp_no_connection");
			}
			return FALSE;
		}
		return TRUE;
	}
	
	/**
	 * 从文件名中获取后缀扩展
	 *
	 * @access 	private
	 * @param 	string 	目录标识
	 * @return	string
	 */
	private function _getext($filename) {
		if(FALSE === strpos($filename, '.')) {
			return 'txt';
		}
		
		$extarr = explode('.', $filename);
		return end($extarr);
	}

	/**
	 * 从后缀扩展定义FTP传输模式  ascii 或 binary
	 *
	 * @access 	private
	 * @param 	string 	后缀扩展
	 * @return	string
	 */
	private function _settype($ext) {
		$text_type = array (
							'txt',
							'text',
							'php',
							'phps',
							'php4',
							'js',
							'css',
							'htm',
							'html',
							'phtml',
							'shtml',
							'log',
							'xml'
							);
		
		return (in_array($ext, $text_type)) ? 'ascii' : 'binary';
	}

	/**
	 * 错误日志记录
	 *
	 * @access 	prvate
	 * @return	boolean
	 */
	private function _error($msg) {
		//return @file_put_contents('ftp_err.log', "date[".date("Y-m-d H:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n", FILE_APPEND);
	}
}
?>
