普通视图

发现新文章,点击刷新页面。
昨天以前首页

老张博客更换Riven主题了!

作者 老张
2026年6月11日 16:22

刚开始写博客的时候,那是三六九的换主题,渐渐的一个主题也就可以用几年了。上次换小胡优化版的”2012″主题还是2023年12月2日,我在”关于“页面有介绍。时隔两年半余,再次更换成Riven主题!

Riven主题主题作者是满心,是我RSS订阅的博友,经常博客互访。5月份的时候访问他博客的时候看到他正在开发一款”新中式美学博客主题”,一看甚是喜欢,便留言给他有购买的想法,后来他也发博客说准备开始在六月份预售,便留言预订了。等开售的那天,果断付款39块购买了主题。拿到主题发现满心没有对主题代码进行授权加密,唉,估计不用多长时间,这个主题就会有黄牛拿出来卖!如果以后大家遇到”黄牛”卖这款主题,一定要告诉满心,我们得要尊重一下他的劳动成果嘛!

Riven是Typecho主题,我先是用在了我的《老张随笔》上,越用越喜欢,就想着把这款主题通过AI进行复刻,然后运用到Wordpress上。这开始这个事情之前,我是先找到满心说了这个想法,经过他同意之后我才开始着手干这件事。把Riven主题代码直接丢给AI,经过半天的复刻三天的修复,终于在昨天晚上上线了。”专业的事由专业的人来做”,这句话一点也不假,做为0代码基础的我来说,比”专业”人员需要花太多的时间和精力。加上小米mimo的模型不给力,有时一个BUG修复提交给他,卡一个多小时还不动而浪费了太多的时间。更有时是老的BUG修复好了新BUG出现了,而再把新BUG修好原来的老BUG又跑出来,反反复复来回折腾。

如果有想了解、购买Riven主题的,请移步满心博客:

{riven_postcard type=”external” title=”Typecho-Riven主题正式发售啦!!!” url=”https://zhoutian.com/374.html” author=”满心” date=”2026-05-27″ desc=”新中式美学博客主题”}

除了移植复刻Typecho-Riven主题,我还对主题进行了符合自己使用习惯的改动!

  1. 由单栏模式修改为单栏双栏任切换模式。
  2. 侧边栏增加友情链接、网站统计、浏览最多、读者墙等。
  3. 增加首页调用typecho文章效果,后台可关闭
  4. 博友圈修改调用FreshRSS,并在后台设置刷新时间,无需再设置宝塔面板计划任务。
  5. 首页文章列表增加评论数、浏览数

{riven_notice type=”red”}在后期使用过程中,大家如果发现什么BUG,请一定告诉老张,便于能及时进行修复!老张在这里先谢过大家了!{/riven_notice}

wordpress兰空图床插件V2版

作者 老张
2026年6月8日 21:51

自从薅了mimo的模型,真的没有放过他,这段时间把自己经常想到使用的一些功能都利用”小张”跑了一次。以前我写博客时,都是先把图片手动上传到兰空图床,然后再把图片链接复制到文章里来,很是麻烦。也找了很多插件但是都不是太好用。前几天找到了小旭二次开发的wordpress兰空图床插件,基本上可以用,但是功能还是不全。于是便利用AI进行了再次优化,添加了一些功能,同时也对代码进行了安全性检查,可以放心使用。

项目地址:https://github.com/laozhangge/LskyPro-for-wordpress

功能介绍:

  • 在WordPress编辑器中添加兰空图床上传按钮
  • 支持在侧边栏快速上传图片并获取链接
  • 支持多图片同时上传
  • 支持配置上传权限(公开/私有)
  • 可配置允许使用的用户角色
  • 限制上传文件大小和类型
  • 支持编辑器粘贴上传 – 直接从剪贴板粘贴图片自动上传到兰空图床
  • 存储策略选择 – 测试连接后自动加载存储策略列表,无需手动填写ID
  • 相册选择 – 可选择上传到指定相册,测试连接后自动加载相册列表
  • 支持V1和V2版本兰空图床


优化后的这款插件,可以选择相册、存储策略以及图片权限。这样更好的方便大家去管理自己的图片,也不至于把生活照片、博客照片都乱放在一起了。

上传方式

编辑器按钮上传

  1. 在编辑文章时,点击”上传至兰空图床”按钮
  2. 选择需要上传的图片
  3. 图片上传成功后将自动插入到编辑器中

侧边栏上传

  1. 在文章编辑页面右侧的”兰空图床上传”面板中点击上传区域
  2. 选择需要上传的图片
  3. 上传成功后会显示图片链接,点击链接可复制到剪贴板

粘贴上传

  1. 复制图片到剪贴板(如截图、从其他地方复制的图片)
  2. 在WordPress编辑器中按 Ctrl+V(Mac为 Cmd+V)粘贴
  3. 图片会自动上传到兰空图床并插入到编辑器中
  4. 支持经典编辑器、TinyMCE编辑器和Gutenberg古腾堡编辑器

我认为这款插件最大的亮点是上传方式多样,最为方便就是可以在编辑器里直接复制粘贴图片上传;另外就是后台可以设置不同相册,便于管理自己照片。

 

WordPress首页调用typecho教程(1.3.0版)

作者 老张
2026年6月4日 14:02

折腾永远都不会停的,2024年的时候,折腾《WordPress首页调用typecho方法!》,当时用的是 Restful 插件。前几天把typecho升级到了最新的1.3.0版,结果功能失效了。原因是Restful 插件直接报 Fatal Error,跟 1.3.0 完全不兼容了。作者也停更了,没办法只能换插件。找了一圈,发现了 Typecho-Api 这个插件(项目地址:https://github.com/Coder-Soder/Typecho-Api),功能够用,但问题来了——API 的返回格式跟 Restful 完全不一样,原来的代码全部要改。

这次折腾比上次久,前后花了大半天,主要踩了几个坑:

1.目录名大小写:Typecho 1.3.0 的自动加载器严格按类名找文件。插件类名是 Api_Action,自动加载器去找 /usr/plugins/Api/Action.php,但插件目录叫 api(小写),Linux 区分大小写,直接 500。改成 Api 就好了。

2.插件默认不返回完整正文和分类:Typecho-Api 插件的 getarticle 接口只返回截断的摘要(summary),不返回完整正文(text),也不返回文章分类(categories)。而我们要在 WordPress 提取文章图片和显示分类名,这两个字段缺一不可。所以必须手动改插件代码。

3.时区问题:API 返回的时间是北京时间字符串,WordPress 服务器如果是 UTC,用 strtotime() 直接解析会差 8 小时。加个 ‘ +0800’ 就搞定。

4.Markdown 图片:typecho 文章用 Markdown 写,图片是 ![alt](https:) 格式,不是 HTML 的 <img> 标签。原来只匹配 <img> 的正则根本抓不到图片,得两种格式都匹配。

下面直接上代码,一共四步。

第零步(重点!重点!重点!):修改 Typecho-Api 插件的 Action.php

这步不做,后面全部白搭。插件默认的 getarticle 接口只返回摘要不返回正文,也不返回分类。我们需要改两处。

找到 /usr/plugins/Api/Action.php(注意目录名大写 Api),搜索 getarticle,在那个方法里改两处:

第一处:加分类查询。 找到获取 tags 的代码:

$tagQuery = $db->select('name')->from($prefix . 'metas')
    ->join($prefix . 'relationships', $prefix . 'relationships.mid = ' . $prefix . 'metas.mid')
    ->where($prefix . 'relationships.cid = ?', $article['cid'])
    ->where('type = ?', 'tag');
$tags = $db->fetchAll($tagQuery);

在它下面加上这段:

$catQuery = $db->select('name')->from($prefix . 'metas')
    ->join($prefix . 'relationships', $prefix . 'relationships.mid = ' . $prefix . 'metas.mid')
    ->where($prefix . 'relationships.cid = ?', $article['cid'])
    ->where('type = ?', 'category');
$categories = $db->fetchAll($catQuery);

第二处:返回数据加上 categories 和 text。找到返回数据那堆:

$result[] = array(
    'cid' => $article['cid'],
    'title' => $article['title'],
    'slug' => $article['slug'],
    'created' => date('Y-m-d H:i:s', $article['created']),
    'authorId' => $article['authorId'],
    'tags' => array_column($tags, 'name'),
    'summary' => mb_substr(strip_tags($article['text']), 0, 200) . '...'
);

改成:

$result[] = array(
    'cid' => $article['cid'],
    'title' => $article['title'],
    'slug' => $article['slug'],
    'created' => date('Y-m-d H:i:s', $article['created']),
    'authorId' => $article['authorId'],
    'tags' => array_column($tags, 'name'),
    'categories' => array_column($categories, 'name'),
    'summary' => mb_substr(strip_tags($article['text']), 0, 200) . '...',
    'text' => $article['text']
);

就加了两行:`’categories’ => …` 和 `’text’ => …`。改完之后 API 就会返回完整正文和分类名了。

不想修改代码的,可以直接到我的仓库里自取吧:https://github.com/laozhangge/typecho-api

第一步:把下面的代码插入到主题文件的 index.php 合适位置。(代码和旧版相同)

<?php
$data = fetch_typecho_data();
if ($data):
?>
<div class="latest-update" style="background-color: #f8f8f8;">
<div class="latest-update-header">
<h2>最新动态</h2>
<span class="latest-update-time"><?php echo esc_html($data['time_content']); ?></span>
</div>
<div class="latest-update-divider"></div>
<div class="latest-update-content"><?php echo esc_html($data['content']); ?></div>
<div class="latest-update-images">
<?php foreach ($data['image_content'] as $img_url): ?>
<a href="<?php echo esc_url($img_url); ?>" data-lightbox="latest-update-gallery">
<img src="<?php echo esc_url($img_url); ?>" alt="Image">
</a>
<?php endforeach; ?>
</div>
<div class="latest-update-footer">
<span class="latest-update-tag"><?php echo esc_html($data['tag_content']); ?></span>
<a class="latest-update-link" href="<?php echo esc_url($data['link_content']); ?>" target="_blank">查看全文</a>
</div>
</div>
<?php endif; ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/js/lightbox-plus-jquery.min.js" defer></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.11.4/css/lightbox.min.css">

第二步:CSS 样式代码放到主题 CSS 定义设置里,或者直接放到 style.css 中。(代码和旧版相同)

/* 首页调用typecho样式 */
.latest-update {
width: calc(100% - 40px);
background-color: #f8f8f8;
border: 1px solid #ddd;
border-radius: 10px;
padding: 20px 20px 10px 20px;
margin: 20px 0;
text-align: left;
margin-top: -10px;
margin-bottom: 30px;
margin-right: 20px;
}
.latest-update-header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 10px;
}
.latest-update h2 {
font-size: 15px;
margin: 0;
padding-left: 0px;
}
.latest-update-time {
font-size: 14px;
color: #666;
margin-right: 0px;
}
.latest-update-divider {
border-bottom: 1px solid #333;
margin: 10px 0;
}
.latest-update-content {
text-align: left;
line-height: 1.5;
margin: 10px 0;
}
.latest-update-images {
text-align: left;
margin: 10px 0;
}
.latest-update-images img {
width: 100px;
height: 75px;
object-fit: cover;
border-radius: 8px;
box-shadow: 0 4px 10px rgba(0, 0, 0, 1);
margin: 3px;
transition: transform 0.3s, opacity 0.3s;
}
.latest-update-images img:hover {
transform: scale(1.1);
opacity: 0.9;
}
.latest-update-footer {
display: flex;
justify-content: space-between;
align-items: center;
margin-top: 10px;
padding-top: 10px;
border-top: 1px solid #ddd;
}
.latest-update-tag {
background-color: #e0e0e0;
border-radius: 5px;
padding: 5px 10px;
font-size: 14px;
}
.latest-update-link {
text-decoration: none;
color: #0073aa;
font-size: 14px;
}

第三步:把下面代码插入到主题 functions.php 文件中。


//-------首页调用typecho代码-----开始(适配 Typecho-Api 插件)
function fetch_typecho_data() {
    $api_url = "https://你的typecho地址/index.php/api?token=你的token&method=getarticle&page=1&pageSize=1";
    $response = wp_remote_get($api_url);
    if (is_wp_error($response)) {
        return;
    }
    $body = wp_remote_retrieve_body($response);
    $data = json_decode($body, true);

    if (empty($data['success']) || empty($data['data'])) {
        return;
    }

    $post = $data['data'][0];

    // 1. 链接内容
    $link_content = "https://你的typecho地址/archives/" . $post['cid'] . ".html";

    // 2. 分类内容
    $tag_content = !empty($post['categories']) ? $post['categories'][0] : "";

    // 3. 时间内容(+0800 北京时间校正)
    $created_time = strtotime($post['created'] . ' +0800');
    $current_time = time();
    $time_diff = $current_time - $created_time;

    if ($time_diff < 3600) {
        $time_content = floor($time_diff / 60) . "分钟前";
    } elseif ($time_diff < 86400) {
        $time_content = floor($time_diff / 3600) . "小时前";
    } elseif ($time_diff < 2592000) {
        $time_content = floor($time_diff / 86400) . "天前";
    } else {
        $time_content = date("Y年m月d日", $created_time);
    }

    // 4. 摘要内容(去掉Markdown图片语法和HTML标签后截取200字)
    $full_text = $post['text'];
    $clean_text = preg_replace('/!\[.*?\]\(.*?\)/', '', $full_text); // 去掉Markdown图片
    $plain_text = strip_tags($clean_text);
    $content = mb_strlen($plain_text, 'UTF-8') <= 200 ? $plain_text : mb_substr($plain_text, 0, 200, 'UTF-8') . "......";

    // 5. 图片内容(同时匹配HTML img标签和Markdown图片语法)
    $image_content = [];
    preg_match_all('/<img[^>]+src=["\']([^"\']+)["\']/', $full_text, $html_imgs);
    preg_match_all('/!\[.*?\]\(([^)]+)\)/', $full_text, $md_imgs);
    $image_content = array_filter(array_merge($html_imgs[1], $md_imgs[1]));

    return [
        'link_content' => $link_content,
        'tag_content' => $tag_content,
        'time_content' => $time_content,
        'content' => $content,
        'image_content' => $image_content
    ];
}


 

 

 

typecho兰空图床上传插件V2版

作者 老张
2026年5月31日 14:55

上个月白嫖了小米的模型,前几天又花了一块钱续了一个月,乘着这个机会,抓紧时间造token。这几天也算是“高产”了,折腾出了obsidian同步trilium插件、又在别人插件的基础上二次开发出来typecho兰空图床插件、obsidian兰空图床插件、wordpress兰空图床插件。今天先来介绍下typecho兰空图床上传插件V2版。为什么叫V2版,兰空图床有V1和V2版本之分,而该款插件兼容这两个版本,所以就直接用个大版本吧!

(感慨下,现在人人都是程序员了,我是一点代码都不会,完全指着AI,短短的两三天时间,就折腾出来几款插件)

项目地址:https://github.com/laozhangge/LskyPro-Typecho-V2

📋 功能介绍

该版本是在 isYangsyeying 版本基础之上进行了再次开发,新增了图片权限选择、存储策略选择、相册选择等功能,同时修复了其他 BUG。在这里需要特别感谢这两位大神的前期开发。

在该版本之前,我自己也单独让AI开发了该插件,功能是一样的,但是界面太丑,项目地址在https://github.com/laozhangge/LskyPro-for-Typecho 后来看到了yeyingt版,就借用了他的后台界面美化!

LskyProUpload 是一个 Typecho 插件,允许用户在文章/页面编辑器中直接粘贴图片,自动上传到兰空图床(Lsky Pro),并自动返回 Markdown、URL、HTML、BBCODE四种 格式的图片链接。

✨ 核心特性

  • 🎯 即粘即传 – Ctrl+V 粘贴截图,自动上传无需手动操作
  • 📝 自定义名称 – 上传前可输入自定义图片名称(支持直接回车使用默认名)
  • 📊 实时进度 – 显示上传进度条,实时反馈上传状态
  • 🔗 自动插入 – 上传完成后自动在粘贴位置插入 Markdown 等四种格式图片链接
  • 🔒 图片权限 – 支持设置图片公开/私有权限
  • 🗂 存储策略 – 支持选择兰空图床的存储策略
  • 📁 相册选择 – 支持选择上传到指定相册
  • 🎨 格式丰富 – 支持 Markdown、HTML、BBCode、URL 四种插入格式
  • ✅ 兼容性强 – 支持 CodeMirror 编辑器、textarea、contenteditable 等多种编辑器

🖼 插件预览

API 配置 & 图片权限设置:

API配置与图片权限

存储策略与插入格式

🚀 快速开始

1. 安装插件

  1. 下载本仓库,将目录重命名为 LskyProUpload
  1. 上传到 Typecho 的 usr/plugins/LskyProUpload/ 目录
  2. 登录 Typecho 后台 → 插件管理
  3. 找到 LskyProUpload Pro+ 插件,点击启用

2. 配置插件

启用插件后,点击设置按钮,填写以下信息:

基础配置

配置项 说明 示例
API 地址 兰空图床根域名(必填) https://lsky.pro
Token 兰空 API Token(必填) 从兰空图床后台获取
图片权限 图片公开或私有(必填) 公开 / 私有

 

获取 Token: 登录兰空图床后台 → 个人中心 → API,生成 Token 并复制粘贴到插件设置中。

存储策略 & 相册(可选)

配置项 说明
存储策略 下拉列表自动获取兰空图床的存储策略,留空使用默认策略
上传相册 下拉列表自动获取兰空图床的相册数据,留空不指定相册

 

使用方法:

  1. 先填写 API 地址和 Token
  2. 点击「测试连接」按钮验证配置
  3. 连接成功后,存储策略和相册下拉列表会自动加载可用选项
  4. 从下拉列表中选择需要的策略和相册

插入格式

支持四种插入格式,选择后下方会实时预览效果:

格式 示例 适用场景
Markdown ![图片](https://...) Markdown 编辑器通用
URL https://... 纯链接,自定义使用
HTML <img src="..." /> 富文本编辑器
BBCode [img]https://...[/img] 论坛编辑器

 

💡 使用方法

  1. 进入编辑页面 – 点击后台 撰写 → 新建文章或编辑已有文章
  2. 粘贴图片 – 在编辑器中点击要插入图片的位置,按 Ctrl+V(Windows)或 Cmd+V(Mac)粘贴截图
  3. 输入图片名称 – 弹出对话框,默认显示文件名(去除扩展名),可修改或直接按 Enter 使用默认名称
  4. 查看上传进度 – 显示上传进度条,实时显示上传百分比
  5. 自动插入链接 – 上传完成后自动在粘贴位置插入对应格式的图片链接

📊 系统要求

项目 要求
Typecho 版本 1.2.0+
PHP 版本 7.0+
浏览器 Chrome、Firefox、Safari、Edge(最新版本)
兰空图床 2.0+ 版本

 

🔒 安全性说明

  • ✅ Token 不在前端传输,后端认证
  • ✅ 文件格式严格校验,仅允许图片文件
  • ✅ 所有操作都在后台进行,避免直接暴露 API

📝 更新日志

v2.0.0

  • 🔧 修复 Typecho 1.2.0 版本以上报错问题
  • ✨ 新增图片权限选择(公开/私有)
  • ✨ 新增存储策略选择(下拉列表自动获取)
  • ✨ 新增相册选择(下拉列表自动获取)
  • 🚀 基于 isYangs 和 yeying 版本进行再次开发优化

 

[推广]酷鸭数据 · 520情人节特别活动机来啦!

作者 老张
2026年5月19日 23:18

🦆 酷鸭数据 · 520情人节特别活动机来啦!

🎯 活动截止:6月1日 · 错过不再有!

💝 这次活动有点猛!

趁 5·20 中国情人节,酷鸭直接上了一波 香港 CN2 活动机,配置给到位,价格也砍到底


项目详情

🇭🇰 节点香港 CN2(三网优化)

💻 CPU2核

🧠 内存2G → 活动期间免费升4G!

💾 硬盘100G

📶 带宽10M CN2

💰 月付19.9元

💰 年付199元

⚠ 重要: 内存升4G的福利仅限 6月1日前下单 的用户,名额有限,先到先得!


🎁 再送你一个!CDN 也白嫖!

下单就送 酷鸭官方 CDN,这波是认真的:

CDN 福利详情

🌐 节点7个香港节点(多线路负载,覆盖全港主流运营商)

📊 每月流量500G

⚡ 宽带100M

🔗 CDN地址https://cdn.aote.io

> 7个香港节点意味着——不管你的用户是电信、联通还是移动,都能找到最优接入点,延迟更低,体验更稳。
> 相当于买机器送加速流量,流量不够用?加购也便宜。这配套在同价位机器里几乎是独一份。


🌍 香港 CN2 适合做什么?

🖥 个人博客 / 技术站

🛒 跨境电商独立站(免备案真的香)

📱 App 后端 / 小程序后端

🎮 游戏试点服

🧪 学习实验环境(练手不心疼)

🔐 免备案 · 买了就能用

备案这件事,懂的都懂——材料打回、时间拉长、心态爆炸。

用酷鸭香港节点:域名解析完,5分钟上线,免备案这件事,用过就回不去了。


💰 为什么说这次活动值得冲?

199/年 — 市场上同配置香港 CN2,这个价格基本是抄底价

免费升4G内存 — 相当于白送一半配置,6月1日前有效

送CDN — 7个香港节点+500G流量+100M宽带,光CDN这部分市价也得好几十

三网优化 — 电信/联通/移动都吃得开,不是单线机的体验

一句话:这波活动,机器+CDN 打包给你,性价比直接拉满。


⚠ 再次提醒!
活动截止日期:2026年6月1日
免费升4G内存:仅限6月1日前下单用户
名额有限,早买早享受!👉 直接点我购买活动机


📋 常规套餐也有
不满足于活动机的朋友,酷鸭还有新加坡、日本、台湾、韩国、越南等多节点可选,配置丰俭由人,详情戳:

👉 https://www.kooya.vip/servers/buy

🎁 老张专属推广链接

🎁 我的专属推广域名: https://kooya.vip

💡 通过我的链接注册的朋友,都是我的 VIP 客户,后期有小福利!

有问题也可以找我,或者直接问酷鸭客服,报”老张推荐” ok的 😄

 

 

我只会瞎折腾!暨兰空图床上传图片失败解决方法!

作者 老张
2026年4月28日 22:11


我给自己定义“瞎折腾”应该很多次了!每次折腾完一件事之后,才会把整个折腾的过程撸一撸思路,这才会发现绕了太多太多的弯路而浪费了太多太多的时间。讲一讲这次我又是怎么样瞎折腾兰空图床上传失败的吧!

应该是大前天,我写老张随笔里需要上传一张图片到图床,传了N次都不行,要知道之前上传都是正常的,换了其他的存储方式也上传不了!好了,下面就是我的“骚操作”,开始了我的“瞎折腾”之路了!

瞎折腾之一:重置消息队列

兰空图床我是普通方式安装,在生成缩略图、图片处理以及发送邮件等等功能中,这些耗时任务都需要使用消息队列来执行,我们可以使用 php artisan queue:work 命令来运行消息队列。这块我是删了加、加了删,折腾了N次。

结果是可想而知的!图片上传还是失败!

瞎折腾之二:降级数据库

为了能跟上“潮流”,我在3月20号的时候,把数据库mysql从5.7版本升到了8.0的,升级之后所有网站运行正常。期间在4月10号的时候还正常的上传过图片到图床。但是,自己的脑子还是跑气,还是把数据库给降级了。这次降级没有直接整体降级,而是给兰空图床单独配置了一个docker部署的Mysql5.7版。这次折腾docker部署的Mysql5.7版也是搞了半天的时间,Docker版的mysql部署好后,导入数据又是个问题了,又安装Navicat,远程到Docker版的mysql数据库,才把数据给恢复了!

结果是可想而知的!图片上传还是失败!

瞎折腾之三:删站重建

脑子跑气上头了!折腾起来不经大脑了!把数据库备份下,把网站、数据库重部删掉,下载网站源文件,从0开始安装,在用全新数据库的情况下再次测试图片上传,结果,结果,还是失败!把数据库恢复后再次测试,结果,结果还是失败。

瞎折腾之四:网站搬家

人如果脑子一根筋了,谁劝也没有用,何况还没有人劝呢!在我的甲骨文破西上也是从0开始安装了兰空图床,上传图片成功!把数据库恢复,上传图片成功!

最终折腾:回到起点!

虽然把网站搬到甲骨文后上传图片正常了,但是甲骨文破西只是本时瞎折腾东西用的,放网站速度还是慢的。那只能再回来起点!

这次折腾,真的是静下心来了,想着,之前上传图片是正常的,而某个时间上传不成功,而网站环境、配置什么的又都没有修改过,那问题出在哪里了?请出我的“小张”,把网站日志交给小张分析,再把网站目录下的/storage/logs日志进行了分析,最终导致图片上传失败的原因找到了,想都不敢想!是服务器时间与标准时间不一致导致的上传失败!

日志分析得很清楚了,核心问题就是 服务器时间不对:
错误:RequestTimeTooSkewed

RequestTime: 20260421T084333Z (请求发起时间: 08:43:33 UTC)
ServerTime: 2026-04-21T08:26:19Z (服务器认为的时间: 08:26:19 UTC)
MaxAllowedSkew: 900000ms (15分钟)

两者相差约 17分钟,超过了 AWS S3 允许的 15 分钟偏差,所以 S3 拒绝了上传,返回 403 Forbidden。

解决方法:同步服务器时间
bash
查看当前服务器时间
date -u

同步 NTP 时间
timedatectl set-ntp true

或者手动安装 ntpdate 同步
ntpdate -b pool.ntp.org

同步完之后再上传就好了。

这个坑确实比较隐蔽——应用日志会报 403 Forbidden,但真正原因藏在 AWS 返回的 XML 错误信息里,提示 RequestTimeTooSkewed,指向时间偏差问题。

想不到是服务器时间与标准时间不一致,超过了S3的允许范围15分钟而导致拒绝上传!

总结:

唉,瞎折腾!瞎折腾!自己一直在瞎折腾!遇到问题不先理清思路,上去就是一通瞎折腾!结果是浪费了精力浪费了时间!就这件事而言,如果事前可以静下来,理理思路,根本就不会浪费这么多时间和精力!唉!以后遇事,还是得要先“想静静”吧!

 

 

 

再也不会去的“窑湾古镇”

作者 老张
2026年4月21日 21:26

书接上回,清明节的时候一家去临沂玩了两天,头天去玩了《体验不佳的琅琊古城!》,晚上住在临沂市区的中维荣华大酒店,价格不贵环境也不错。半天时间把琅琊古城给逛完了,回到宾馆九点多,来临沂,那临沂炒鸡怎么能不吃呢,但是又怕被宰,所有从美团上找的“临师傅炒鸡”,离宾馆不远,步行十几分钟。点了186块钱的套餐,有临沂炒鸡另外配了四个菜,一家四口没有吃完。临沂炒鸡是真的好吃,在我们这里从来没有吃过这么好吃的炒鸡。

第二天早上睡到七点,到楼下酒店的自助餐厅吃了饭,这家早餐真的是非常的丰富,临沂炒鸡、蒙山全羊汤都有,但是味道差那么点意思。按我的计划,早饭后返程,顺路去马陵山玩的,但是老婆和孩子都不想去爬山,只得选择了“窑湾古镇”。

听同事说过窑湾古镇是免费的,但是到了地方却收了60块钱每人的门票钱,说是这两年才开始收的。好吧,收就收吧,只要好玩就行。哪不知!!

窑湾古镇不大,我们从十一点入门到出来,一共是花了一个半小时,全都是像上图那样的商业街。商铺里都是卖一些常规的小玩意,一点点新意都没有。如果说窑湾古镇的门票是60块钱的话,那南京夫子庙要收费的话,门票至少得要四五百块钱了。

唯一有点“新意”的就是这些油炸河鲜了,靠山吃山靠水吃水,在其他景区这类油炸河鲜还是不常见。买了一份油炸小河蟹15块钱,味道非常的我噻!好吃!

这座界碑楼应该是窑湾标识性的建筑了,建在宿州和邳州的交界处,有界牌详细介绍。

特别要吐槽的就是,不少小院门口标注了“窑湾必逛”的标识,像什么山西会馆、吴家大院,进去一看,真的只是“院”,里面空空荡荡什么也没有。

窑湾古镇,真的没有“古”的地方!只是逛逛商业小商铺罢了!

 

困扰许久的网络问题终于解决了!

作者 老张
2026年4月16日 10:41

我的办公电脑安装是三网口的网卡,一网口连接外网,而另外两个网口给虚拟机使用,用来连接内网。这样的好处是遇到紧急的情况可以不需要再跑到办全室来办公,可以在家里直接远程办公室电脑而达到连接内网的效果。

系统安装好到目前为止已经使用快五年时间了,也不知道从何时起,经常遇到QQ、微信可以正常使用,而网页打不开的情况。这样情况是电脑开机后,网页可以打开,不知道什么时候,网页打不开了,可能再过个把小时十几分钟,网页又可以正常打开了,反反复复。QQ微信正常可以连网,而网页打不开,正常的解决模式都是DNS或是问题题,因为QQ微信是用的直接IP连接,不依赖DNS默认网关。而浏览器则需要依赖于DNS,所以就会遇到”打不开网页,但是聊天却正常的情况”。

是的,可能大家都是这么认为的,我也是这样认为的,所以当出现这样的问题后,就一直在折腾着DNS和网关。不管是手动设置IP、网关、dns还是自动获取,问题依然会存在。后来通过度娘了解,下载了”360断网工具箱”,每次遇到网页打不开的情况就用”360断网工具箱”来进行修复,每次360断网工具箱检测的结果都是”HOSTS异常”,但是,并不是每次都可以修复成功。这个问题一直困扰我许久许久,估计至少有一年多时间。

后来kimi、豆包、deepseek出来后,也向这几位AI请教过,得到的答案和百度出来的结果差不多,都是DNS问题。没办法,将就着用吧,所以”360断网工具箱”是我每天打开次数最多的软件。

openclaw我都部署了两三个月了,我给我的openclaw起名叫”小张”,虽然”小张”是个犟种,但是还是给我解决了很多问题。之所以没有让”小张”帮我解决这个网络问题,我是想着连kimi、豆包、deepseek都解决不了,那”小张”也就解决不了吧!今天报着试试的心态,让”小张”解决来,结果三行命令找到问题的根源,三行代码解决问题。

我提出的问题是:我的电脑安装三个网卡,其中一个连接外网,另外两个分配给虚拟机连接内网使用,都是自动获取IP地址。QQ和微信可以正常使用,但是经常打开不了网页。

而”小张”经过初步判断就找到了问题的根源:

根据你描述的情况,我初步判断是多网卡路由优先级问题:

QQ/微信用的是直接 IP 连接,不依赖 DNS 和默认网关,所以还能用

浏览器依赖 DNS 和默认路由,路由冲突时就会”打不开网页但聊天正常”

把命令结果发我,我帮你具体分析是哪个网卡的路由优先级出了问题,以及怎么修。

第一步:打开命令提示符(CMD)
按 Win + R,输入 cmd,回车

第二步:逐条执行以下命令,后,把结果反馈给”小张”

ipconfig /all
route print
netsh interface show interface

具体命令运行结果就不贴出来了,就直接贴出”小张”的分析报告吧!

找到根本原因了!路由表有严重问题。问题确认:三条等优先级默认路由

三个默认网关 metric 完全相同(都是35),Windows 会在这三条路之间负载均衡。问题在于:

192.168.1.1 和 192.168.2.1 是内网 VM 的网关,不走公网

你大约 1/3 的公网流量会走到这两个内网网关,导致网页打不开

QQ/微信部分流量碰巧走了 Tailscale(metric 5,优先级极高)或正确的外网网卡,所以能通

修复方案:把外网网卡(以太网/Realtek)的 metric 调低,让它优先。

netsh interface ipv4 set interface "以太网" metric=20
netsh interface ipv4 set interface "以太网 2" metric=50
netsh interface ipv4 set interface "以太网 3" metric=50

在win界面个修改方法是:控制面板 → 网络和共享中心 → 更改适配器设置;然后:右键点击对应的网卡(以太网/以太网 2/以太网 3)→ 属性;双击 Internet 协议版本 4 (TCP/IPv4);点击 高级去掉 “自动跃点” 的勾,输入自定义跃点数;确认一路确定。(跃点数数字越小超优先)

提到”接口跃点数”,我很确定的说,我在做系统的时候设置过,绝对设置过,保证设置过,但是后来不知道什么原因跃点数变成自动获取变成一样的了。出现问题也没有去想”接口跃点数”而一直在折腾DNS。

唉,困扰一年多的问题终于解决了!还是有”小张”好。

其实,这个问题如果静下心来仔细思考的话,应该可以轻松解决,但是却陷入了”常规思维”!现实中很多事情都是这样,明明问题很简单,却跳不出”常规”!

 

体验不佳的琅琊古城!

作者 老张
2026年4月8日 21:59

提到琅琊古城,不少人可能认为是安徽滁州的琅琊山,其实琅琊古城坐落在山东的临沂,“纯人工”打造的旅游景点。

今年我们江苏第一次放春假,和清明连在一起也就是6天的假期。儿子高中不放春假,所以我们家的出游计划便安排在的清明期间了。

4月4号早上睡到六点半,也算是自然醒了,洗漱后到一家四口整理好东西开车到外面吃了点早饭,七点半出发,两个半小时到达临沂的中维荣华大酒店。外出游玩住酒店,我一般会选择连锁酒店或是当地比较有名一点的酒店,这样基本上不会踩坑。

这家酒店虽然还是十几年前装修的风格,但是档次还是非常不错,价格也不是太贵,亲子套房也才是五六百一晚还包含第二天的早餐。特别是第二天的自助早餐,品种是相当的丰富,连临沂炒鸡、蒙山羊杂汤都有。

中午酒店外面随便应付了一口,吃了我认为最最为难吃的酸笋炒鸭掌。鸭掌上面的厚皮都没有去掉!一盆菜,基本上没有动筷子。

下午一点到达琅琊古城,周边的配套还是不完善的,车停在东门对面的一个大院子里,车一过那个灰呀!

从宣传上可以知道,琅琊古城是座“演艺之城”,除了游玩之后就是看演出。但是必须要吐槽的地方就是在景区入口的服务台并没有找到当天的节目演出时间单,也可能清明假期人太多把节目单拿完了。三个大的演出有两个是收费的《国秀琅琊》和《国士捍山河》,我们选择的是《国秀琅琊》的套票,而《火秀》是免费的,但是也得要扫码预约。

更要吐槽的地方是公众号上小的演出时间和现场显示屏的时间对应不上去,可能是公众号内容长时间没有更新。所以想看小的演出只能是靠运气去“撞”。一块舞台周边坐满了人,等着演出,结果演出时间都过了二十来分钟了也没有见表演的人来,问了保安才知道根本就没有演出。

尝了下山东有名的“煎饼卷大葱,其实也就和我们这的卷饼一样,只不过是多包了一段大葱在里面。

不得不说《国秀琅琊》的室内演出真的很震撼!舞台效果是超级的棒,所以不少人称是全国室内演出的天花板。

而免费的《火秀》演出我们就没有看到着,我们赶到火秀表演场地再预约,只有晚上近十一点的场次了,需要等的时间太长,放弃!

当然也有值得点赞的地方,景区里有不少这样的“暖心小站”,免费提供白开水、绿豆茶、姜茶。每隔一段距离就有一个这样的暖心小站,为很多老人、幼儿提供了方便。

总体来说,如果来琅琊古城想纯游玩,真的不值得来,都是“纯人工”打造的,真的没有什么看头,值得看的也就是大大小小的演出。而想看这些演出,那来之前必须要做好功课,把每场演出时间把握好,能做到边游玩边看演出,这样才算是完美!

WordPress反向代理后,获取不到访客真实IP的解决方法!

作者 老张
2026年4月4日 01:18

按目前《目前老张博客服务器搭配方案!》,把老张博客还是搬回了CloudCone。酷鸭数据香港这台VPS,因为线路好配置也高,只放个小博客有点性能过剩了,准备把openclaw安装上去,让我的“小张”搞一些项目!如果手里没有好性能、好线路的机器,酷鸭数据真的是不错的选择!

目前老张博客的服务器搭配是:访客 → 瓦工 Megabox(1panel 反代+WAF) → CloudCone(宝塔+WordPress),也就是在前天,有垃圾评论我准备拉黑IP地址的时候才发现,这个家伙的IP显示是我的瓦工 Megabox地址。出现这样的问题有两种可能,一是瓦工Megabox反代时没有把真实 IP 传递给 CloudCone,二是瓦工Megabox传递了真实IP但是 CloudCone 端的 WordPress 没有正确读取这真实IP。

在 1panel 反代配置中添加 Headers

在瓦工Megabox的 1panel 中,找到你的反向代理配置,添加以下 headers,具体步骤如下,并添加以下代码。注意,检查下,如果代码已存在,就不要再加了!经过检查,1panel的反向代理配置已经很完善了!

proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;

 

修改WordPress配置

经过第一步后,发现wordpress还是没有能正确的获取到访客的真实IP。我又检查到我的“老张随笔”是可以正确获取的访客真实IP的。那问题就是出在WordPress的配置上了。打开WordPress根目录下的 wp-config.php,在 <?php 之后第一行添加下面的代码

// 获取真实 IP(反代场景)
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip_list = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = trim($ip_list[0]);
} elseif (isset($_SERVER['HTTP_X_REAL_IP'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_REAL_IP'];
}

OK了,至此,WordPress就可以获取到访客的真实IP了!你学废了吗!

 

 

 

 

 

 

❌
❌