ThinkPHP框架實現FTP圖片上傳功能示例

這篇文章主要介紹了ThinkPHP框架實現FTP圖片上傳功能,結合實例形式分析了thinkPHP框架實現ftp圖片上傳功能相關的配置、文件傳輸功能等操作技巧,需要的朋友可以參考下

本文實例講述了ThinkPHP框架實現FTP圖片上傳功能。分享給大家供大家參考,具體如下:

背景:

圖片上傳功能應該是個極爲普遍的,在此參考了ThinkPHP 框架中的集成方法整理了一下FTP圖片的上傳功能,這樣方便在後臺操作時,把有關的圖片直接上傳到線上的圖片服務器,避免大流量訪問的圖片加載緩慢,降低網站的訪問壓力,不合理之處,敬請指摘...

操作:

1.前端設計

這裏主要爲了測試功能的實現,使用最簡單的設計,既方便參考又有利於後期的功能擴展。如下附upload.html主要代碼,着重注意紅框圈出的代碼,其中css樣式比較簡單,需要的可以參考後面的源代碼。

2.後臺控制器設計

config.class.php 主要代碼如下所示,其中設計的表“conf”在此只需用兩個字段就好——'tag','value',可以使用簡單的varchar類型。

public function upload(){
  if (IS_POST){
    foreach ($_FILES as $key => $value){
      $img = handleImg($key);
      $furl = C('REMOTE_ROOT').$img;
      if ($img){
        ftp_upload($furl,$img);
        $saveData['value'] = $img;
        M('conf')
          ->where("tag = '".$key."'")
          ->save($saveData);
      }
    }
    $this->success('FTP 測試完成',U('Config/upload'),2);
  }else{
    $imgUrl = M('conf')
      ->where("tag = 'upImg'")
      ->getField('value');
    $this->assign('imgUrl',$imgUrl);
    $this->display();
  }
}

3.配置數據

在公共配置文件中,進行如下常量的數據配置,參考代碼如下,注意配置FTP 賬號及密碼的正確性,此處安全起見只是舉例。

//ftp(外網服務器)上傳文件相關參數
'FTP_SEVER'    => 'http://img.52zhenmi.com', //此地址,作爲圖片讀取的位置 請上線前仔細確認
'FTP_HOST'    => 'img.52zhenmi.com',
'WEB_SEVER'   => 'http://img.52zhenmi.com',
'WEB_M_SERVER'  => 'http://www.52zhenmi.com/m',
'FTP_NAME'    => 'fexxxi',//ftp帳戶
'FTP_PWD'    => '1qxxxxxxw',//ftp密碼
'FTP_PORT'    => '21',//ftp端口,默認爲21
'FTP_PASV'    => true,//是否開啓被動模式,true開啓,默認不開啓
'FTP_SSL'    => false,//ssl連接,默認不開啓
'FTP_TIMEOUT'  => 60,//超時時間,默認60,單位 s
'REMOTE_ROOT'  => '/',//圖片服務器根目錄

4.引入文件

以我的代碼爲例,在此引用了兩個文件,其中的FTP.class.php 放在了'/Library/Think' 目錄下;Upload.class.php 放在了'/Library/Org/Net'目錄下,可根據自己的使用習慣自行調整目錄,只要保證實例化路徑時沒問題就可。

5.公共函數添加

注意添加上文步驟2中使用到的公共函數。

/**
 * 圖片上傳的公共處理方法
 * @param string $fileName 圖片上傳的name
 * @return string 圖片的存儲路徑
 */
function handleImg($fileName){
  if($_FILES[$fileName]['tmp_name'] != ""){
    $img = $_FILES[$fileName];
    $imgUrl = __ROOT__."/public";
    $upload = new \Org\Net\Upload($img, $imgUrl);
    return $upload->main();
  }
}
//FTP上傳文件函數
function ftp_upload($remotefile,$localfile){
  $ftp = new \Think\Ftp();
  $data['server'] = C('FTP_HOST');
  $data['username'] = C('FTP_NAME');//ftp帳戶
  $data['password'] = C('FTP_PWD');//ftp密碼
  $data['port'] = C('FTP_PORT');//ftp端口,默認爲21
  $data['pasv'] = C('FTP_PASV');//是否開啓被動模式,true開啓,默認不開啓
  $data['ssl'] = C('FTP_SSL');//ssl連接,默認不開啓
  $data['timeout'] = C('FTP_TIMEOUT');//超時時間,默認60,單位 s
  $info = $ftp->start($data);
  if($info){
    if($ftp->put($remotefile,$localfile)){}
  }
  $ftp->close();
}

6.操作截圖

7.提示

對於這份參考代碼,涉及到的公共方法handleImg()會先將需要上傳的圖片傳到當前操作的網站根目錄,之後又會通過ftp_upload()將圖片傳到對應的圖片FTP服務器,從實現步驟上看第一步多餘,主要是開發過程中的測試服務器不符合FTP賬號要求,同時又要方便線上內容修改的及時更新,暫沒優化,也不麻煩,算留大家一個自由發揮的機會吧。

源代碼點擊此處本站下載

更多關於thinkPHP相關內容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結》、《ThinkPHP常用方法總結》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術總結》。

希望本文所述對大家基於ThinkPHP框架的PHP程序設計有所幫助。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章