大概原理     遍历项目中的所有非排除文件,然后获取 文件修改时间晚于文件上一次修改时间 的文件    然后将这些文件,通过ftp上传到对应的目录    具体代码如下:   因为只是工具,代码很乱,见谅 
 zip($path); //过滤出最新的修改文件$path = str_replace(/data/longtu/,,$path);$config = array(    'hostname' => 'xxx.xxx.xx.xxx', //ftp服务器 地址    'username' => 'xxx',			//ftp用户    'password' => '?xxxxxxxxxxx', //ftp密码    'port' => 21					//端口);$ftp = new ftp();$ftp->connect($config);				//链接服务器//$a=$ftp->filelist();$local_root = realpath(dirname(__dir__)./../../);chdir($local_root);foreach ($files as $k=>$v){    $f = $path.$v;    $tmp = $ftp->upload($f, $f);    if($tmp){    echo upload $f -> success \n;    }}//$ftp->download('ftp_upload.log','ftp_download.log');////$ftp->upload('ftp_err.log','ftp_upload.log');//$ftp->download('ftp_upload.log','ftp_download.log');/* * * *  $dir = /test;  if(@ftp_chdir($conn, $dir))   判断是否为文件夹 * enter description here ... * @author administrator * */class filerfile{  var $time_path;  private $fctimes = array();  function zip($dir)  {    $this->time_path = rtrim($dir,/)./.~~~time.php;    //@unlink($this->time_path);    $filelist = $this -> getfilelist($dir);    file_put_contents($this->time_path,fctimes,true).;);    return $filelist;  }  function appendfilectime($file)  {    $time_file_path = $this->time_path;    $ftime = @include($time_file_path);    $ftime = $ftime ? $ftime : array();    $time = filectime($file);    if(!file_exists($time_file_path))file_put_contents($time_file_path,time_path;    if (!$time_data){      $time_data= @include_once($time_file_path);    }    $time_data = $time_data ? $time_data : array();    //var_dump($file,$time_data[$file] == filectime($file));    //echo $file.\t.$time_data[$file].\n;    if ($time_data[$file] == filemtime($file)){      return false;    }else{      return $file;    }  }  function getfilelist($dir,$path=)  {    static $tmpp = ;    if ($path== && !$tmpp){      $tmpp = $dir;    }    $d = dir($dir);    $files = array();    if ($d)    {      $pathp=str_replace($tmpp,,$dir);      $pathp=str_replace(array(\\\\,/),directory_separator,$pathp);      $pathp=str_replace(directory_separator.directory_separator,directory_separator,$pathp);      while($f = $d->read())      {        if ($f == '.' || $f=='..' || $f{0}=='.' || $f=='zend' || in_array($f, $_get['exclude']))continue;        $newdir = rtrim($dir,/)./.$f;        if (is_dir($newdir)){          $files = array_merge($files,$this->getfilelist($newdir,$newdir));        }else{          $abspath_file = (rtrim($dir,/) ? rtrim($dir,/)./ : ).$f;          $this->fctimes[$abspath_file] = filemtime($abspath_file);          if (!$this->getfilebyfilectime($abspath_file))continue;          $file = (rtrim($pathp,/) ? rtrim($pathp,/)./ : ).$f;          $files[] = $file;        }      }    }    return $files;  }}/** * 仿写codeigniter的ftp类 * ftp基本操作: * 1) 登陆;		   connect * 2) 当前目录文件列表;  filelist * 3) 目录改变;		 chgdir * 4) 重命名/移动;	   rename * 5) 创建文件夹;		mkdir * 6) 删除;			   delete_dir/delete_file * 7) 上传;			   upload * 8) 下载				download * * @author quanshuidingdang */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;  }  /**   * 文件夹是否存在   * @param unknown_type $path   */  public function is_dir_exists($path)  {    return $this->chgdir($path);  }  /**   * 目录改变   *   * @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   string  下载模式 auto || ascii     * @return  boolean   */  public function download($remotepath, $localpath, $mode = 'auto') {    if( ! $this->_isconn()) {      return false;    }    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.]);      }      return false;    }    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 delete_file($file) {    if( ! $this->_isconn()) {      return false;    }    $result = @ftp_delete($this->conn_id, $file);    if($result === false) {      if($this->debug === true) {        $this->_error(ftp_unable_to_delete_file:file[.$file.]);      }      return false;    }    return true;  }  /**   * 删除文件夹   *   * @access  public   * @param   string  目录标识(ftp)   * @return  boolean   */  public function delete_dir($path) {    if( ! $this->_isconn()) {      return false;    }    //对目录宏的'/'字符添加反斜杠'\'    $path = preg_replace(/(.+?)\/*$/, \\1/, $path);    //获取目录文件列表    $filelist = $this->filelist($path);    if($filelist !== false and count($filelist) > 0) {      foreach($filelist as $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.]);      }      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('/tmp/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);  }}/*end of file ftp.php*//*location /apache group/htdocs/ftp.php*/
复制代码
上传文件, ftp, php
   
 
   