本文實例講述了ThinkPHP框架實現(xiàn)FTP圖片上傳功能。分享給大家供大家參考,具體如下:
背景:
圖片上傳功能應(yīng)該是個極為普遍的,在此參考了ThinkPHP 框架中的集成方法整理了一下FTP圖片的上傳功能,這樣方便在后臺操作時,把有關(guān)的圖片直接上傳到線上的圖片服務(wù)器,避免大流量訪問的圖片加載緩慢,降低網(wǎng)站的訪問壓力,不合理之處,敬請指摘...
操作:
1.前端設(shè)計
這里主要為了測試功能的實現(xiàn),使用最簡單的設(shè)計,既方便參考又有利于后期的功能擴展。如下附upload.html主要代碼,著重注意紅框圈出的代碼,其中css樣式比較簡單,需要的可以參考后面的源代碼。

2.后臺控制器設(shè)計
config.class.php 主要代碼如下所示,其中設(shè)計的表“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.配置數(shù)據(jù)
在公共配置文件中,進行如下常量的數(shù)據(jù)配置,參考代碼如下,注意配置FTP 賬號及密碼的正確性,此處安全起見只是舉例。
//ftp(外網(wǎng)服務(wù)器)上傳文件相關(guān)參數(shù)
'FTP_SEVER' => 'http://img.52zhenmi.com', //此地址,作為圖片讀取的位置 請上線前仔細(xì)確認(rèn)
'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端口,默認(rèn)為21
'FTP_PASV' => true,//是否開啟被動模式,true開啟,默認(rèn)不開啟
'FTP_SSL' => false,//ssl連接,默認(rèn)不開啟
'FTP_TIMEOUT' => 60,//超時時間,默認(rèn)60,單位 s
'REMOTE_ROOT' => '/',//圖片服務(wù)器根目錄
4.引入文件
以我的代碼為例,在此引用了兩個文件,其中的FTP.class.php 放在了'/Library/Think' 目錄下;Upload.class.php 放在了'/Library/Org/Net'目錄下,可根據(jù)自己的使用習(xí)慣自行調(diào)整目錄,只要保證實例化路徑時沒問題就可。
5.公共函數(shù)添加
注意添加上文步驟2中使用到的公共函數(shù)。
/**
* 圖片上傳的公共處理方法
* @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上傳文件函數(shù)
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端口,默認(rèn)為21
$data['pasv'] = C('FTP_PASV');//是否開啟被動模式,true開啟,默認(rèn)不開啟
$data['ssl'] = C('FTP_SSL');//ssl連接,默認(rèn)不開啟
$data['timeout'] = C('FTP_TIMEOUT');//超時時間,默認(rèn)60,單位 s
$info = $ftp->start($data);
if($info){
if($ftp->put($remotefile,$localfile)){}
}
$ftp->close();
}
6.操作截圖


7.提示
對于這份參考代碼,涉及到的公共方法handleImg()
會先將需要上傳的圖片傳到當(dāng)前操作的網(wǎng)站根目錄,之后又會通過ftp_upload()
將圖片傳到對應(yīng)的圖片F(xiàn)TP服務(wù)器,從實現(xiàn)步驟上看第一步多余,主要是開發(fā)過程中的測試服務(wù)器不符合FTP賬號要求,同時又要方便線上內(nèi)容修改的及時更新,暫沒優(yōu)化,也不麻煩,算留大家一個自由發(fā)揮的機會吧。
源代碼點擊此處本站下載。
更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。
希望本文所述對大家基于ThinkPHP框架的PHP程序設(shè)計有所幫助。
您可能感興趣的文章:- thinkPHP5框架整合plupload實現(xiàn)圖片批量上傳功能的方法
- ThinkPHP5+Layui實現(xiàn)圖片上傳加預(yù)覽功能
- ThinkPHP5.0 圖片上傳生成縮略圖實例代碼說明
- thinkphp5上傳圖片及生成縮略圖公共方法(分享)
- 基于ThinkPHP5.0實現(xiàn)圖片上傳插件
- 使用ThinkPHP+Uploadify實現(xiàn)圖片上傳功能
- Thinkphp整合阿里云OSS圖片上傳實例代碼
- Thinkphp5+plupload實現(xiàn)的圖片上傳功能示例【支持實時預(yù)覽】