使用前言
将图片上传到第三方托管平台是大多数站长的选择,但是很多新手小白一开始的时候没有规划好(比如我),都是直接存放在本地,后续随着博客的流量越来越大服务器也随之承受不住,就想着把图片托管到第三方平台,今天分享一个自己写的一个一键替换,比较简单,由于我不熟悉php咋样才能即时输出(百度了一些方法,但是好像没啥用),所以咳咳使用时如果需要替换的资源比较久会出现连接超时的问题,超时时刷新链接继续上传就好了
使用代码
七牛云sdk下载 – https://developer.qiniu.com/kodo/1241/php
<?php
// 数据库
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
$table = "wp_posts"; // 需要修改的表
$value="post_content"; // 需要修改的列
// 七牛云
require_once 'php-sdk-7.9.0/autoload.php'; // 引入七牛云 SDK
use Qiniu\Auth;
use Qiniu\Storage\UploadManager;
// 需要填写你的 Access Key 和 Secret Key
$accessKey = '';
$secretKey = '';
// 要上传的空间名
$bucket = '空间名称';
// 自定义上传的文件夹
$folder = "自定义文件夹/";
// 拼接返回的图片链接为自己的空间自定义域名
$QiniuUrl = "http://自定义域名/$folder/" ;
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接是否成功
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 构建鉴权对象
$auth = new Auth($accessKey, $secretKey);
// 查询数据库中的所有数据
$sql = "SELECT * FROM $table";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 遍历结果集中的每一行数据
$num1=0;
$num2=0;
while($row = $result->fetch_assoc()) {
$new_link=$row["$value"];
$preg = '/<img.*?src=[\'"](.*?)[\'"].*?>/i';
preg_match_all($preg, $row["$value"], $matches);
foreach ($matches[1] as $url) {
if (strpos($url, "$folder") === false) {
// 获取图片内容
$imageContent = file_get_contents($url);
// 生成上传 Token
$token = $auth->uploadToken($bucket);
// 初始化 UploadManager 对象并进行上传
$uploadMgr = new UploadManager();
list($ret, $err) = $uploadMgr->put($token, $folder . uniqid(), $imageContent);
if ($err !== null) {
// 上传失败
// echo $num." - 上传失败: $err\n";
$num1++;
} else {
$num2++;
// 上传成功
// 构建七牛云访问链接
$baseUrl = $QiniuUrl.$ret['key'];
// 替换旧链接为新链接
$new_link=str_replace($url,$baseUrl,$new_link);
}
}
}
// 更新数据库
$new_link = mysqli_real_escape_string($conn, $new_link);
$sql = "UPDATE `$dbname`.`$table` SET `$value` = '$new_link' WHERE ID = " . $row["ID"];
if($conn->query($sql)!= TRUE) {
echo "数据库更新失败: " . $sql . "<br>" . $conn->error;
}
}
echo "上传失败: $num1<br>上传成功:$num2\n";
} else {
echo "0 结果";
}
$conn->close();
?>
食用教程
- 将代码随意粘贴到一个.php文件中
- 将你需要替换的数据库信息填写在代码4-9行左右
- 下载好七牛云的sdk,在代码12行中引入
- 打开七牛云的控制台,找到自己的Access Key 和 Secret Key复制到代码18 – 19行左右
- 在七牛云打开自己的存储空间,将存储空间的空间名称,自定义域名复制到代码22和26行左右
- 在七牛云的存储空间内创建一个文件夹用于存放图片,将文件夹名称填写在代码24行左右(不创建也行,不强制,建议创建)
- 最后访问这个.php文件即可,
上文说了,由于我不会php的即时输出,php只有在全部数据执行完才会输出结果,文件太多就会造成访问超时,这个时候不要着急,访问超时的时候刷新一下就好了,你这个时候就得确保自己的七牛云存放的文件夹是唯一的,因为在上传的时候会对链接进行判断如果是在这个文件夹内的图片就不会再上传了,可以见代码52行
THE END
暂无评论内容