thinkphp中使用ftp上傳圖片

thinkphp中使用ftp上傳圖片

圖片上傳功能應該是個極為普遍的,在此參考了?thinkphp?框架中的集成方法整理了一下?FTP圖片的上傳功能,這樣方便在后臺操作時,把有關的圖片直接上傳到線上的圖片服務器,避免大流量訪問的圖片加載緩慢,降低網站的訪問壓力。

1、前端設計

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

thinkphp中使用ftp上傳圖片

立即學習PHP免費學習筆記(深入)”;

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?OrgNetUpload($img,?$imgUrl); ????????return?$upload->main(); ????} }

FTP上傳文件函數

function?ftp_upload($remotefile,$localfile){ ????$ftp?=?new?ThinkFtp(); ????$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、操作截圖

thinkphp中使用ftp上傳圖片

thinkphp中使用ftp上傳圖片

7、提示

對于這份參考代碼,涉及到的公共方法 handleImg()會先將需要上傳的圖片傳到當前操作的網站根目錄,之后又會通過 ftp_upload()將圖片傳到對應的圖片FTP服務器,從實現步驟上看第一步多余,主要是開發過程中的測試服務器不符合FTP賬號要求,同時又要方便線上內容修改的及時更新。

推薦教程:《TP5

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊9 分享