| | <?php |
| | namespace app\common\util; |
| | |
| | |
| | |
| | |
| | |
| | |
| | class Ftp{ |
| | protected $_config = array( 'ftp_host'=>'www.test.com', 'ftp_port'=>'21', 'ftp_user'=>'maccms', 'ftp_pwd' =>'maccms', 'ftp_timeout'=>'30', 'ftp_dir' =>'/', 'ftp_pasv'=>1 ); |
| | protected $_conn = null; |
| | protected $_rs = null; |
| | public function __construct($config=array()){ |
| | !function_exists('ftp_connect') && die('FTP模块不支持!'); |
| | $this->config($config); |
| | } |
| | public function config($config=array()){ |
| | $this->_config = array_merge($this->_config, $config); |
| | } |
| | function connect(){ |
| | $this->_conn = @ftp_connect($this->_config['ftp_host'],$this->_config['ftp_port'],$this->_config['ftp_timeout']); |
| | if(!$this->_conn){ |
| | return -1; |
| | } |
| | $this->_rs = @ftp_login($this->_conn, $this->_config['ftp_user'], $this->_config['ftp_pwd']); |
| | if(!$this->_rs){ |
| | return -2; |
| | } |
| | $this->_config['ftp_pasv'] && $this->pasv(true); |
| | if(!$this->chdir($this->_config['ftp_dir'])){ |
| | return -3; |
| | } |
| | return $this; |
| | } |
| | function chdir($dir){ |
| | return @ftp_chdir($this->_conn,$dir); |
| | } |
| | function is_file($file){ |
| | $buff = @ftp_mdtm($this->_conn, $file); |
| | if($buff != -1){ |
| | return true; |
| | }else{ |
| | return false; |
| | } |
| | } |
| | function pasv($mode=true){ |
| | return @ftp_pasv($this->_conn, true); |
| | } |
| | function put($local_file, $remote_file, $mode='B'){ |
| | if($mode == 'B'){ |
| | $mode = FTP_BINARY; |
| | }else{ |
| | $mode = FTP_ASCII; |
| | } |
| | $this->mkdirs(dirname($remote_file)); |
| | $rs = @ftp_put($this->_conn, $remote_file, $local_file, $mode); |
| | return $rs; |
| | } |
| | function mkdirs($dir){ |
| | $dir = str_replace("\\",'/',$dir); |
| | $dirs = explode('/', $dir); |
| | $total = count($dirs); |
| | foreach($dirs as $val){ |
| | if($val == '.'){ |
| | continue; |
| | } |
| | if($this->chdir($val) == false){ |
| | if(!$this->mkdir($val)){ |
| | return false; |
| | } |
| | $this->chdir($val); |
| | } |
| | } |
| | $this->chdir($this->_config['ftp_dir']); |
| | return true; |
| | } |
| | function mkdir($dir){ |
| | return @ftp_mkdir($this->_conn, $dir); |
| | } |
| | function unlink($file){ |
| | return @ftp_delete($this->_conn, $file); |
| | } |
| | function rename($old_name, $new_name){ |
| | return @ftp_rename($this->_conn, $old_name, $new_name); |
| | } |
| | function rmdir($dir){ |
| | return @ftp_rmdir($this->_conn, $dir); |
| | } |
| | function rmdirs($dir, $flag=1){ |
| | $res = $this->rmdir($dir) || $this->unlink($dir); |
| | if(!$res){ |
| | $files = $this->nlist($dir); |
| | if(empty($files)){ |
| | return true; |
| | } |
| | foreach($files as $file){ |
| | $file = basename($file); |
| | $this->rmdirs($dir.'/'.$file); |
| | } |
| | if($flag){ |
| | $this->rmdirs($dir); |
| | } |
| | } |
| | return true; |
| | } |
| | function nlist($dir){ |
| | return @ftp_nlist($this->_conn, $dir); |
| | } |
| | function bye() { |
| | return ftp_close($this->_conn); |
| | } |
| | } |
| | ?> |