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类上传文件视频等的简单实现方法的全部内容了,希望对大家有所帮助,多多支持毛票票~