查看: 3349|回復: 0

[PHP實例] discuz附件圖片遷移阿里云OSS

3萬

主題

3萬

帖子

10萬

積分

管理員

Rank: 9Rank: 9Rank: 9

積分
100197
發表于 2016-1-3 12:35:05
discuz附件圖片遷移阿里云OSS,該方法也適用于七牛、又拍云該方法是用discuz官方提供的擴展接口來實現的

DiscuzX使用云存儲原理:
通過改造ftp類,當附件上傳到本地時再通過ftp類將附件上傳到云存儲上。

下面使用阿里云存儲做discuz遠程附件的操作步驟:

1、確認您使用的discuz版本;

2.   開通云存儲,新建bucket(公共讀),這個步驟就不多說了,完全傻瓜式操作;

3、備份 source/class/class_core.php 和 config/config_global.php 兩個文件;

4、根據您的discuz論壇版本下載對應的 DISCUZX2.5/X3擴展框架DXEXTEND(下載:http://www.discuz.net/thread-3334048-1-1.html)另外,x3.1適用于x3.2,講解壓出來的source/class/class_core.php覆蓋discuz目錄下該文件;

5、下載DISCUZX2.5/3/3.1云存儲通用接口(下載:http://www.discuz.net/thread-3399569-1-1.html)將extend目錄文件上傳到discuz的根目錄,如有提示覆蓋即可;

6、在config/config_global.php 中新增以下內容:
  1. $_config['extend']['storage']['curstorage'] = 'aliyun';//云接口,一旦確認,不可再改

  2. $_config['extend']['storage']['aliyun']['access_id'] = 'xxx'; //你的Access Key ID
  3. $_config['extend']['storage']['aliyun']['access_key'] = 'xxx'; //你的Access Key Secret
  4. $_config['extend']['storage']['aliyun']['access_host'] = NULL;//默認即可
  5. $_config['extend']['storage']['aliyun']['bucket'] = 'bcxue.com';//你的bucket名字
  6. $_config['extend']['storage']['aliyun']['attachurl'] = 'http://img.bcxue.com';//訪問域名,可以在oss后臺設置自定義域名
復制代碼
7、在discuz 后臺--全局--上傳設置--遠程附件--啟用遠程附件:是,并將 遠程訪問 URL 設置為 http://<YOUR QINIU DOMAIN>也就是6中的attachurl,其他的都不用修改。
     
這樣就修改完成了,去論壇上傳附件發帖試試吧,再看看你的附件地址是不是已經是云存儲的地址了

上面只是把我們新的圖片上傳到我們的云存儲,但我們之前的圖片怎么辦呢?接著繼續說明 discuz本地圖片附件搬家遷移阿里云oss

1. 上傳data/attachment下面的文件夾到你自己阿里云oss的bucket目錄下(可以臨時升級一下阿里云的帶寬為10M也就幾塊錢一天,把源程序下面的圖片下載下來)

2.完成步驟1操作后需要轉換數據庫的本地附件的數據為遠程附件數據

涉及到的數據庫表:
pre_forum_attachment
pre_home_pic
pre_portal_article_title
pre_portal_attachment
pre_portal_topic_pic

在后臺--站長--數據庫--升級--分別執行如下代碼

1、pre_forum_attachment

  1. update pre_forum_attachment_0 set remote = '1';
  2. update pre_forum_attachment_1 set remote = '1';
  3. update pre_forum_attachment_2 set remote = '1';
  4. update pre_forum_attachment_3 set remote = '1';
  5. update pre_forum_attachment_4 set remote = '1';
  6. update pre_forum_attachment_5 set remote = '1';
  7. update pre_forum_attachment_6 set remote = '1';
  8. update pre_forum_attachment_7 set remote = '1';
  9. update pre_forum_attachment_8 set remote = '1';
  10. update pre_forum_attachment_9 set remote = '1';
復制代碼
2、pre_portal_article_title,pre_portal_attachment,pre_portal_topic_pic
  1. update pre_portal_article_title set remote=1;
  2. update pre_portal_attachment set remote=1;
  3. update pre_portal_topic_pic set remote=1;
復制代碼
3、由于相冊表中的remote取值還有一種情況為remote=2(論壇附件圖片保存到相冊)pre_home_pic,執行語句:
  1. update pre_home_pic set remote=remote+1;
復制代碼
按照以上操作后,打開網站附件--屬性看看是否已經在遠程地址上了,大功告成。

PS:由于某些原因我們帖子和門戶文章圖片路徑是寫死的,諸如采集的時候很多人圖方便都是直接寫死img src的,接下來介紹如何修改論壇帖子和門戶文章里面的img url路徑為我們的云存儲

1.修改修改論壇帖子img url(將字段帖子表內容字段message中的data/attachment替換為http:// img.bcxue.com/data/attachment)這種格式的
  1. UPDATE `pre_forum_post` SET `message` = replace(message, 'data/attachment', 'http://img.bcxue.com/data/attachment')  WHERE  `message` LIKE '%data/attachment/%';
復制代碼
意思是把discuz論壇帖子內容表中存貯內容的字段message中包含data/attachment替換為我們的http://img.bcxue.com/data/attachment云存儲路徑,用到了mysql的replace 字符替換函數

2.修改門戶文章帖子img url
  1. UPDATE `pre_portal_article_content` SET `content` = replace(content, 'data/attachment', 'http://img.it-home.org') WHERE `content`  LIKE '%data/attachment/%';
復制代碼
好了,通過以上幾點就完成了discuz 圖片附件遷移阿里云oss的全部過程了。





回復

使用道具 舉報