PHP用FTP类上传文件视频等的简单实现方法
文件1:ftp.php
<?php /** *仿写CodeIgniter的FTP类 *FTP基本操作: *1)登陆;connect *2)当前目录文件列表;filelist *3)目录改变;chgdir *4)重命名/移动;rename *5)创建文件夹;mkdir *6)删除;delete_dir/delete_file *7)上传;upload *8)下载download * *@authorquanshuidingdang */ classFtp{ private$hostname =''; private$username =''; private$password =''; private$port =21; private$passive =TRUE; private$debug =TRUE; private$conn_id =FALSE; /** *构造函数 * *@paramarray配置数组:$config=array('hostname'=>'','username'=>'','password'=>'','port'=>''...); */ publicfunction__construct($config=array()){ if(count($config)>0){ $this->_init($config); } } /** *FTP连接 * *@accesspublic *@paramarray配置数组 *@returnboolean */ publicfunctionconnect($config=array()){ if(count($config)>0){ $this->_init($config); } //判断是否打开了ftp连接 if(FALSE===($this->conn_id=@ftp_connect($this->hostname,$this->port))){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_connect"); } returnFALSE; } //判断是否登录成功 if(!$this->_login()){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_login"); } returnFALSE; } //判断是否开启FTP被动模式 if($this->passive===TRUE){ ftp_pasv($this->conn_id,TRUE); } returnTRUE; } /** *目录改变 * *@accesspublic *@paramstring目录标识(ftp) *@paramboolean *@returnboolean */ publicfunctionchgdir($path='',$supress_debug=FALSE){ if($path==''OR!$this->_isconn()){ returnFALSE; } $result=@ftp_chdir($this->conn_id,$path); if($result===FALSE){ if($this->debug===TRUEAND$supress_debug==FALSE){ $this->_error("ftp_unable_to_chgdir:dir[".$path."]"); } returnFALSE; } returnTRUE; } /** *目录生成 * *@accesspublic *@paramstring目录标识(ftp) *@paramint文件权限列表 *@returnboolean */ publicfunctionmkdir($path='',$permissions=NULL){ if($path==''OR!$this->_isconn()){ returnFALSE; } $result=@ftp_mkdir($this->conn_id,$path); if($result===FALSE){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_mkdir:dir[".$path."]"); } returnFALSE; } if(!is_null($permissions)){ $this->chmod($path,(int)$permissions); } returnTRUE; } /** *上传 * *@accesspublic *@paramstring本地目录标识 *@paramstring远程目录标识(ftp) *@paramstring上传模式auto||ascii *@paramint上传后的文件权限列表 *@returnboolean */ publicfunctionupload($localpath,$remotepath,$mode='auto',$permissions=NULL){ if(!$this->_isconn()){ returnFALSE; } //判断本地文件是否存在 if(!file_exists($localpath)){ if($this->debug===TRUE){ $this->_error("ftp_no_source_file:".$localpath); } returnFALSE; } //判断上传模式 if($mode=='auto'){ //获取文件后缀类型 $ext=$this->_getext($localpath); //根据后缀类型决定上传模式是FTP_ASCII(文本模式)还是FTP_BINARY(二进制模式); $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."]"); } returnFALSE; } //判断是否需要改写文件权限 if(!is_null($permissions)){ $this->chmod($remotepath,(int)$permissions); } returnTRUE; } /** *下载 * *@accesspublic *@paramstring远程目录标识(ftp) *@paramstring本地目录标识 *@paramstring下载模式auto||ascii *@returnboolean */ publicfunctiondownload($remotepath,$localpath,$mode='auto'){ if(!$this->_isconn()){ returnFALSE; } if($mode=='auto'){ $ext=$this->_getext($remotepath); $mode=$this->_settype($ext); } $mode=($mode=='ascii')?FTP_ASCII:FTP_BINARY; $result=@ftp_get($this->conn_id,$localpath,$remotepath,$mode); if($result===FALSE){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_download:localpath[".$localpath."]-remotepath[".$remotepath."]"); } returnFALSE; } returnTRUE; } /** *重命名/移动 * *@accesspublic *@paramstring远程目录标识(ftp) *@paramstring新目录标识 *@paramboolean判断是重命名(FALSE)还是移动(TRUE) *@returnboolean */ publicfunctionrename($oldname,$newname,$move=FALSE){ if(!$this->_isconn()){ returnFALSE; } $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); } returnFALSE; } returnTRUE; } /** *删除文件 * *@accesspublic *@paramstring文件标识(ftp) *@returnboolean */ publicfunctiondelete_file($file){ if(!$this->_isconn()){ returnFALSE; } $result=@ftp_delete($this->conn_id,$file); if($result===FALSE){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_delete_file:file[".$file."]"); } returnFALSE; } returnTRUE; } /** *删除文件夹 * *@accesspublic *@paramstring目录标识(ftp) *@returnboolean */ publicfunctiondelete_dir($path){ if(!$this->_isconn()){ returnFALSE; } //对目录宏的'/'字符添加反斜杠'\' $path=preg_replace("/(.+?)\/*$/","\\1/",$path); //获取目录文件列表 $filelist=$this->filelist($path); if($filelist!==FALSEANDcount($filelist)>0){ foreach($filelistas$item){ //如果我们无法删除,那么就可能是一个文件夹 //所以我们递归调用delete_dir() if(!@delete_file($item)){ $this->delete_dir($item); } } } //删除文件夹(空文件夹) $result=@ftp_rmdir($this->conn_id,$path); if($result===FALSE){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_delete_dir:dir[".$path."]"); } returnFALSE; } returnTRUE; } /** *修改文件权限 * *@accesspublic *@paramstring目录标识(ftp) *@returnboolean */ publicfunctionchmod($path,$perm){ if(!$this->_isconn()){ returnFALSE; } //只有在PHP5中才定义了修改权限的函数(ftp) if(!function_exists('ftp_chmod')){ if($this->debug===TRUE){ $this->_error("ftp_unable_to_chmod(function)"); } returnFALSE; } $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."]"); } returnFALSE; } returnTRUE; } /** *获取目录文件列表 * *@accesspublic *@paramstring目录标识(ftp) *@returnarray */ publicfunctionfilelist($path='.'){ if(!$this->_isconn()){ returnFALSE; } returnftp_nlist($this->conn_id,$path); } /** *关闭FTP * *@accesspublic *@returnboolean */ publicfunctionclose(){ if(!$this->_isconn()){ returnFALSE; } return@ftp_close($this->conn_id); } /** *FTP成员变量初始化 * *@accessprivate *@paramarray配置数组 *@returnvoid */ privatefunction_init($config=array()){ foreach($configas$key=>$val){ if(isset($this->$key)){ $this->$key=$val; } } //特殊字符过滤 $this->hostname=preg_replace('|.+?://|','',$this->hostname); } /** *FTP登陆 * *@accessprivate *@returnboolean */ privatefunction_login(){ return@ftp_login($this->conn_id,$this->username,$this->password); } /** *判断con_id * *@accessprivate *@returnboolean */ privatefunction_isconn(){ if(!is_resource($this->conn_id)){ if($this->debug===TRUE){ $this->_error("ftp_no_connection"); } returnFALSE; } returnTRUE; } /** *从文件名中获取后缀扩展 * *@accessprivate *@paramstring目录标识 *@returnstring */ privatefunction_getext($filename){ if(FALSE===strpos($filename,'.')){ return'txt'; } $extarr=explode('.',$filename); returnend($extarr); } /** *从后缀扩展定义FTP传输模式ascii或binary * *@accessprivate *@paramstring后缀扩展 *@returnstring */ privatefunction_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'; } /** *错误日志记录 * *@accessprvate *@returnboolean */ privatefunction_error($msg){ return@file_put_contents('ftp_err.log',"date[".date("Y-m-dH:i:s")."]-hostname[".$this->hostname."]-username[".$this->username."]-password[".$this->password."]-msg[".$msg."]\n",FILE_APPEND); } } /*Endoffileftp.php*/ /*Location/ApacheGroup/htdocs/ftp.php*/
文件2:ftp_demo.php
<?php require_once('ftp.php'); $config=array( 'hostname'=>'101.64.183.92',//服务器地址 'username'=>'ftpadminuser',//FTP登录账号 'password'=>'admin_user',//FTP登录密码 'port'=>2112//端口号 ); $ftp=newFtp(); //连接 $ftp->connect($config); //上传第一个参数是本地文件名,第二个参数是FTP文件名 $rs=$ftp->upload('jsyh.flv','jsyh.flv'); if($rs){ echo1; } //$ftp->download('ftp_upload.log','ftp_download.log');
以上就是小编为大家带来的PHP用FTP类上传文件视频等的简单实现方法的全部内容了,希望对大家有所帮助,多多支持毛票票~