Typecho默认情况下,文章编号(cid)和分类ID(mid)可能会因为删除操作而变得不连续,虽然这不影响网站的正常运行,但对于有强迫证的你来说,这确实是一个问题。过下面的方法我们很容易解决这个问题,该方法适用于PHP7及以上版本的服务器。
一、解决cid不连续的问题
将以下代码保存为PHP文件并上传至网站根目录,在地址栏访问,出现OK即可完成。
php 代码:<?php
/**
* Typecho重新排列不连续的文章ID
*/
$hostname_blog = "localhost";
$database_blog = "数据库名";
$username_blog = "数据库用户名";
$password_blog = "数据库密码";
// 创建连接
$conn = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$no = 1;
function change_id($conn, $cid)
{
global $no;
// 修改post cid,并修改分类、标签、自定义字段、评论的对应关系
$stmt = $conn->prepare("UPDATE typecho_contents SET cid = ? WHERE cid = ?");
$stmt->bind_param("ii", $no, $cid);
$stmt->execute();
if ($stmt->affected_rows == 0) {
// 如果没有行被更新,则可能是CID已经不存在或已被更改
// 这里可以添加错误处理逻辑
}
$stmt->close();
// 更新其他依赖表(示例:typecho_relationships)
$stmt = $conn->prepare("UPDATE typecho_relationships SET cid = ? WHERE cid = ?");
$stmt->bind_param("ii", $no, $cid);
$stmt->execute();
$stmt->close();
// 更新其他依赖表(示例:typecho_comments)
$stmt = $conn->prepare("UPDATE typecho_comments SET cid = ? WHERE cid = ?");
$stmt->bind_param("ii", $no, $cid);
$stmt->execute();
$stmt->close();
$no++;
}
// 读取所有CID
$query_postRecord = "SELECT cid FROM typecho_contents ORDER BY cid ASC";
$result = $conn->query($query_postRecord);
if ($result) {
while ($row = $result->fetch_assoc()) {
change_id($conn, $row['cid']);
}
$result->close();
// 尝试重置自增ID(注意:这通常不是必要的,因为新插入的行会自动获取下一个ID)
// 但如果您确实需要这样做,请确保没有并发插入操作
$conn->query("ALTER TABLE typecho_contents AUTO_INCREMENT = " . $no);
echo 'ok';
} else {
echo "查询失败: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
二、解决mid不连续的问题
将以下代码保存为PHP文件并上传至网站根目录,在地址栏访问,出现OK即可完成。
php 代码:<?php
/**
* Typecho重新排列分类和标签(meta)不连续的mid
*/
$hostname_blog = "localhost";
$database_blog = "数据库名";
$username_blog = "数据库用户名";
$password_blog = "数据库密码";
// 创建连接
$conn = new mysqli($hostname_blog, $username_blog, $password_blog, $database_blog);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
$no = 1;
function change_id($conn, $mid)
{
global $no;
// 修改meta id
$stmt = $conn->prepare("UPDATE typecho_metas SET mid = ? WHERE mid = ?");
$stmt->bind_param("ii", $no, $mid);
$stmt->execute();
// 检查是否有行被更新
if ($stmt->affected_rows == 0) {
// 这里可以添加错误处理逻辑,比如记录日志
}
// 更新typecho_relationships中的mid
$stmt = $conn->prepare("UPDATE typecho_relationships SET mid = ? WHERE mid = ?");
$stmt->bind_param("ii", $no, $mid);
$stmt->execute();
// 更新完成后递增$no
$no++;
// 关闭语句
$stmt->close();
}
// 读取所有mid
$query_postRecord = "SELECT mid FROM typecho_metas ORDER BY mid ASC";
$result = $conn->query($query_postRecord);
if ($result) {
while ($row = $result->fetch_assoc()) {
change_id($conn, $row['mid']);
}
$result->close();
// 尝试重置自增ID(通常不是必要的,但如果你确实需要)
// 注意:这可能会在有并发插入的情况下导致问题
$conn->query("ALTER TABLE typecho_metas AUTO_INCREMENT = " . $no);
echo 'ok';
} else {
echo "查询失败: " . $conn->error;
}
// 关闭连接
$conn->close();
?>
搜索引擎有收录的可要小心更改永久链接
这个不影响的,只是修改CID和MID的数字让其连续,对文章的永久链接不做修改
是嘛,没有修改永久链接就好
暂无点赞
暂无点赞
暂无点赞