最近公司更換了七牛雲賬號,需要做個圖片素材的遷移,這裏記錄一下
項目用的的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) ;
}
}
第一次搞這個,有更好的方法可以留言一起討論呀