清理宝塔瘦身

  1. /www/server/monitor/ 占用了** G —— 这是宝塔的面板监控历史数据(指标及日志),长时间不清理会膨胀得非常夸张。
  2. /www/server/data/ 占用了 ** G —— 这是 MySQL 数据库的目录(里面很可能堆积了大量的 Binlog 日志或数据库冗余)。

这两个加起来就吃掉了 好多 空间。我们可以非常安全地对它们进行清理:

第一步:清理宝塔监控历史数据(释放 21G)

/www/server/monitor 里面存的是宝塔的系统监控图表历史记录。如果你不需要看太久以前的历史曲线,可以直接清空它:

rm -rf /www/server/monitor/*

(清理后,面板监控会重新开始记录,完全不影响网站和数据库运行)

如果上面不能删除,执行下面强制执行:

rm -rf /www/server/monitor/*

如果上面这句还有残留,可以直接把整个 monitor 文件夹删掉重建一个空的:

rm -rf /www/server/monitor && mkdir /www/server/monitor

第二步:清理 MySQL 的 Binlog 日志(释放 16G 中的大部分冗余)

/www/server/data/ 空间大,通常是因为 MySQL 的二进制日志(Binlog)无限制膨胀。 你可以通过宝塔的 数据库 -> 性能调整expire_logs_days(日志保留天数)设为 3 或 7 天。 或者直接在终端里登录数据库清理:

1、输入命令进入 MySQL:

mysql -u root -p

(提示输入密码时,直接去宝塔面板的“数据库”菜单里复制 root 密码粘贴进去,密码输入时屏幕上不显示,输完直接回车)

2、登录成功后,输入以下 SQL 命令清空旧的 Binlog 日志:

RESET MASTER;

3、输入 exit 退出数据库。

Linux终端中的常用命令

1、Linux 终端中的清屏命令是:

clear

2、列出目录及文件内容的常用 Linux 命令是:

ls

常用搭配参数:

ls -l:以详细列表形式显示(包含权限、所有者、大小、修改时间等)

ls -lh:以详细列表形式显示,且文件大小会以人类易读的单位(如 K、M、G)呈现

ls -a:显示所有文件,包括以 . 开头的隐藏文件

3、退回到上一级目录的命令是:

cd ..

常用搭配参数:

记得空格

4、进入某某目录命令:

cd /www
du -h --max-depth=1 | sort -hr

5、查看某某目录,谁占用空间最大,例如,在终端输入以下命令查看 server 目录下一层谁最大:

du -h --max-depth=1 /www/server/ | sort -hr

常用的Linux du命令

查看文件夹目录大小最常用的 Linux 命令是 du,搭配不同的参数可以实现不同的查看效果

1、查看当前目录下所有一级子文件夹和文件的大小(最常用):

du -h --max-depth=1

2、查看指定目录(如 /www/server/)下各子目录的大小

du -h --max-depth=1 /www/server/

查看 /www/ 目录下各个子文件夹分别占用了多少空间,并以易读的容量单位(KB、MB、GB)显示:

du -h --max-depth=1 /www/

3、按从大到小的顺序列出当前目录下的所有文件和文件夹大小

du -h --max-depth=1 | sort -hr

4、按空间占用大小从大到小排序

如果文件夹非常多,想一眼看出哪个最大,可以配合 sort 命令进行降序排序:

du -h --max-depth=1 /www/ | sort -hr

参数说明

sort -hr:按照人类可读的容量大小(如 K、M、G)进行从大到小的倒序排列。

PbootCMS升级,最可靠的方式

在有时候我们的版本跨度比较大,涉及到的文件很多,如果直接使用后台在线更新容易出现下载文件失败的情况,那么为了保证顺利升级又免去一个个升级数据库脚本的问题,我们可以考虑本文提到的手动升级方案:

1、到官方网站下载最新版PbootCMS,注意不可跨越大版本,1.X版本只能先升级到1.4.3,然后再升级2.X

2、复制保存一份现有版本信息,复制/apps/common/version.php 保存一份

3、用新版本替换apps 、core两个文件夹,以及三个入口文件admin.php、 api.php、index.php

4、将/apps/common/version.php替换回第二步备份的老文件(原始下载下来的旧版本文件)

5、登陆网站后台重新检查更新,我们会发现我们要下载的文件只有几个了,而且数据库脚本一样会给我们自动列出来,这时候下载就容易多了,基本不会报错,我们点击下载,然后升级完成。

注意:如果点直接升级不行,就下载全部文件上传覆盖。再点后台更新!!!

wordpress 主题乱码原因mbstring扩展缺失

mbstring(Multibyte String)是 PHP 中用于处理多字节字符编码的核心扩展,专门解决中文、日文、韩文等使用多字节编码的语言在字符串操作时可能出现的乱码和截断问题。

为什么需要 mbstring?

PHP 原生的字符串函数(如 strlen()substr()strpos() 等)是按字节来操作的。对于 UTF-8 编码的中文,一个汉字通常占 3 个字节,如果用 substr() 截取,很容易把一个汉字的字节截断,导致乱码。mbstring 提供了一套多字节感知的函数来替代原生函数,按”字符”而非”字节”来操作字符串。

核心函数一览

函数功能对应原生函数
mb_strlen()获取字符串的字符数strlen()
mb_substr()按字符截取子串substr()
mb_strpos()查找子串首次出现的位置strpos()
mb_strtolower() / mb_strtoupper()大小写转换strtolower() / strtoupper()
mb_convert_encoding()字符编码转换
mb_detect_encoding()自动检测字符串编码
mb_strwidth()获取字符串显示宽度(全角算2)
mb_strimwidth()按显示宽度截断字符串

安装与启用

mbstring 是 PHP 的非默认扩展,需要手动启用:

  • Windows:在 php.ini 中取消注释或添加 extension=mbstring
  • Linux(从源码编译):使用 --enable-mbstring 配置选项
  • 包管理器安装:如 apt install php-mbstring(Debian/Ubuntu)或 yum install php-mbstring(CentOS)

安装后重启 Web 服务器即可生效。

常用配置项(php.ini)

ini

; 设置内部编码(推荐 UTF-8)
mbstring.internal_encoding = UTF-8

; HTTP 输入编码
mbstring.http_input = auto

; HTTP 输出编码
mbstring.http_output = UTF-8

; 编码检测顺序
mbstring.detect_order = auto

支持的编码格式

mbstring 支持非常广泛的字符编码,包括但不限于:

  • Unicode 系列:UTF-8、UTF-16、UTF-32、UCS-2、UCS-4
  • 中文相关:EUC-CN、CP936(GBK)、EUC-TW、CP950(BIG-5)
  • 日文相关:EUC-JP、Shift_JIS、ISO-2022-JP
  • 韩文相关:EUC-KR、UHC(CP949)
  • 西欧系列:ISO-8859-1 ~ ISO-8859-15、Windows-1251/1252

实际应用场景

  • 国际化(i18n):处理多语言内容,确保不同语言的文本正确显示
  • 数据验证与清洗:安全地处理用户输入的多字节字符串
  • CMS 系统:支持多语言内容的创建和管理
  • 编码转换:在不同系统间传输数据时进行编码转换

⚠️ 需要注意的事项

  • 性能开销:多字节操作比单字节操作更耗资源,高流量场景下需注意优化
  • 编码一致性:建议数据库、PHP 内部编码、页面输出编码统一使用 UTF-8,避免不必要的转换
  • 函数重载已废弃mbstring.func_overload 功能自 PHP 7.2.0 起废弃,PHP 8.0.0 起移除,强烈建议不要使用,应直接在代码中显式调用 mb_* 函数

简单使用示例

<?php
$str = "你好,世界!Hello!";

// 原生 strlen 返回字节数(中文 UTF-8 下会偏大)
echo strlen($str);        // 输出: 24(字节数)

// mb_strlen 返回字符数
echo mb_strlen($str, 'UTF-8');  // 输出: 13(字符数)

// 安全截取子串
echo mb_substr($str, 0, 5, 'UTF-8');  // 输出: 你好,世界

// 编码转换
$gbk_str = mb_convert_encoding($str, 'GBK', 'UTF-8');

总的来说,只要你的 PHP 项目涉及中文或其他非 ASCII 字符,mbstring 就是一个必备扩展,建议始终启用并使用它来处理字符串操作。

PbootCMS升级,前台打不开

旧版数据库

-- 1. ay_content_sort 表
ALTER TABLE ay_content_sort 
MODIFY scode VARCHAR(191);  -- 关键:255 → 191

ALTER TABLE ay_content_sort 
ADD UNIQUE INDEX ay_content_sort_scode (scode);


-- 2. ay_model 表
ALTER TABLE ay_model 
MODIFY mcode VARCHAR(191);

ALTER TABLE ay_model 
ADD UNIQUE INDEX ay_model_mcode (mcode);


-- 3. ay_content_ext 表
ALTER TABLE ay_content_ext 
MODIFY contentid VARCHAR(191);

ALTER TABLE ay_content_ext 
ADD UNIQUE INDEX ay_content_ext_contentid (contentid);

新版数据库


-- 1. 修复 ay_content_sort 表:修改 scode 字段 + 唯一索引
ALTER TABLE ay_content_sort 
MODIFY scode VARCHAR(255);  -- 修改字段类型(正确语法)

ALTER TABLE ay_content_sort 
ADD UNIQUE INDEX ay_content_sort_scode (scode);  -- 添加唯一索引

-- 2. 修复 ay_model 表:修改 mcode 字段 + 唯一索引
ALTER TABLE ay_model 
MODIFY mcode VARCHAR(255);

ALTER TABLE ay_model 
ADD UNIQUE INDEX ay_model_mcode (mcode);

-- 3. 修复 ay_content_ext 表:修改 contentid 字段 + 唯一索引
ALTER TABLE ay_content_ext 
MODIFY contentid VARCHAR(255);

ALTER TABLE ay_content_ext 
ADD UNIQUE INDEX ay_content_ext_contentid (contentid);