最新整合阿里雲OSS方法-phpcms

一、爲簡化整合步驟,使用該方法整合後,默認是全部圖片、附件都要上傳至OSS,並未在後臺設置中添加是否啓用OSS的開關。
二、上傳的圖片或附件,仍是會在PHPCMS所在服務器保留一份。主要是基於如下緣由:
  a、PHPCMS內部不少地方會檢查本地是否有文件圖片存在,若是全修改爲去檢查OSS,須要改動不少地方且效率低;
  b、模板中的 thumb 函數只支持經過本地文件來建立縮略圖;
  c、在本地有一份備份,可在OSS出問題時提供恢復數據。
因此要求PHPCMS所在服務器得有足夠空間來保存圖片或附件。

【可實現的功能】
一、發佈內容時,點擊富文本編輯器中的圖片上傳按鈕,可將圖片上傳到OSS。
二、發佈內容時,點擊富文本編輯器中的附件上傳按鈕,可將附件上傳到OSS。
三、發佈內容時,若是內容中有引用站外的圖片連接,且在模型管理的editor字段設置中啓用了「保存遠程圖片」,則會將站外圖片下載到本地,並上傳到OSS。
四、在模板中使用 thumb 函數生成的小尺寸縮略圖,也會上傳到OSS。

【整合方法】
一、從阿里雲下載SDK包:https://help.aliyun.com/document_detail/32099.html

二、將下載的SDK壓縮包解壓,獲得 aliyun-oss-php-sdk-master 目錄。

三、在 phpcms/libs/classes 目錄下新建 OSS 目錄。

四、將壓縮包解壓目錄中的如下文件和目錄,複製到  phpcms/libs/classes/OSS 目錄中。
aliyun-oss-php-sdk-master/autoload.php
aliyun-oss-php-sdk-master/src/OSS/

五、在 phpcms/libs/classes/OSS 目錄中新建 OSSConfig.php 文件,內容以下:php

<?php
    final class OSSConfig {
            const OSS_ACCESS_ID = '';                //Access Key ID,建議使用阿里雲的「訪問控制RAM」爲OSS操做新建一個用戶,並使用該用戶的 Access Key ID 和 Access Key Secret。請見 https://help.aliyun.com/document_detail/31932.html
            const OSS_ACCESS_KEY = '';                //Access Key Secret
            const OSS_ENDPOINT = '';                //endpoint是根據你的OSS所在區域填寫的,請見 https://help.aliyun.com/document_detail/31837.html
            const OSS_BUCKET = '';                        //Bucket 名稱
            const OSS_PATH = 'upload/';                //上傳路徑(不爲空時後面須要添加斜線)。能夠爲空,那麼上傳路徑就會是 年/月日/圖片文件,好比 2016/0814/20160814061725368.jpg。建議最好加1~2級路徑,如 upload/ 或 appname/upload/
    }
    ?>

六、修改 autoload.php,將html

$file = __DIR__ . DIRECTORY_SEPARATOR .'src'. DIRECTORY_SEPARATOR . $path . '.php';

修改成服務器

$file = __DIR__ . DIRECTORY_SEPARATOR . $path . '.php';

七、修改 phpcms/libs/classes/attachment.class.php 文件,在文件最開始的 <?php 下面添加:app

/********** 阿里雲OSS加載 S **********/
    require_once 'OSS/OSSConfig.php';
    require_once 'OSS/autoload.php';
    use OSS\OssClient;
    use OSS\Core\OssUtil;
    use OSS\Core\OssException;
    /********** 阿里雲OSS加載 E **********/

upload 方法中的編輯器

if($watermark_enable) {
                                        $image->watermark($savefile, $savefile);
 }

下面添加函數

/********** 阿里雲OSS上傳 S **********/
$ossClient = new OssClient(OSSConfig::OSS_ACCESS_ID, OSSConfig::OSS_ACCESS_KEY, OSSConfig::OSS_ENDPOINT);
$ossClient->uploadFile(OSSConfig::OSS_BUCKET, OSSConfig::OSS_PATH.$filepath, $this->upload_root.$filepath);
/********** 阿里雲OSS上傳 E **********/

download 方法中的ui

if($watermark){
                                        watermark($newfile, $newfile,$this->siteid);
                                }
                                $filepath = $dir.$filename;

下面添加this

/********** 阿里雲OSS上傳 S **********/
                                $ossClient = new OssClient(OSSConfig::OSS_ACCESS_ID, OSSConfig::OSS_ACCESS_KEY, OSSConfig::OSS_ENDPOINT);
                                $ossClient->uploadFile(OSSConfig::OSS_BUCKET, OSSConfig::OSS_PATH.$filepath, $this->upload_root.$filepath);
                                /********** 阿里雲OSS上傳 E **********/

修改 delete 方法阿里雲

function delete($where) {
                $this->att_db = pc_base::load_model('attachment_model');
                $result = $this->att_db->select($where);
                foreach($result as $r) {
                        $image = $this->upload_root.$r['filepath'];
                        @unlink($image);
                        $thumbs = glob(dirname($image).'/*'.basename($image));
                        if($thumbs) foreach($thumbs as $thumb) @unlink($thumb);
                }
                return $this->att_db->delete($where);
        }

變動爲code

function delete($where) {
                $ossClient = new OssClient(OSSConfig::OSS_ACCESS_ID, OSSConfig::OSS_ACCESS_KEY, OSSConfig::OSS_ENDPOINT);

                $this->att_db = pc_base::load_model('attachment_model');
                $upload_path = pc_base::load_config('system','upload_path');
                $result = $this->att_db->select($where);
                foreach($result as $r) {
                        $image = $this->upload_root.$r['filepath'];
                        @unlink($image);
                        /********** 阿里雲OSS刪除 S **********/
                        $ossClient->deleteObject(OSSConfig::OSS_BUCKET, OSSConfig::OSS_PATH.$r['filepath']);
                        /********** 阿里雲OSS刪除 E **********/
                        $thumbs = glob(dirname($image).'/*'.basename($image));
                        if ($thumbs) {
                                foreach ($thumbs as $thumb) {
                                        @unlink($thumb);
                                        $thumb = str_replace($upload_path, '', $thumb);
                                        /********** 阿里雲OSS刪除縮略圖 S **********/
                                        $ossClient->deleteObject(OSSConfig::OSS_BUCKET, OSSConfig::OSS_PATH.$thumb);
                                        /********** 阿里雲OSS刪除縮略圖 E **********/
                                }
                        }
                }
                return $this->att_db->delete($where);
        }

八、修改 phpcms/libs/classes/image.class.php 文件,在文件最開始的 <?php 下面添加:

/********** 阿里雲OSS加載 S **********/
    require_once 'OSS/OSSConfig.php';
    require_once 'OSS/autoload.php';
    use OSS\OssClient;
    use OSS\Core\OssUtil;
    use OSS\Core\OssException;
    /********** 阿里雲OSS加載 E **********/

thumb 方法中的

if(empty($filename)) $filename  = substr($image, 0, strrpos($image, '.')).$suffix.'.'.$type;
                $imagefun($thumbimg, $filename);

下面添加

/********** 阿里雲OSS上傳縮略圖 S **********/
                $upload_path = pc_base::load_config('system','upload_path');
                $object = str_replace($upload_path, '', $filename);
                $ossClient = new OssClient(OSSConfig::OSS_ACCESS_ID, OSSConfig::OSS_ACCESS_KEY, OSSConfig::OSS_ENDPOINT);
                $ossClient->uploadFile(OSSConfig::OSS_BUCKET, OSSConfig::OSS_PATH.$object, $filename);
                /********** 阿里雲OSS上傳縮略圖 E **********/
相關文章
相關標籤/搜索