亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP ftp類實現遠程附件上傳例子

2024-09-04 11:45:09
字體:
來源:轉載
供稿:網友

多服務器數據同步并且實時數據處理功能想了很多沒找到合適的工具了,今天想了可以使用ftp+rsync工具來實現,下文重點介紹的是php ftp上傳類的實現了.

現在很多地方需要用ftp類操作另外的網站服務器,上傳圖片之類的,現在貼一個php ftp類給大家.

  1. class Ftp { 
  2.          
  3.     //FTP 連接資源 
  4.     private $link
  5.     //FTP連接時間 
  6.     public $link_time
  7.     //錯誤代碼 
  8.     private $err_code = 0; 
  9.     //傳送模式{文本模式:FTP_ASCII, 二進制模式:FTP_BINARY} 
  10.     public $mode = FTP_BINARY; 
  11.          
  12.     /** 
  13.      * 連接FTP服務器 
  14.      * @param string $host       服務器地址 
  15.      * @param string $username   用戶名 
  16.      * @param string $password   密碼 
  17.      * @param integer $port       服務器端口,默認值為21 
  18.      * @param boolean $pasv        是否開啟被動模式 
  19.      * @param boolean $ssl      是否使用SSL連接 
  20.      * @param integer $timeout     超時時間  
  21.      */ 
  22.     public function connect($host$username = ''$password = ''$port = '21'$pasv = false, $ssl = false, $timeout = 30) { 
  23.         $start = time(); 
  24.         if ($ssl) { 
  25.             if (!$this->link = @ftp_ssl_connect($host$port$timeout))     { 
  26.                 $this->err_code = 1; 
  27.                 return false; 
  28.             } 
  29.         } else { 
  30.             if (!$this->link = @ftp_connect($host$port$timeout)) { 
  31.                 $this->err_code = 1; 
  32.                 return false; 
  33.             } 
  34.         } 
  35.          
  36.         if (@ftp_login($this->link, $username$password)) { 
  37.             if ($pasv
  38.                 ftp_pasv($this->link, true); 
  39.             $this->link_time = time() - $start
  40.             return true; 
  41.         } else { 
  42.             $this->err_code = 1; 
  43.             return false; 
  44.         } 
  45.         register_shutdown_function(array(&$this'close')); 
  46.     } 
  47.          
  48.     /** 
  49.      * 創建文件夾 
  50.      * @param string $dirname 目錄名, 
  51.      */ 
  52.     public function mkdir($dirname) { 
  53.         if (!$this->link) { 
  54.             $this->err_code = 2; 
  55.             return false; 
  56.         } 
  57.         $dirname = $this->ck_dirname($dirname); 
  58.         $nowdir = '/'
  59.         foreach ($dirname as $v) { 
  60.             if ($v && !$this->chdir($nowdir . $v)) { 
  61.                 if ($nowdir
  62.                     $this->chdir($nowdir); 
  63.                 @ftp_mkdir($this->link, $v); 
  64.             } 
  65.             if ($v
  66.                 $nowdir .= $v . '/'
  67.         } 
  68.         return true; 
  69.     } 
  70.          
  71.     /** 
  72.      * 上傳文件 
  73.      * @param string $remote 遠程存放地址 
  74.      * @param string $local 本地存放地址 
  75.      */ 
  76.     public function put($remote$local) { 
  77.         if (!$this->link) { 
  78.             $this->err_code = 2; 
  79.             return false; 
  80.         } 
  81.         $dirname = pathinfo($remote, PATHINFO_DIRNAME); 
  82.         if (!$this->chdir($dirname)) { 
  83.             $this->mkdir($dirname); 
  84.         } 
  85.         if (@ftp_put($this->link, $remote$local$this->mode)) { 
  86.             return true; 
  87.         } else { 
  88.             $this->err_code = 7; 
  89.             return false; 
  90.         } 
  91.     } 
  92.          
  93.     /** 
  94.      * 刪除文件夾 
  95.      * @param string $dirname  目錄地址 
  96.      * @param boolean $enforce 強制刪除 
  97.      */ 
  98.     public function rmdir($dirname$enforce = false) { 
  99.         if (!$this->link) { 
  100.             $this->err_code = 2; 
  101.             return false; 
  102.         } 
  103.         $list = $this->nlist($dirname); 
  104.         if ($list && $enforce) { 
  105.             $this->chdir($dirname); 
  106.             foreach ($list as $v) { 
  107.                 $this->f_delete($v); 
  108.             } 
  109.         } elseif ($list && !$enforce) { 
  110.             $this->err_code = 3; 
  111.             return false; 
  112.         } 
  113.         @ftp_rmdir($this->link, $dirname); 
  114.         return true; 
  115.     } 
  116.          
  117.     /** 
  118.      * 刪除指定文件 
  119.      * @param string $filename 文件名 
  120.      */ 
  121.     public function f_delete($filename) { 
  122.         if (!$this->link) { 
  123.             $this->err_code = 2; 
  124.             return false; 
  125.         } 
  126.         if (@ftp_delete($this->link, $filename)) { 
  127.             return true; 
  128.         } else { 
  129.             $this->err_code = 4; 
  130.             return false; 
  131.         } 
  132.     } 
  133.          
  134.     /** 
  135.      * 返回給定目錄的文件列表 
  136.      * @param string $dirname  目錄地址 
  137.      * @return array 文件列表數據 
  138.      */ 
  139.     public function nlist($dirname) { 
  140.         if (!$this->link) { 
  141.             $this->err_code = 2; 
  142.             return false; 
  143.         } //開源軟件:Vevb.com 
  144.         if ($list = @ftp_nlist($this->link, $dirname)) { 
  145.             return $list
  146.         } else { 
  147.             $this->err_code = 5; 
  148.             return false; 
  149.         } 
  150.     } 
  151.          
  152.     /** 
  153.      * 在 FTP 服務器上改變當前目錄 
  154.      * @param string $dirname 修改服務器上當前目錄 
  155.      */ 
  156.     public function chdir($dirname) { 
  157.         if (!$this->link) { 
  158.             $this->err_code = 2; 
  159.             return false; 
  160.         } 
  161.         if (@ftp_chdir($this->link, $dirname)) { 
  162.             return true; 
  163.         } else { 
  164.             $this->err_code = 6; 
  165.             return false; 
  166.         } 
  167.     } 
  168.          
  169.     /** 
  170.      * 獲取錯誤信息 
  171.      */ 
  172.     public function get_error() { 
  173.         if (!$this->err_code) 
  174.             return false; 
  175.         $err_msg = array
  176.             '1' => 'Server can not connect'
  177.             '2' => 'Not connect to server'
  178.             '3' => 'Can not delete non-empty folder'
  179.             '4' => 'Can not delete file'
  180.             '5' => 'Can not get file list'
  181.             '6' => 'Can not change the current directory on the server'
  182.             '7' => 'Can not upload files' 
  183.         ); 
  184.         return $err_msg[$this->err_code]; 
  185.     } 
  186.          
  187.     /** 
  188.      * 檢測目錄名 
  189.      * @param string $url 目錄 
  190.      * @return 由 / 分開的返回數組 
  191.      */ 
  192.     private function ck_dirname($url) { 
  193.         $url = str_replace('''/'$url); 
  194.         $urls = explode('/'$url); 
  195.         return $urls
  196.     } 
  197.          
  198.     /** 
  199.      * 關閉FTP連接 
  200.      */ 
  201.     public function close() { 
  202.         return @ftp_close($this->link); 
  203.     } 
  204.          

先來說說遠程附件上傳的大致流程:

用戶選擇文件上傳提交到服務器->服務器接收到文件->服務器一些安全檢測完成通過FTP功能上傳到相應FTP服務器.

我說的只是一個大概過程,不是很標準,明白個意思即可啦!~

這個類大致使用方法:首先通過$ftps->connect($host,$username,$password,$post,$pasv,$ssl,$timeout);進行FTP服務器連接.

通過具體的函數進行FTP的操作,$ftps->mkdir() 創建目錄,可以創建多級目錄以“/abc/def/higk”的形式進行多級目錄的創建.

$ftps->put()上傳文件

$ftps->rmdir()刪除目錄

$ftps->f_delete()刪除文件

$ftps->nlist()列出指定目錄的文件

$ftps->chdir()變更當前文件夾

$ftps->get_error()獲取錯誤信息

rsync工具同步

這里只介紹原理了rsync同步在windows中只能使用windows計劃任務來實現了,我們可以定義為1小時同步一次,這樣可以保證同步失敗文件再次同步一下,當然在ftp上傳類時可以做一個錯誤日志記錄,上傳失敗之后記錄在一個日志文件,然后我們可以手工點擊再實現一次上傳了,這樣臺保證萬無一失了.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美风情在线观看| 日本精品免费观看| 亚洲色图校园春色| 亚洲少妇激情视频| 国产亚洲欧美一区| 欧美专区在线观看| 亚洲第一区中文字幕| 成人网页在线免费观看| 欧美午夜激情视频| 久久亚洲精品毛片| 久久青草精品视频免费观看| 欧美成年人网站| 亚洲片在线资源| 欧美日韩免费一区| 久久久99久久精品女同性| 97超级碰碰碰| 91精品国产综合久久香蕉最新版| 久久国产加勒比精品无码| 92看片淫黄大片欧美看国产片| 国产v综合ⅴ日韩v欧美大片| 久久精品国产欧美亚洲人人爽| 91精品久久久久久久久久久| 国产成人亚洲综合| 亚洲xxxx做受欧美| 中文字幕日韩视频| 亚洲精品免费一区二区三区| 狠狠躁夜夜躁人人爽天天天天97| 91精品国产高清久久久久久91| www.欧美三级电影.com| 亚洲午夜久久久影院| 成人h片在线播放免费网站| 精品美女国产在线| 97香蕉超级碰碰久久免费的优势| 亚洲www在线| 日韩av理论片| 欧美视频在线观看 亚洲欧| 日韩欧美国产成人| 九九久久久久99精品| 国产精品美女主播在线观看纯欲| 亚洲福利精品在线| 日韩国产激情在线| 亚洲福利在线看| 国语自产精品视频在线看| 欧美国产欧美亚洲国产日韩mv天天看完整| 午夜精品www| 国内精品中文字幕| 蜜月aⅴ免费一区二区三区| 欧美高清videos高潮hd| 18一19gay欧美视频网站| 亚洲国产精品成人va在线观看| 欧美精品在线观看| 在线亚洲午夜片av大片| 欧美中文在线观看| 在线观看日韩av| 国产成人精品视频在线观看| 久久99久久99精品中文字幕| 亚洲欧美国产va在线影院| 韩国三级日本三级少妇99| 日韩一中文字幕| 亚洲国产精品久久久久秋霞蜜臀| 丝袜美腿亚洲一区二区| 日韩在线视频线视频免费网站| 亚洲已满18点击进入在线看片| 国产美女扒开尿口久久久| 亚洲人成电影网站色| 成人福利在线视频| 精品国产区一区二区三区在线观看| 国产精国产精品| 国产精品永久免费在线| 91久久国产婷婷一区二区| 亚洲第一二三四五区| 久久九九全国免费精品观看| 欧美在线免费观看| 精品国产一区二区三区久久| 精品亚洲一区二区三区在线观看| 最近2019免费中文字幕视频三| 欧美激情欧美激情在线五月| 欧美亚洲国产精品| 精品久久香蕉国产线看观看gif| 日韩国产欧美精品一区二区三区| 91成人免费观看网站| 国产精品久久久久久久久男| 亚洲国语精品自产拍在线观看| 久久久久久久久久国产| 日韩免费电影在线观看| 国产精品久久99久久| 精品国产一区二区三区四区在线观看| 69视频在线播放| 国产亚洲综合久久| 日韩精品电影网| 欧亚精品在线观看| 久久亚洲精品一区二区| 亚洲成人激情视频| 91精品国产综合久久香蕉| 欧美日韩高清区| 91久久精品国产91久久性色| 国产精品成人品| 日韩精品中文字幕在线| 热re99久久精品国产66热| 亚洲区免费影片| 欧美在线亚洲在线| 欧美日韩中国免费专区在线看| 欧美成年人网站| 中文字幕亚洲第一| 一区二区三区四区精品| 18久久久久久| 亚洲日本成人女熟在线观看| 亚洲一区二区三区香蕉| 亚洲国产成人精品久久久国产成人一区| 精品在线欧美视频| 欧美性一区二区三区| 国产精品一二区| 91精品国产乱码久久久久久蜜臀| 欧美高清视频一区二区| 欧美第一黄色网| 久久久av亚洲男天堂| 久热精品视频在线免费观看| 伊是香蕉大人久久| 69av在线视频| 中文字幕亚洲欧美日韩2019| 亚洲国产成人精品久久久国产成人一区| 日韩精品丝袜在线| 茄子视频成人在线| 亚洲精品短视频| 日韩av最新在线观看| 国产v综合ⅴ日韩v欧美大片| 亚洲视频综合网| 77777少妇光屁股久久一区| 91亚洲精品视频| 精品女同一区二区三区在线播放| 丝袜情趣国产精品| 国产三级精品网站| 久久久久久网站| 久久久久久欧美| 亚洲aa在线观看| 欧美精品福利在线| 午夜精品久久久久久久男人的天堂| 日韩av网址在线| 国产啪精品视频| 国产精品偷伦一区二区| 亚洲成人av片| 九九精品在线视频| 国产一区二区三区免费视频| 日韩高清电影好看的电视剧电影| 欧美亚洲成人免费| 亚洲美女av网站| 夜夜嗨av色一区二区不卡| 91视频国产高清| 久久精品中文字幕一区| 2021久久精品国产99国产精品| 一区三区二区视频| 亚洲欧美日韩精品久久亚洲区| 亚洲美女www午夜| 欧美性猛交xxxx黑人| 国产精品视频久久久久| 欧美激情欧美激情| 国产精品扒开腿做爽爽爽视频| 亚洲精品一区久久久久久| 欧美黑人一区二区三区| 欧美视频精品一区| 日韩精品视频在线观看网址| 日韩精品在线视频观看| 久久久av亚洲男天堂| 亚洲国产成人久久综合|