<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><atom:link href="https://www.mhcf.net/rss.php" rel="self" type="application/rss+xml" /><title>梦幻辰风</title><description>拾起散落的流年,珍惜有你的时光;以文字刻下逝去的韶华,用青春谱写寻梦的日子</description><link>https://www.mhcf.net/</link><language>zh-cn</language><generator>Emlog</generator><pubDate>Wed, 13 May 2026 05:19:27 +0800</pubDate><item><title>12年·相信相信的力量</title><link>https://www.mhcf.net/post-1207.html</link><description><![CDATA[<p>
	2月10日，北方小年。
</p>
<p>
	那天，正值加班。恰逢没有联网的电脑，也就没有为所有关注这里的朋友、为梦幻辰风、为自己去撰写一点文字聊以纪念。
</p>
<p>
	在十五天后，正值寻梦启航十二年，我想，该为一路走来从未放弃的我们，写点什么。
</p>
<p>
	<img src="https://www.mhcf.net/content/uploadfile/202602/7d951771946196.webp" alt="封面图" />
</p>
<hr />
<p>
	一直说，为梦想而前行。可随着工作越久，这句话便提得越少。我一直在寻找自己未来的方向，从象牙塔走入大山深处，又在贵人的帮助下从大山深处辗转走出。随着将自己的工作真正与文字绑定，为自己所撰写的、为生活所描摹的、为灵魂所刻画的，都与头发一样，日渐稀少。
</p>
<p>
	但不可置否的是，这两年与文字相伴，不论主动或被动，接触的、学习的、了解到、知晓的比起以往更加广、多、深、全了。至少，对于这个我曾经成长过、行走过、暂住过的县城，我也许可能短暂的了解了它的未来。而它的未来，或在一点一点的积攒之中，逐渐精彩。
</p>
<p>
	从工作回到生活，婚后的日子平凡与幸福相伴、恩爱与岁月厮守。小呆瓜的工作一直与忙碌相随，在岗位来回变动之中，虽然工资没高，但离家近了几分。不过遗憾的是，好像更加忙碌了了。
</p>
<p>
	在家的日子里，我们或开车出去溜达，或缩在一起打着游戏，或撸着狗蛋。当我在加班的时候，家里永远有一盏由她为我点亮的灯。
</p>
<p>
	她说，怕黑。于是将灯开着，等我回来。
</p>
<p>
	凌晨三四点、五六点，当我走进家门口的时候，总会有一个温暖的拥抱。
</p>
<p>
	家里的狗蛋每天到了下班时间就蹲在门口静静等着，等待着我们的回来。
</p>
<p>
	于是，回家与陪伴，就成了生活的主旋律。
</p>
<p>
	为了回家迎来的温暖拥抱，为了回家迎来那一个躺在地上打滚的狗蛋（猫咪）。
</p>
<p>
	至此，心有牵挂，便继续启航。
</p>
<p>
	从生活走向网络世界，对我来说，二者的平衡早已经彻底打破。部落格与生活、兴趣与工作，终究还是用着闲暇的时间疗愈着自己。
</p>
<p>
	我打开梦幻辰风，看着近十年从未大变过的界面，熟悉又满足。看着来来往往的素未谋面的面孔，陌生的熟人彼此交流，挺好。在一个个孤岛之中我们彼此独行，但又在远方彼此交汇。或许终有一日见到，但更多的是隔着山海，各有各得精彩。
</p>
<p>
	曾经有一段时间用 <em>@戴眼镜的肥驴</em> 这个ID发布了几篇文章，后来想了想还是换回了自己的名字。可是对我来说，为自己写的时间与想法，是持续走低的。于是，我拉来了曾经的同事、现在的好友 <em>@单湘莱</em> 在这里撰写着与我有着共鸣的文字。不过遗憾的是，他是男的，不是我媳妇。
</p>
<hr />
<p>
	新的一年，新的征程。
</p>
<p>
	对于我来说，是以生命为笔，日月为墨，在岁月长河之中，描摹我所见证的光影。
</p>
<p>
	工作与生活交织，爱情与未来相守，遥望前方，步步前行。
</p>
<p>
	似乎一切在改变、在成长，我一直记着有人说期待看到我工作、结婚之后的生活。可不知为何，每每打开梦幻辰风，却不知道该去写点什么。我渐渐习惯和喜欢上观察，但却并不喜欢记录。我倔强的用记忆去描摹，但在长河的冲刷之中，一切都慢慢暗淡。
</p>
<p>
	可，点点星光，却从未缺席。我追随星光而去，却发觉是十多年前自己在这里雕刻的“梦”。
</p>
<p>
	然后，相信未来会有好事发生。
</p>
<p>
	……
</p>
<p>
	后来，我忘记了。但是不知道为什么，我一直坚持着，坚持着跨越山海、走过长城，时至今日，依然不曾忘记。
</p>
<p>
	不曾忘记相信。
</p>
<p>
	我相信于未来的美好，我相信于梦想的力量，我相信于爱情的坚守，我相信于生活的精彩……
</p>
<p>
	我相信，相信的力量。
</p>
<p>
	感谢，我们都还在。或许未来更多的文字将会是 <em>@单湘莱</em> 或者其他的朋友在这里撰写，但是并不影响，这里，永远是一个空岛。
</p>
<p>
	躲藏在岁月长河之外，静谧守候着梦想。
</p>
<p>
	12年，你好。
</p><p>欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读！</p><p><img src="https://www.mhcf.net/content/rss_copy_right.png" alt="版权信息"></p>]]></description><pubDate>Wed, 25 Feb 2026 00:00:00 +0800</pubDate><author>姜辰先生</author><guid isPermaLink="true">https://www.mhcf.net/post-1207.html</guid></item><item><title>贰零贰伍：用文字与时间赋予未来与成长</title><link>https://www.mhcf.net/post-1206.html</link><description><![CDATA[<p>
	<img src="https://www.mhcf.net/content/uploadfile/202601/8a411768209336.webp" alt="封面图" />
</p>
<p>
	在床上慢慢醒来，打开手机，发觉2025已经是过往了。
</p>
<p>
	一年，眨眼间便已经是过去了。
</p>
<p>
	姜辰说，希望我分享一下一年来的故事。可我沉思许久，却不知道如何提起。我如同老太太生柴火一般慢慢堆砌的文字，却不知道何时会着起火焰，吹散这一切浓烟。
</p>
<p>
	2024年开始正式通过文字工作养家糊口。对于以往来说，文字是赋予灵魂重量的说词，是典当时光的消遣。而自那以后，便成了谋生的工具。因为，工作所需；也因为，自身所选。
</p>
<p>
	曾与姜辰一起是同事，在各自成长路上都选择了不同但又相同的道路。从一个乡村到县城，踏上的征途迥然不同。
</p>
<p>
	初到公司，最初是折腾网络与计算机，在自行探索之中慢慢找到出发的奥义。而公司很大，除了网络还有办文办会、统筹协调的办公室。在大哥的鼓励与帮助之中，学会了许许多多。
</p>
<p>
	至少，文字为未来前行照亮了道路。在一篇又一篇的文字浇筑下，渐渐了解公司的业务，了解每一个领域工作的开展。同时，也慢慢向一位位前辈看齐与学习。
</p>
<p>
	2025年对于我来说，在公司加班到深夜的日子似乎不多，但是自己在家中去慢慢撰写一些材料，去学、去看一些文章，却成了一种莫名其妙的常态。就像鸭子浮在水面上，看起来什么事都没有，一切风清云淡。但实际上下面的脚掌一直在划拉着，心里在念叨着：“死腿，快蹬……”
</p>
<p>
	虽然鸭子永远都是浮在水面上，但若是有一天水流自天上冲下，也是有可能掀翻一切。而当那一切发生的时候，作为一只鸭子，要么选择游向远方，要么选择直达源头。
</p>
<p>
	所以，只能拼了命的努力前行。
</p>
<p>
	2025年，经历了许多。在与妻子携手并肩的路上，我们也将在2026年彻彻底底拥有完整的属于我们的房子和车子。虽然还款路漫长，但咬咬牙总是能过去。我们也曾想着要个孩子，但是彼此的身体都在恢复的路上，每每想说锻炼却总是感觉到乏力难以继续。
</p>
<p>
	于是，我两去健身房办了个卡。
</p>
<p>
	好像，办了月卡就会瘦。
</p>
<p>
	不重要，我俩开始去锻炼了。
</p>
<p>
	在折腾了一个小时后，我到楼下买了个柠檬水，老婆吃了个冰淇淋。冰雪蜜城的奶茶虽然一般，但是柠檬水是真的物美价廉。至少，解渴。
</p>
<p>
	……
</p>
<p>
	2025年，我也拾起了停滞近两年的阅读，在拼多多上买了本《他改变了中国》，在一周多的时间里，将这一本书慢慢看完。到最后最深的感悟，却依旧不知道是在哪看到的那位老者提到的一句：
</p>
<blockquote>
	<p>
		苟利国家生死以，岂因祸福避趋之。
	</p>
</blockquote>
<p>
	曾经喜欢电子阅读的我，在这一刻也选择在沙发上盘着腿去一页一页泛着书本。在指纹与纸张的摩擦之中，渐渐感受着过往的力量。而纸质书相对于电子版来说，有那么几分来自时间的厚重。最重要的是，我已经渐渐厌倦去寻找资源的日子了。
</p>
<p>
	是的，再也不是曾经可以随心所欲去找资源的时光了。
</p>
<p>
	于是，我又在拼多多买了本《毛泽东传》。
</p>
<p>
	……
</p>
<p>
	纸质书籍，在渐渐填满我的书架的同时，仿佛也在彰显着几分博学的意味。但是遗憾，心中笔墨不以书籍为重，人间重担不以心性为念。
</p>
<p>
	所以，到最后一切都没有如果，有的都是最好的选择。
</p>
<p>
	贰零贰伍在眨眼间已经是过去了。
</p>
<p>
	新的一年，总要有一点新的追求，新的道路。倘若只有在公司的八小时，失去了之外的一切，那么那八个小时的故事对于我们来说，太过于单薄。但比较遗憾的是，很多人的八个小时却未必是八个小时。甚至于，八个小时还不一定能够吃饱。
</p>
<p>
	不过，相信未来会更好。
</p>
<p>
	因为除了相信之外，再无其他选择。
</p>
<p>
	但不影响，贰零贰伍的岁月里，文字虽然单薄，但至少，还有记录。
</p>
<p>
	二零二六，希望一切会好。
</p><p>欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读！</p><p><img src="https://www.mhcf.net/content/rss_copy_right.png" alt="版权信息"></p>]]></description><pubDate>Mon, 12 Jan 2026 17:17:09 +0800</pubDate><author>单湘莱</author><guid isPermaLink="true">https://www.mhcf.net/post-1206.html</guid></item><item><title>让Emlog5.3.1支持到PHP8.4</title><link>https://www.mhcf.net/post-1205.html</link><description><![CDATA[<p>
	<img src="https://www.mhcf.net/content/uploadfile/202512/64de1765027948.webp" alt="封面图" /> 
</p>
<p>
	前些日子在 <code>破袜子</code> 中 <code>@大致</code> 提到 <code>让WordPress4.9在php8.2下正常运行。</code> 在不知不觉间，PHP已经支持到8.X了。
</p>
<p>
	好快，当初刚接触PHP时还是5.6。
</p>
<p>
	恰好周六，恰好服务器搬家。
</p>
<p>
	索性，在AI的帮助下，尝试让梦幻辰风这个运行在 <code>Emlog5.3.1</code> 版本的部落格，体验到php8的快乐。
</p>
<p>
	通过搜索，在 <code>一年又一年的博客</code> 中找到《Emlog 5.3.1 兼容 PHP 8.0 错误修复》这篇博文，甚至于我还看到今年5月我留下的留言：
</p>
<blockquote>
	<p>
		感谢大佬分享，我目前还是5.3.1，停留在PHP7.4，想着要不要到8.X的版本。
	</p>
</blockquote>
<p>
	不过博主没有回我，Ta的更新也停留在2022年2月。
</p>
<p>
	无妨，现在开始，结合 <code>一年又一年的博客</code> 的文章内容和我的操作日志，简单记录一下升级历史。
</p>
<p>
	<strong>首先：在2016年或2017年左右，梦幻辰风已经修改版本支持到PHP7.X。</strong> 
</p>
<p>
	所以，以下所有折腾，都是基于PHP7.0时的版本。而修改Emlog5.3.1支持PHP7.0，我是参考的 <code>星知苑</code> 的博文《PHP7下安装Emlog5.3.1》（注：在本文发布时，Ta的站点已经打不开了。）
</p>
<p>
	<strong>（注：以下内容好像是CSDN采集的 <code>星知苑</code> 博文，大致方法如下，如果造成影响，后果自负。）</strong> 
</p>
<p>
	1.修改<code>include/lib/option.php</code>，大概11行修改为mysqli
</p>
<pre><code>//即：默认MySQL连接方式，mysql或mysqli
const DEFAULT_MYSQLCONN = 'mysql';</code></pre>
<p>
	改为
</p>
<pre><code>const DEFAULT_MYSQLCONN = 'mysqli';
//默认链接方式改为mysqli</code></pre>
<p>
	2.修改<code>include/lib/database.php</code>，大概16行删除default：
</p>
<pre><code>case 'mysql':
default ://这边需要删除default：</code></pre>
<p>
	3.修改<code>include/lib/cache.php</code>，大概195行加大括号
</p>
<pre><code>$$row['option_name'] = $row['option_value'];</code></pre>
<p>
	改为
</p>
<pre><code>${$row['option_name']} = $row['option_value'];</code></pre>
<p>
	4.PHP版本最近更新的比较快，autoload自动加载函数会报错，function.base.php开头的__autoload函数修改如下
</p>
<pre><code>spl_autoload_register(function($class) {
$class = strtolower($class);
if (file_exists(EMLOG_ROOT . '/include/model/' . $class . '.php')) {
require_once(EMLOG_ROOT . '/include/model/' . $class . '.php');
} elseif (file_exists(EMLOG_ROOT . '/include/lib/' . $class . '.php')) {
require_once(EMLOG_ROOT . '/include/lib/' . $class . '.php');
} elseif (file_exists(EMLOG_ROOT . '/include/controller/' . $class . '.php')) {
require_once(EMLOG_ROOT . '/include/controller/' . $class . '.php');
} else {
emMsg($class . '加载失败。');
}
});</code></pre>
<p>
	5.对于部分插件写死了数据库链接方式，需要将 <code>$DB = MySql::getInstance();</code> 改为 <code>$DB = Database::getInstance();</code> 等等。
</p>
<p>
	通过上述的修改，Emlog5.3.1（也许）可以支持PHP7.X了。现在，我们将向PHP8进发。
</p>
<p>
	首先，在 <code>init.php</code> 的最开头调用 <code>error_reporting()</code> 设置了错误级别，要排错的话，需要把级别开到 <code>E_ALL</code> 。
</p>
<p>
	*以下方法来自 <code>一年又一年的博客</code> ：
</p>
<p>
	1.修改 <code>/include/lib/function.base.php</code> 文件：
</p>
<ul>
	<li>
		修改 <code>__autoload()</code> 函数：
	</li>
</ul>
<pre><code>//把 __autoload() 换为匿名函数，然后传给 spl_autoload_register 函数注册
// function __autoload($class) {
spl_autoload_register(function ($class) {
    $class = strtolower($class);
    if (file_exists(EMLOG_ROOT . '/include/model/' . $class . '.php')) {
        require_once(EMLOG_ROOT . '/include/model/' . $class . '.php');
    } elseif (file_exists(EMLOG_ROOT . '/include/lib/' . $class . '.php')) {
        require_once(EMLOG_ROOT . '/include/lib/' . $class . '.php');
    } elseif (file_exists(EMLOG_ROOT . '/include/controller/' . $class . '.php')) {
        require_once(EMLOG_ROOT . '/include/controller/' . $class . '.php');
    } else {
        emMsg($class . '加载失败。');
    }
});</code></pre>
<ul>
	<li>
		修补 <code>get_magic_quotes_gpc()</code> 函数
	</li>
</ul>
<p>
	在文件开头 function doStripslashes() {} 函数声明前，补充定义纯用于兼容的桩函数 get_magic_quotes_gpc()，恒返回 FALSE。
</p>
<pre><code>if (!function_exists('get_magic_quotes_gpc')) {
    function get_magic_quotes_gpc() {
        return false;
    }
}</code></pre>
<ul>
	<li>
		在 <code>in_array()</code> 前检查 NULL 值
	</li>
</ul>
<pre><code>//找到if (!@in_array($actionFunc, $emHooks[$hook])) ，将其修改为：
if (!@$emHooks[$hook] || !@in_array($actionFunc, $emHooks[$hook])) {</code></pre>
<p>
	2.更新 passwordhash.php 密码函数库
</p>
<p>
	前往 <code>phpass</code> 官网下载最新版本的 <code>passwordhash.php</code> ，替换原本的 <code>/include/lib/passwordhash.php</code> 。
</p>
<p>
	现在，程序能跑了，但是会有一些小报错，如：
</p>
<pre><code>报错提示：Deprecated: Function get_magic_quotes_gpc() is deprecated in /www/include/lib/function.base.php on line 31</code></pre>
<p>
	需要修改 <code>include/lib/function.base.php</code> 文件，找到 <code>doStripslashes()</code> 函数，修改如下：
</p>
<pre><code>function doStripslashes() {
    // 删除对 get_magic_quotes_gpc() 的调用
    // 直接进行 stripslashesDeep 处理
    $_GET = stripslashesDeep($_GET);
    $_POST = stripslashesDeep($_POST);
    $_COOKIE = stripslashesDeep($_COOKIE);
    $_REQUEST = stripslashesDeep($_REQUEST);
}</code></pre>
<p>
	同时还需要修改 <code>stripslashesDeep()</code> 函数,修改如下：
</p>
<pre><code>function stripslashesDeep($value) {
    if (is_array($value)) {
        return array_map('stripslashesDeep', $value);
    } elseif (is_object($value)) {
        $vars = get_object_vars($value);
        foreach ($vars as $key =&gt; $data) {
            $value-&gt;{$key} = stripslashesDeep($data);
        }
        return $value;
    } else {
        // 添加对 null 值的检查
        return is_string($value) ? stripslashes($value) : $value;
    }
}</code></pre>
<p>
	同时，元宝AI提示我还有一个完整替代方案：在 <code>init.php</code>最前面添加全局处理。
</p>
<pre><code>// 替换 magic_quotes_gpc 功能
if (version_compare(PHP_VERSION, '7.4', '&gt;=')) {
    $process = [&amp;$_GET, &amp;$_POST, &amp;$_COOKIE, &amp;$_REQUEST];
    while (list($key, $val) = each($process)) {
        foreach ($val as $k =&gt; $v) {
            unset($process[$key][$k]);
            if (is_array($v)) {
                $process[$key][stripslashes($k)] = $v;
                $process[] = &amp;$process[$key][stripslashes($k)];
            } else {
                $process[$key][stripslashes($k)] = stripslashes($v);
            }
        }
    }
    unset($process);
}</code></pre>
<p>
	不过我没试，因为已经解决这个报错了。
</p>
<p>
	不过在网站头部出现了：<code>Notice: Undefined variable</code> 。我看了一下代码如下：
</p>
<pre><code>&lt;?php if ($logid): ?&gt;</code></pre>
<p>
	修改为：
</p>
<pre><code>&lt;?php if (isset($logid) &amp;&amp; $logid): ?&gt;</code></pre>
<p>
	即可。
</p>
<p>
	随后，新的报错：
</p>
<pre><code>Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/content/plugins/tpl_options/tpl_options.php on line 987</code></pre>
<p>
	这个是emlog5.3.1的插件：<strong>模板设置</strong>。
</p>
<p>
	打开 <code>tpl_options.php</code>第 987 行：
</p>
<pre><code>// 旧代码（已弃用）：
$values[$tag['tagname']] = "${tag['tagname']} (${tag['usenum']})";

// 新代码（推荐）：
$values[$tag['tagname']] = "{$tag['tagname']} ({$tag['usenum']})";</code></pre>
<p>
	完整修改后的函数：
</p>
<pre><code>/**
     * @param array $option
     * @return void
     */
    private function renderTag($option) {
        $tags = Cache::getInstance()-&gt;readCache('tags');
        $values = array();
        foreach ($tags as $tag) {
            // 修复 PHP 8.2 弃用的字符串插值语法
            $values[$tag['tagname']] = "{$tag['tagname']} ({$tag['usenum']})";
        }
        $option['values'] = $values;
        $this-&gt;renderCheckbox($option);
    }</code></pre>
<p>
	随后，新的报错：
</p>
<pre><code>Deprecated: Log_Model::getLogsForHome(): Optional parameter $condition declared before required parameter $perPageNum is implicitly treated as a required parameter in /www/include/model/log_model.php on line 184</code></pre>
<p>
	修改 <code>log_model.php</code>第 184 行的函数声明：
</p>
<pre><code>/**
 * 前台获取文章列表
 *
 * @param int $perPageNum
 * @param string $condition
 * @param int $page
 * @return array
 */
function getLogsForHome($perPageNum, $condition = '', $page = 1) {
    $timezone = Option::get('timezone');
    $start_limit = !empty($page) ? ($page - 1) * $perPageNum : 0;
    $limit = $perPageNum ? "LIMIT $start_limit, $perPageNum" : '';
    $sql = "SELECT * FROM " . DB_PREFIX . "blog WHERE type='blog' and hide='n' and checked='y' $condition $limit";
    $res = $this-&gt;db-&gt;query($sql);
    $logs = array();
    while ($row = $this-&gt;db-&gt;fetch_array($res)) {
        $row['date'] += $timezone * 3600;
        $row['log_title'] = htmlspecialchars(trim($row['title']));
        $row['log_url'] = Url::log($row['gid']);
        $row['logid'] = $row['gid'];
        $cookiePassword = isset($_COOKIE['em_logpwd_' . $row['gid']]) ? addslashes(trim($_COOKIE['em_logpwd_' . $row['gid']])) : '';
        if (!empty($row['password']) &amp;&amp; $cookiePassword != $row['password']) {
            $row['excerpt'] = '&lt;p&gt;[该文章已设置加密，请点击标题输入密码访问]&lt;/p&gt;';
        } else {
            if (!empty($row['excerpt'])) {
                $row['excerpt'] .= '';
                //$row['excerpt'] .= '&lt;p class="readmore"&gt;&lt;a href="' . Url::log($row['logid']) . '"&gt;阅读全文&gt;&gt;&lt;/a&gt;&lt;/p&gt;';
            }
        }
        $row['log_description'] = empty($row['excerpt']) ? breakLog($row['content'], $row['gid']) : $row['excerpt'];
        $row['attachment'] = '';
        $row['tag'] = '';
        $row['tbcount'] = 0;//兼容未删除引用的模板
        $logs[] = $row;
    }
    return $logs;
}</code></pre>
<p>
	然后需要搜索整个代码库，找到所有调用 <code>getLogsForHome</code>函数的地方，并调整参数顺序。
</p>
<p>
	参照如下：
</p>
<pre><code>// 旧调用方式：
$logs = $Log_Model-&gt;getLogsForHome('', $page, Option::get('index_lognum'));

// 新调用方式：
$logs = $Log_Model-&gt;getLogsForHome(Option::get('index_lognum'), '', $page);</code></pre>
<p>
	当然，我没这么干，因为太多了。
</p>
<p>
	我选择保持向后兼容，可以修改函数签名但不改变参数顺序：
</p>
<pre><code>/**
 * 前台获取文章列表
 *
 * @param string $condition
 * @param int $page
 * @param int|null $perPageNum
 * @return array
 */
function getLogsForHome($condition = '', $page = 1, $perPageNum = null) {
    // 如果 $perPageNum 为 null，使用默认值
    if ($perPageNum === null) {
        $perPageNum = Option::get('index_lognum') ?: 10;
    }

    $timezone = Option::get('timezone');
    $start_limit = !empty($page) ? ($page - 1) * $perPageNum : 0;
    $limit = $perPageNum ? "LIMIT $start_limit, $perPageNum" : '';
    $sql = "SELECT * FROM " . DB_PREFIX . "blog WHERE type='blog' and hide='n' and checked='y' $condition $limit";
    $res = $this-&gt;db-&gt;query($sql);
    $logs = array();
    while ($row = $this-&gt;db-&gt;fetch_array($res)) {
        $row['date'] += $timezone * 3600;
        $row['log_title'] = htmlspecialchars(trim($row['title']));
        $row['log_url'] = Url::log($row['gid']);
        $row['logid'] = $row['gid'];
        $cookiePassword = isset($_COOKIE['em_logpwd_' . $row['gid']]) ? addslashes(trim($_COOKIE['em_logpwd_' . $row['gid']])) : '';
        if (!empty($row['password']) &amp;&amp; $cookiePassword != $row['password']) {
            $row['excerpt'] = '&lt;p&gt;[该文章已设置加密，请点击标题输入密码访问]&lt;/p&gt;';
        } else {
            if (!empty($row['excerpt'])) {
                $row['excerpt'] .= '';
            }
        }
        $row['log_description'] = empty($row['excerpt']) ? breakLog($row['content'], $row['gid']) : $row['excerpt'];
        $row['attachment'] = '';
        $row['tag'] = '';
        $row['tbcount'] = 0;
        $logs[] = $row;
    }
    return $logs;
}</code></pre>
<p>
	反正没报错了。
</p>
<p>
	然后发现发邮件的插件 <code>kl_sendmail</code> 报错了，而且发送不了邮件。
</p>
<p>
	于是，更新 <code>PHPMailer</code> 的版本，直接更新到7.0.1，将src中所有的文件上传到该插件的目录的class文件中，修改 <code>kl_sendmail.php</code> 文件代码如下：
</p>
<pre><code>&lt;?php
/*
Plugin Name: Sendmail
Version: 3.8
Plugin URL: （链接已失效）
Description: 发送博客留言至E-mail。
Author: 作者：KLLER 
Author Email: kller@foxmail.com
Author URL: （链接已失效）
*/

!defined('EMLOG_ROOT') &amp;&amp; exit('access deined!');

// 使用命名空间引入PHPMailer类
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;

require_once(EMLOG_ROOT.'/content/plugins/kl_sendmail/class/PHPMailer.php');
require_once(EMLOG_ROOT.'/content/plugins/kl_sendmail/class/SMTP.php');
require_once(EMLOG_ROOT.'/content/plugins/kl_sendmail/class/Exception.php');

function UBB($content){
    $content=preg_replace('!【链接：(.*)】!uU',"&lt;br /&gt;&lt;a href="/jump.php?url=1" target="_blank" rel="nofollow"&gt;1&lt;/a&gt;&lt;br /&gt;",$content);
    $content=preg_replace('!【图片链接：(.*)】!uU',"",$content);
    $content=preg_replace('!【图片地址：(.*)】!uU',"",$content);
    $content=preg_replace('!【图片：(.*)】!uU',"",$content);
    $content=preg_replace("!【隐藏评论】([sS]*?)【/隐藏评论】!uU","（小声说）&lt;br /&gt;&lt;i&gt;1&lt;/i&gt;",$content);
    $content=preg_replace("!【隐藏内容】([sS]*?)【/隐藏内容】!uU","（小声说）&lt;br /&gt;&lt;i&gt;1&lt;/i&gt;",$content);
    $content=preg_replace("!【隐藏内容：([sS]*?)】!uU","（小声说）&lt;br /&gt;&lt;i&gt;1&lt;/i&gt;",$content);
    $content=preg_replace("!【隐藏信息：([sS]*?)】!uU","（小声说）&lt;br /&gt;&lt;i&gt;1&lt;/i&gt;",$content);
    $content=preg_replace("!【隐藏：([sS]*?)】!uU","（小声说）&lt;br /&gt;&lt;i&gt;1&lt;/i&gt;",$content);
    return $content;
}

function kl_sendmail_do($mailserver, $port, $mailuser, $mailpass, $mailto, $subject, $content, $fromname)
{
    try {
        $mail = new PHPMailer(true);

        // 字符设置
        $mail-&gt;CharSet = "UTF-8";
        $mail-&gt;Encoding = "base64";

        // 服务器设置
        if(KL_MAIL_SENDTYPE == 1) {
            $mail-&gt;isSMTP();
        } else {
            $mail-&gt;isMail();
        }

        $mail-&gt;Host = $mailserver;
        $mail-&gt;Port = $port;
        $mail-&gt;SMTPAuth = true;
        $mail-&gt;Username = $mailuser;
        $mail-&gt;Password = $mailpass;

        // SSL/TLS设置
        if($mailserver == 'smtp.gmail.com' || $mailserver == KL_MAIL_SMTP) {
            if($port == 465) {
                $mail-&gt;SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL
            } else {
                $mail-&gt;SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // TLS
            }
        }

        // 发件人
        $mail-&gt;setFrom($mailuser, $fromname);

        // 收件人
        $mail-&gt;addAddress($mailto);

        // 内容
        $mail-&gt;isHTML(true);
        $mail-&gt;Subject = $subject;
        $mail-&gt;Body = $content;
        $mail-&gt;AltBody = strip_tags($content); // 纯文本版本

        // 发送邮件
        $mail-&gt;send();
        return true;

    } catch (Exception $e) {
        error_log("邮件发送失败: " . $mail-&gt;ErrorInfo);
        return false;
    }
}

function kl_sendmail_get_comment_mail()
{
    include(EMLOG_ROOT.'/content/plugins/kl_sendmail/kl_sendmail_config.php');
    if(KL_IS_SEND_MAIL == 'Y' || KL_IS_REPLY_MAIL == 'Y')
    {
        $comname = isset($_POST['comname']) ? addslashes(trim($_POST['comname'])) : '';
        $comment = isset($_POST['comment']) ? addslashes(trim($_POST['comment'])) : '';
        $commail = isset($_POST['commail']) ? addslashes(trim($_POST['commail'])) : '';
        $comurl = isset($_POST['comurl']) ? addslashes(trim($_POST['comurl'])) : '';
        $gid = isset($_POST['gid']) ? intval($_POST['gid']) : (isset($_GET['gid']) ? intval($_GET['gid']) : -1);
        $pid = isset($_POST['pid']) ? intval($_POST['pid']) : 0;
        $http_referer = empty($_SERVER['HTTP_REFERER']) ? BLOG_URL : $_SERVER['HTTP_REFERER'];

        $blogname = Option::get('blogname');
        $Log_Model = new Log_Model();
        $logData = $Log_Model-&gt;getOneLogForHome($gid);
        $log_title = $logData['log_title'];
        $subject = "文章《{$log_title}》收到了新的评论";

        if(!empty($commail)){$commail = $commail;}else{$commail = '未填写';};
        if(!empty($comurl)){$comurl = $comurl;}else{$comurl = '未填写';};

        if(strpos(KL_MAIL_TOEMAIL, '@139.com') === false)
        {
            $content = '这里懒得弄了~';
        }else{
            $content = $comment;
        }

        if(KL_IS_SEND_MAIL == 'Y')
        {
            if(ROLE == 'visitor') kl_sendmail_do(KL_MAIL_SMTP, KL_MAIL_PORT, KL_MAIL_SENDEMAIL, KL_MAIL_PASSWORD, KL_MAIL_TOEMAIL, $subject, $content, $blogname);
        }

        if(KL_IS_REPLY_MAIL == 'Y')
        {
            if($pid &gt; 0)
            {
                $DB = Option::EMLOG_VERSION &gt;= '5.3.0' ? Database::getInstance() : MySql::getInstance();
                $Comment_Model = new Comment_Model();
                $pinfo = $Comment_Model-&gt;getOneComment($pid);
                if(!empty($pinfo['mail']))
                {
                    $subject = '您在梦幻辰风发表的评论收到了Ta的回复';
                    $content = '&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;&lt;div style="width:99%;"&gt;
    &lt;div style="padding:0 15px;color:#111;background-color:#F5FFFA;border:1px solid #d8e3e8;border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-khtml-border-radius:0 0 6px 6px;"&gt;
        &lt;p&gt;&lt;strong&gt;'.$pinfo['poster'].'&lt;/strong&gt;阁下，您之前在《'.$log_title.'》发表的评论：&lt;/p&gt;
        &lt;p style="padding:10px;background-color:#F0FFF0;"&gt;'.$pinfo['comment'].'&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;'.$comname.'&lt;/strong&gt; 给您的回复：&lt;/p&gt;
        &lt;p style="padding:10px;background-color:#F0F8FF;"&gt;'.$comment.'&lt;/p&gt;
        &lt;p&gt;您可以直接&lt;a href="'.Url::log($gid).'#'.$pid.'" target="_blank"&gt;点击这里查看原文&lt;/a&gt;，与'.$comname.'继续交流。&lt;/p&gt;
        &lt;p&gt;感谢您关注 梦幻辰风，本通知由自动信箱发出，请勿直接回复本邮件。&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;!-- 邮件版面格式来自挨踢路 --&gt;';
                    $content=UBB($content);
                    kl_sendmail_do(KL_MAIL_SMTP, KL_MAIL_PORT, KL_MAIL_SENDEMAIL, KL_MAIL_PASSWORD, $pinfo['mail'], $subject, $content, $blogname);
                }
            }
        }
    }else{
        return;
    }
}
addAction('comment_saved', 'kl_sendmail_get_comment_mail');

/*
* 微语模块 *
*/
function kl_sendmail_get_twitter_mail($r, $name, $date, $tid)
{
    include(EMLOG_ROOT.'/content/plugins/kl_sendmail/kl_sendmail_config.php');
    if(KL_IS_TWITTER_MAIL == 'Y')
    {
        $DB = Option::EMLOG_VERSION &gt;= '5.3.0' ? Database::getInstance() : MySql::getInstance();
        $blogname = Option::get('blogname');
        $sql = "select a.content, b.username from ".DB_PREFIX."twitter a left join ".DB_PREFIX."user b on b.uid=a.author where a.id={$tid}";
        $res = $DB-&gt;query($sql);
        $row = $DB-&gt;fetch_array($res);
        $author = $row['username'];
        $twitter = $row['content'];
        $subject = "{$author}发布的碎语收到了新的回复";
        if(strpos(KL_MAIL_TOEMAIL, '@139.com') === false)
        {
            $content = "{$author}发布的碎语：{$twitter}&lt;br /&gt;&lt;br /&gt;{$name}对碎语的回复：{$r}&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;=&gt; 现在就前往&lt;a href="{$_SERVER['HTTP_REFERER']}" target="_blank"&gt;碎语页面&lt;/a&gt;进行查看&lt;/strong&gt;&lt;br /&gt;";
            $content=UBB($content);
        }else{
            $content = $r;
        }
        if(ROLE == 'visitor') kl_sendmail_do(KL_MAIL_SMTP, KL_MAIL_PORT, KL_MAIL_SENDEMAIL, KL_MAIL_PASSWORD, KL_MAIL_TOEMAIL, $subject, $content, $blogname);
    }
}
addAction('reply_twitter', 'kl_sendmail_get_twitter_mail');

/*
* 回复评论 *
*/
function kl_sendmail_put_reply_mail($commentId, $reply)
{
    global $userData;
    include(EMLOG_ROOT.'/content/plugins/kl_sendmail/kl_sendmail_config.php');
    if(KL_IS_REPLY_MAIL == 'Y')
    {
        $DB = Option::EMLOG_VERSION &gt;= '5.3.0' ? Database::getInstance() : MySql::getInstance();
        $blogname = Option::get('blogname');
        $Comment_Model = new Comment_Model();
        $commentArray = $Comment_Model-&gt;getOneComment($commentId);
        extract($commentArray);
        $subject='您在梦幻辰风发表的评论收到了Ta的回复';
        if(strpos($mail, '@139.com') === false)
        {
            $emBlog = new Log_Model();
            $logData = $emBlog-&gt;getOneLogForHome($gid);
            $log_title = $logData['log_title'];
            $content =  '&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;&lt;div style="width:99%;"&gt;
    &lt;div style="padding:0 15px;color:#111;background-color:#F5FFFA;border:1px solid #d8e3e8;border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;-webkit-border-radius:0 0 6px 6px;-khtml-border-radius:0 0 6px 6px;"&gt;
        &lt;p&gt;&lt;strong&gt;'.$poster.'&lt;/strong&gt;阁下，您之前在《'.$log_title.'》发表的评论：&lt;/p&gt;
        &lt;p style="padding:10px;background-color:#F0FFF0;"&gt;'.$comment.'&lt;/p&gt;
        &lt;p&gt;&lt;strong&gt;'.$userData['username'].'&lt;/strong&gt; 给您的回复：&lt;/p&gt;
        &lt;p style="padding:10px;background-color:#F0F8FF;"&gt;'.$reply.'&lt;/p&gt;
        &lt;p&gt;您可以直接&lt;a href="'.Url::log($gid).'#'.$pid.'" target="_blank"&gt;点击这里查看原文&lt;/a&gt;，与'.$userData['username'].'继续交流。&lt;/p&gt;
        &lt;p&gt;感谢您关注 梦幻辰风，本通知由自动信箱发出，请勿直接回复本邮件。&lt;/p&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;!-- 邮件版面格式来自挨踢路 --&gt;';
            $content=UBB($content);
        }else{
            $content = $reply;
            $content=UBB($content);
        }
        if($mail != '')    kl_sendmail_do(KL_MAIL_SMTP, KL_MAIL_PORT, KL_MAIL_SENDEMAIL, KL_MAIL_PASSWORD, $mail, $subject, $content, $blogname);
    }else{
        return;
    }
}
addAction('comment_reply', 'kl_sendmail_put_reply_mail');

function kl_sendmail_menu()
{
    echo '&lt;div class="sidebarsubmenu" id="kl_sendmail"&gt;&lt;a href="./plugin.php?plugin=kl_sendmail"&gt;邮件设置&lt;/a&gt;&lt;/div&gt;';
}
addAction('adm_sidebar_ext', 'kl_sendmail_menu');
?&gt;</code></pre>
<p>
	完事。
</p>
<p>
	但是梦幻辰风邮件回复一直失败。
</p>
<p>
	结果发现是今年3月腾讯企业邮箱看我长时间没使用smtp功能，自己给我关了！
</p>
<p>
	……
</p>
<p>
	搞定。
</p>
<h4 id="2025-12-7-">
	2025年12月7日注：
</h4>
<p>
	可能是服务器性能原因，跑PHP8有点卡不愣登的。最后降成PHP7.4，结果反而更快乐了。
</p><p>欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读！</p><p><img src="https://www.mhcf.net/content/rss_copy_right.png" alt="版权信息"></p>]]></description><pubDate>Sat, 06 Dec 2025 21:34:01 +0800</pubDate><author>姜辰先生</author><guid isPermaLink="true">https://www.mhcf.net/post-1205.html</guid></item><item><title>应当为自己培养一个值得终生的爱好</title><link>https://www.mhcf.net/post-1203.html</link><description><![CDATA[<p>
	<img src="https://www.mhcf.net/content/uploadfile/202512/6fa31764563223.webp" alt="封面图" /> 
</p>
<p>
	去年9月，王教授说我应该培养一个终身性的爱好。
</p>
<p>
	只不过，他一直推荐我买个相机，走在拍摄风景与美女的路上的同时可以在摄影的世界里可以换一个角度观察世界。不过比较遗憾的是对我来说，优秀的相机价格十分昂贵，更何况王教授只赞助一个5元代金券，实在是买不起了。
</p>
<p>
	在一个月后，王教授分享了一个链接，《4000元起，这几款热门轻便相机……》。
</p>
<p>
	我点开看看，的确是4000元起，只不过实际上是6000元以上才能买到。一个月到手工资还不够买一个相机的我只能叹了口气开溜。
</p>
<p>
	2025年，1月，在奔向28岁高龄的路上，找到了一个很终身的爱好。
</p>
<p>
	——游戏机。
</p>
<p>
	于是，老婆出资，在switch2即将出售之际，买了一台日版switch。随后，原价买了《马里奥制造2》《双人成行》的数字版。（血亏，应该买卡带的，但是马造2的卡带难买。）
</p>
<p>
	至此，我似乎找到了周末除了加班以外打发时间的好玩意。
</p>
<p>
	我不喜欢出门，以前拍拍照片也是因为不想浪费收集的蔡司镜头，在把手机换成红米后，便不再喜欢拍照了。在这个熟悉的县城里，每天两点一线的生活早已经对一切见怪不怪，没有新奇的事情，在几乎拍过了光影的效果之后，拍照就成了可遇不可求的奢侈了。
</p>
<p>
	宅在家写作倒是不错，但是久坐腰疼的毛病实在是难受，而趴着去码字，仿佛是一种折磨了。所以，躺在沙发上玩游戏就成了最好的选择。
</p>
<p>
	许久以前，老婆陪我在iPad上玩和平精英，而后，我陪老婆一起玩王者荣耀。对于新入坑的我来说，专精一个英雄倒是成了最简单的方式。于是随着芈月战力的提高，便陷入了逆天匹配机制中的“牢”玩家能者多“牢”的局面。遗憾的是，老婆不愿意陪我一起玩了。
</p>
<p>
	可周末总要有除了加班之外的打发时间的方式。
</p>
<p>
	老婆说，一起做饭、一起收拾卫生。可我，更想要的是完整的放松与休息，就像将自己灵魂整个抛弃之后把肉体扔到营养液中泡着一样。
</p>
<p>
	原本，手机是一个很好排解方式。可惜遗憾的是手机刷久了，脖子会累，手机会累，对手机不太好。但是躺在沙发上，用着手柄玩游戏，倒是不错。——至少，手机不累。
</p>
<p>
	于是，在芈月的陪伴下，我只争取一个赛季点亮一个王者印记便好。
</p>
<p>
	而后，打开《马里奥制造2》，用UU加速器连接好网络，然后开启多人联机。在每一次胜负之中或功亏一篑，或侥幸取胜。在手柄中上苦练技巧，在单人图中不断尝试……于是，忙里偷闲不久，在到了B分段后，便停下了脚步。
</p>
<p>
	——主要是，合租的家庭组翻车了。
</p>
<p>
	随后，与天命人一起继续征战。但是魂系游戏对于高龄的我来说，有点反应不过来。开了风灵月影，大圣是完整了，我却没意思了。
</p>
<p>
	打开都市天际线，以猫猫的名字建造了一个城市，却在发展许久之后，因人口的老龄化大规模的人口死亡导致城市一夜赤字。至今仍然没有恢复元气。
</p>
<p>
	玩个不累的吧。
</p>
<p>
	买了一个星露谷物语的卡带。
</p>
<p>
	决定，种地。
</p>
<p>
	我可以伐树，我可以种地，我可以下矿，我可以和每一个人交朋友，我可以钓鱼……
</p>
<p>
	有意思了。
</p>
<p>
	游戏说，必须两点前睡觉。
</p>
<p>
	现实里，最好十二点就睡。
</p>
<p>
	……
</p>
<p>
	突然发觉，对于一个接近中年的男人来说，游戏好像是最廉价的爱好了。
</p>
<p>
	与没有爱好相比，游戏至少可以让人没有直接抑郁的风险。
</p>
<p>
	与钓鱼相比，至少没有早出晚归消失的风险
</p>
<p>
	与棋牌相比，至少没有金钱大规模缩水的风险。
</p>
<p>
	挺好。
</p>
<p>
	只不过，没有王教授那么拍着风花雪月的浪漫，没有姜辰用文字描摹的细腻。
</p>
<p>
	有的，只是老一辈人眼中的不务正业。
</p>
<p>
	但是呢，你总要有一个属于你一生的爱好不是吗？
</p>
<p>
	要不然，无趣的人生里，岂不是没有了一丝丝光亮。
</p><p>欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读！</p><p><img src="https://www.mhcf.net/content/rss_copy_right.png" alt="版权信息"></p>]]></description><pubDate>Tue, 02 Dec 2025 08:23:00 +0800</pubDate><author>单湘莱</author><guid isPermaLink="true">https://www.mhcf.net/post-1203.html</guid></item><item><title>没有落雪的冬日</title><link>https://www.mhcf.net/post-1204.html</link><description><![CDATA[<p>
	<img src="https://www.mhcf.net/content/uploadfile/202512/cbf51764561016.webp" alt="封面图" /> 
</p>
<p>
	从节气来算，已经入冬二十多天了。
</p>
<p>
	对于在西北边陲的我而言，却仿佛是第一次看到这个世界一般。在12月的第一天，竟然还没有在大地上看到沉积堆攒的雪。
</p>
<p>
	在入冬的前两日，天色阴沉，最后的秋风卷走了秋日里最后的余温。我正裹紧衣服在感慨雪地胎换得及时，却不知道在那一夜雨夹雪后，再没有了冬日的气息。
</p>
<p>
	很奇怪，在零上与零下徘徊的温度让每一个人感受到了冬日的温差。而看着湛蓝的天空，却找不到一丝丝落雪的痕迹。
</p>
<p>
	好像，该下雪了。但是奇怪的天气却没有一丝丝的下雪的迹象。
</p>
<p>
	甚至于，荒草都有了几分生机，流浪在外的野猫与家猫见面时，都不知道是不是该继续换毛了。
</p>
<p>
	于是，猫咪不知岁月，却也只能继续前行。家猫选择在家打滚卖萌，又或者高冷的蹭一下铲屎官的腿，毕竟在它的领地里，岁月静好。
</p>
<p>
	而户外的野猫，战栗的迎着寒风，用尾巴包裹着自己的小脚，为自己赋予属于自己的温暖。
</p>
<p>
	而徘徊于家与岗位的我们，在为着自己的一亩三分地忙碌，在为着一日三餐周旋。有人说这是人间烟火气，但却没有人说，没有落雪的冬日里，盖不住世间的泥泞，遮不住所有不平。
</p>
<p>
	在不同的发声之中，却也让人觉得啼笑皆非。有人说路修不到门口，却不知是曾经自己的“高人”所拦；有人说没有时间出去，又或者出去都是人，却恍然间发现，孩子们已经迎来了属于他们的假期。
</p>
<p>
	快乐的孩子们在阿勒泰地区迎来了与周末衔接起来有9天的雪假。在伊犁州则迎来了3天、5天的秋假。
</p>
<p>
	可惜，秋假、雪假虽好，但却与我无关。
</p>
<p>
	我行走在大街小巷，感受着萧瑟的寒风渗透进衣服之中，抚摸着我的每一寸皮肤，带走了为数不多的水分，让干燥的感觉涌上心头，在挠了挠之后，却发觉更痒了。
</p>
<p>
	而看看前路，在寒风的陪伴之中有几分冷，我裹紧冲锋衣。想将羽绒服套上，但是年轻人的执拗却让我咬着牙前行。
</p>
<p>
	看看过往，或在感慨风花雪月，又或者在感慨温水青蛙。可当有机会真正走出来去一点一点感受着整个世界时，却发觉曾经一切是那么渺小。
</p>
<p>
	最近网络舆情在不断地充斥着每一个信息茧房。我曾会戏谑调侃，而如今却只是静观其变。小说世界里需要讲逻辑，可是现实里却从未讲究过什么。
</p>
<p>
	就像，十二月的西北边陲之地，居然没有见到雪。
</p>
<p>
	在感慨了几句之后，我便继续撑开自己的平板，在obsidian之中，一点一滴记录着自己的时间。
</p>
<p>
	还好，才12月……初。
</p><p>欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读！</p><p><img src="https://www.mhcf.net/content/rss_copy_right.png" alt="版权信息"></p>]]></description><pubDate>Mon, 01 Dec 2025 11:48:05 +0800</pubDate><author>单湘莱</author><guid isPermaLink="true">https://www.mhcf.net/post-1204.html</guid></item></channel></rss>