七牛雲圖片遷移

最近公司更換了七牛雲賬號,需要做個圖片素材的遷移,這裏記錄一下
項目用的的ci框架
第一步就是吧sdk包放入libraries下,如圖
在這裏插入圖片描述
然後上代碼

<?php

// 更換七牛雲賬號進行圖片遷移
class AcceptReplace extends CI_Controller {
    
    /**
     *
     * 建日誌表記錄新舊鏈接
     *
     */
    public function recordChange() {
        $sql = <<<EOA
CREATE TABLE if not exists `log_updateqiniuyun` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `newurl` varchar(100) DEFAULT NULL,
  `oldurl` varchar(100) DEFAULT NULL,
  `status` tinyint(4) DEFAULT 0,
  `time` int(11) unsigned DEFAULT '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
EOA;
        $db = $this->load->database('crm', true);

        $db->query($sql);
    }

    /**
     *
     * 下載七牛上的圖片文件並存入指定文件
     *
     */
    public function getFile($url='', $save_dir='', $filename='') 
    {
        if (trim($url) == '') {
            return false;
        }
        //獲取遠程文件所採用的方法
        $ch = curl_init();
        $timeout = 10;
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 3);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
        $content = curl_exec($ch);
        curl_close($ch);
        
        if(!empty($content)) {
            file_put_contents($save_dir.$filename, $content);
        }
        return false;
    }
    /**
     *
     * 上傳到新賬戶七牛雲地址
     *
     */
    public function saveToNewQiniu($url) {
        // 配置
        $access_key = 'Jl_dgFNSQstm8YIwWTYcwQkaJQ2OaLh4Z6FmCMsa';
        $secret_key = 'Y4NV9tUW3Zl5DPknfYyNEfQmSWw5pabgCppqQ0hI';
        $bucket = 'adimg'; // 存儲空間名稱
        $domain = 'adimage.shishihongbao.com'; // 綁定域名 
        // 上傳到七牛後保存的文件名
        $key = time().substr($url, strrpos($url, '.')-4);
        
        require_once APPPATH . 'libraries/autoload.php';

        $auth = new Qiniu\Auth($access_key, $secret_key);
        // 生成上傳 Token
        $token = $auth->uploadToken($bucket);
        // $bucketManager = new Qiniu\Storage\BucketManager($auth);
        // 初始化 UploadManager 對象並進行文件的上傳。
        $uploadMgr = new Qiniu\Storage\UploadManager();
        
        // 調用 UploadManager 的 putFile 方法進行文件的上傳。
        list($ret, $err) = $uploadMgr->putFile($token, $key, $url);

        if ($err !== null) {
            return $err;
        } else {
            return $ret;
        }
        
    }
    
    public function upload()
    {
        $db = $this->load->database('crm', true);
        $this->recordChange();
        $oldDomain = 'adimg.shishihongbao.com'; // 舊的綁定域名
        $domain = 'adimage.shishihongbao.com'; // 新的綁定域名
        $sql = "SELECT `image_url` FROM `ad_material`";
        $imageUrl = $db->query($sql);
        $path=APPPATH ."cache/images";
        //目錄不存在則創建
        if (!is_dir($path)){
            
            $res  = mkdir($path,0777,true);
        }
        $save_dir = APPPATH ."cache/images/";

        $status   = 1;
        
        foreach ($imageUrl->result_array() as $value) {
            if(!empty($value['image_url']) && strpos($value['image_url'], $oldDomain)){
                $oldUrl    = $value['image_url'];
                if(substr($oldUrl, strrpos($oldUrl, '.')) {
                    $filename  = substr($oldUrl, strrpos($oldUrl, '/')+1);
                }else {
                    $filename  = substr($oldUrl, strrpos($oldUrl, '/')+1).'.png';
                }
                $save_path = $this->getFile($oldUrl, $save_dir, $filename);
                // print_r($filename);die;
                // 圖片遷移失敗記錄
                if(!$save_path) {
                    $status = 0;
                    $db->query("INSERT INTO `log_updateqiniuyun` VALUES (null,'','".$oldUrl."','" . $status."','" .$time." ')");
                }else {
                    $newUrl    = $this->saveToNewQiniu($save_path['save_path']);
                    // print_r($newUrl);
                    $newUrl1   = 'http://'. $domain .'/'. $newUrl['key'];
                    // 圖片遷移成功記錄
                    if($newUrl1) {
                        $time  = time();
                        $db->trans_strict(FALSE);
                        $db->trans_start();
                        $db->query("INSERT INTO `log_updateqiniuyun` VALUES (null,'".$newUrl1."','".$oldUrl."','" . $status."','" .$time." ')");
                        // $db->query("UPDATE `ad_material` SET `image_url`=".$newUrl." WHERE `image_url`=".$oldUrl);
                        $db->trans_complete();
                    }
                }
                
            }

        }
        // 刪除本地圖片
        $this->removeDir($save_dir);
    }

    // 刪除本地圖片目錄
    function removeDir($dirName) 
    { 
        if(! is_dir($dirName)) 
        { 
            return false; 
        } 
        $handle = @opendir($dirName); 
        while(($file = @readdir($handle)) !== false) 
        { 
            if($file != '.' && $file != '..') 
            { 
                $dir = $dirName . '/' . $file; 
                is_dir($dir) ? removeDir($dir) : @unlink($dir); 
            } 
        } 
        closedir($handle); 
          
        // rmdir($dirName) ; 
    } 

}

第一次搞這個,有更好的方法可以留言一起討論呀

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