2026-06-16 00:14:00

对于我的老婆来说,我是她在这里唯一的依靠。她的家人,要么远在陇东,要么远在京都。而工作对于她来说,在无数的繁琐之中,通过内耗还是最终短暂地压垮了她。
那天周六,加班。当中午我陪她吃过午饭后,她坐在车里,手不由自主的颤抖着,然后哭泣起来。在那一刻,她的情绪崩溃了。
因为什么?或许是无数次被否定工作,又或许是上下埋怨的内耗,又或许是慢慢丧失的自信……
在那一刻,风呼啸着从地面卷过,从车里出来的我,在风中站稳脚步,给她的领导打了个电话请了个假。随后,带着崩溃的她直奔医院,在心理科的检测中,她已经属于重度抑郁。
在附近酒店住下,我带着她走在陌生的城市,明明外面是艳阳高照,但却感觉到已被阴霾包裹。我拉着她的手,看着她的泪痕,心中只有表述不尽的心疼。
如今的我们,一个三十出头,一个年近三十。在即将生儿育女的年岁里,我们两人一猫,相伴相守。但这一刻,她在无尽的内耗之中,陷入了深渊之中。世间的一切都让她失去了快乐,曾经所有的喜好,都失去了光芒。
什么是光芒?是曾经与我翻山越岭笑靥如花的她,是曾经脸颊绯红浅浅笑意,是纯纯目光中溢出的爱……
此时,这一切仿佛都在转瞬间离去。
留下的,只有啜泣不停、几分呆滞的她。
……
有人说,离开源头就会慢慢治愈。
有人说,在这一刻需要的是陪伴。
有人说,需要走出内心里的纠结。
我不知道究竟需要的是什么,对我来说,情绪低落的岁月里,我以文字渡过那一段长河。在无尽的工作之中,在无尽的繁琐之中,我与心中自己,和解、相伴。
可是,面对爱人在这一刻的彷徨、无助,我无法将我自己剖开来,融入到她的点滴之中去。对我来说,只能尽我所能,给她撑起这片天空,予她温暖与光。
欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

2026-06-15 00:00:00

突然间发觉,今年是奔向29岁的年份。在人社小程序上测算的退休还远在2060年。突然间只想说,雄关漫道真如铁,而今迈步从头越。
但是更加神奇的是,曾经用笔描摹一切的自己,现在竟然更加的沉默寡言了。至少,在面对文字的时候,已经用沉默代替了一切。
许久之前,回到了自己出生的地方待了一天。但随着旧房子被彻底推平后,属于小学时代的记忆就只剩下了长满了草的院落。
……
一家人随着候鸟一般,夏日时分会在这里盘旋几天。而其余的日子里,这里便是一直荒着。于是,院落里的草已经有了半人的身高。母亲拔了两天,将离了土的枯草丢在了一旁。我与妻子到了之后,在等待吃饭的空隙,妻子戴上了手套,蹲坐在那里开始拔草。
她说,她闲不住。其实对于那个时候的她来说,拔草,更多是在焦虑的生活之中,赋予一分属于她的宁静。
那一刻,工作与她无关。只需要蹲在地上,戴好手套,一点一点去拔地上的杂草即可。
可惜,我呆不住。我的思绪永远都是杂乱无序,四处飘散。只有当我醉酒与睡着之后,方才会感觉到,我是我。
……
于是,我又走到曾经初中、高中时期住的房间,曾经陪伴自己的漫画已经让自己带到了属于自己的家中。而遗留的一本《漫画派对》,看着彩印与黑白交织的篇幅,仿佛又回到了过往。
那年,没有短视频。而在外上学的我,租住的房子里是没有电视的。除了学习之外的时光,便是靠着漫画与小说来填补。在天马行空的漫画与小说之中,为我去写、去想留下了未来的根基。
那一年,电视机直连的天线,搜不到那么多的频道,只能在几个本地台之中,挑选着动画片来填充自己的时间。而后终于有了卫星接收器,却依旧沉迷于“喜羊羊与灰太狼”的故事。哪怕已经十七八岁,却依旧如同少年。
可在恍惚之中,一切都已经是过往。当我再次看着这一切时,却发觉自己已经固定在工作岗位上,在电脑前看着苍白的文字,思绪在岁月长河之中被冲刷成水雾,在一切重新变得清明时分,便已然沉默。
终究,不再是当初的少年了。
曾说,永远的少年。
却不知,人已近中年。
欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

2026-02-25 00:00:00
2月10日,北方小年。
那天,正值加班。恰逢没有联网的电脑,也就没有为所有关注这里的朋友、为梦幻辰风、为自己去撰写一点文字聊以纪念。
在十五天后,正值寻梦启航十二年,我想,该为一路走来从未放弃的我们,写点什么。

一直说,为梦想而前行。可随着工作越久,这句话便提得越少。我一直在寻找自己未来的方向,从象牙塔走入大山深处,又在贵人的帮助下从大山深处辗转走出。随着将自己的工作真正与文字绑定,为自己所撰写的、为生活所描摹的、为灵魂所刻画的,都与头发一样,日渐稀少。
但不可置否的是,这两年与文字相伴,不论主动或被动,接触的、学习的、了解到、知晓的比起以往更加广、多、深、全了。至少,对于这个我曾经成长过、行走过、暂住过的县城,我也许可能短暂的了解了它的未来。而它的未来,或在一点一点的积攒之中,逐渐精彩。
从工作回到生活,婚后的日子平凡与幸福相伴、恩爱与岁月厮守。小呆瓜的工作一直与忙碌相随,在岗位来回变动之中,虽然工资没高,但离家近了几分。不过遗憾的是,好像更加忙碌了了。
在家的日子里,我们或开车出去溜达,或缩在一起打着游戏,或撸着狗蛋。当我在加班的时候,家里永远有一盏由她为我点亮的灯。
她说,怕黑。于是将灯开着,等我回来。
凌晨三四点、五六点,当我走进家门口的时候,总会有一个温暖的拥抱。
家里的狗蛋每天到了下班时间就蹲在门口静静等着,等待着我们的回来。
于是,回家与陪伴,就成了生活的主旋律。
为了回家迎来的温暖拥抱,为了回家迎来那一个躺在地上打滚的狗蛋(猫咪)。
至此,心有牵挂,便继续启航。
从生活走向网络世界,对我来说,二者的平衡早已经彻底打破。部落格与生活、兴趣与工作,终究还是用着闲暇的时间疗愈着自己。
我打开梦幻辰风,看着近十年从未大变过的界面,熟悉又满足。看着来来往往的素未谋面的面孔,陌生的熟人彼此交流,挺好。在一个个孤岛之中我们彼此独行,但又在远方彼此交汇。或许终有一日见到,但更多的是隔着山海,各有各得精彩。
曾经有一段时间用 @戴眼镜的肥驴 这个ID发布了几篇文章,后来想了想还是换回了自己的名字。可是对我来说,为自己写的时间与想法,是持续走低的。于是,我拉来了曾经的同事、现在的好友 @单湘莱 在这里撰写着与我有着共鸣的文字。不过遗憾的是,他是男的,不是我媳妇。
新的一年,新的征程。
对于我来说,是以生命为笔,日月为墨,在岁月长河之中,描摹我所见证的光影。
工作与生活交织,爱情与未来相守,遥望前方,步步前行。
似乎一切在改变、在成长,我一直记着有人说期待看到我工作、结婚之后的生活。可不知为何,每每打开梦幻辰风,却不知道该去写点什么。我渐渐习惯和喜欢上观察,但却并不喜欢记录。我倔强的用记忆去描摹,但在长河的冲刷之中,一切都慢慢暗淡。
可,点点星光,却从未缺席。我追随星光而去,却发觉是十多年前自己在这里雕刻的“梦”。
然后,相信未来会有好事发生。
……
后来,我忘记了。但是不知道为什么,我一直坚持着,坚持着跨越山海、走过长城,时至今日,依然不曾忘记。
不曾忘记相信。
我相信于未来的美好,我相信于梦想的力量,我相信于爱情的坚守,我相信于生活的精彩……
我相信,相信的力量。
感谢,我们都还在。或许未来更多的文字将会是 @单湘莱 或者其他的朋友在这里撰写,但是并不影响,这里,永远是一个空岛。
躲藏在岁月长河之外,静谧守候着梦想。
12年,你好。
欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

2026-01-12 17:17:09

在床上慢慢醒来,打开手机,发觉2025已经是过往了。
一年,眨眼间便已经是过去了。
姜辰说,希望我分享一下一年来的故事。可我沉思许久,却不知道如何提起。我如同老太太生柴火一般慢慢堆砌的文字,却不知道何时会着起火焰,吹散这一切浓烟。
2024年开始正式通过文字工作养家糊口。对于以往来说,文字是赋予灵魂重量的说词,是典当时光的消遣。而自那以后,便成了谋生的工具。因为,工作所需;也因为,自身所选。
曾与姜辰一起是同事,在各自成长路上都选择了不同但又相同的道路。从一个乡村到县城,踏上的征途迥然不同。
初到公司,最初是折腾网络与计算机,在自行探索之中慢慢找到出发的奥义。而公司很大,除了网络还有办文办会、统筹协调的办公室。在大哥的鼓励与帮助之中,学会了许许多多。
至少,文字为未来前行照亮了道路。在一篇又一篇的文字浇筑下,渐渐了解公司的业务,了解每一个领域工作的开展。同时,也慢慢向一位位前辈看齐与学习。
2025年对于我来说,在公司加班到深夜的日子似乎不多,但是自己在家中去慢慢撰写一些材料,去学、去看一些文章,却成了一种莫名其妙的常态。就像鸭子浮在水面上,看起来什么事都没有,一切风清云淡。但实际上下面的脚掌一直在划拉着,心里在念叨着:“死腿,快蹬……”
虽然鸭子永远都是浮在水面上,但若是有一天水流自天上冲下,也是有可能掀翻一切。而当那一切发生的时候,作为一只鸭子,要么选择游向远方,要么选择直达源头。
所以,只能拼了命的努力前行。
2025年,经历了许多。在与妻子携手并肩的路上,我们也将在2026年彻彻底底拥有完整的属于我们的房子和车子。虽然还款路漫长,但咬咬牙总是能过去。我们也曾想着要个孩子,但是彼此的身体都在恢复的路上,每每想说锻炼却总是感觉到乏力难以继续。
于是,我两去健身房办了个卡。
好像,办了月卡就会瘦。
不重要,我俩开始去锻炼了。
在折腾了一个小时后,我到楼下买了个柠檬水,老婆吃了个冰淇淋。冰雪蜜城的奶茶虽然一般,但是柠檬水是真的物美价廉。至少,解渴。
……
2025年,我也拾起了停滞近两年的阅读,在拼多多上买了本《他改变了中国》,在一周多的时间里,将这一本书慢慢看完。到最后最深的感悟,却依旧不知道是在哪看到的那位老者提到的一句:
苟利国家生死以,岂因祸福避趋之。
曾经喜欢电子阅读的我,在这一刻也选择在沙发上盘着腿去一页一页泛着书本。在指纹与纸张的摩擦之中,渐渐感受着过往的力量。而纸质书相对于电子版来说,有那么几分来自时间的厚重。最重要的是,我已经渐渐厌倦去寻找资源的日子了。
是的,再也不是曾经可以随心所欲去找资源的时光了。
于是,我又在拼多多买了本《毛泽东传》。
……
纸质书籍,在渐渐填满我的书架的同时,仿佛也在彰显着几分博学的意味。但是遗憾,心中笔墨不以书籍为重,人间重担不以心性为念。
所以,到最后一切都没有如果,有的都是最好的选择。
贰零贰伍在眨眼间已经是过去了。
新的一年,总要有一点新的追求,新的道路。倘若只有在公司的八小时,失去了之外的一切,那么那八个小时的故事对于我们来说,太过于单薄。但比较遗憾的是,很多人的八个小时却未必是八个小时。甚至于,八个小时还不一定能够吃饱。
不过,相信未来会更好。
因为除了相信之外,再无其他选择。
但不影响,贰零贰伍的岁月里,文字虽然单薄,但至少,还有记录。
二零二六,希望一切会好。
欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

2025-12-06 21:34:01

前些日子在 破袜子 中 @大致 提到 让WordPress4.9在php8.2下正常运行。 在不知不觉间,PHP已经支持到8.X了。
好快,当初刚接触PHP时还是5.6。
恰好周六,恰好服务器搬家。
索性,在AI的帮助下,尝试让梦幻辰风这个运行在 Emlog5.3.1 版本的部落格,体验到php8的快乐。
通过搜索,在 一年又一年的博客 中找到《Emlog 5.3.1 兼容 PHP 8.0 错误修复》这篇博文,甚至于我还看到今年5月我留下的留言:
感谢大佬分享,我目前还是5.3.1,停留在PHP7.4,想着要不要到8.X的版本。
不过博主没有回我,Ta的更新也停留在2022年2月。
无妨,现在开始,结合 一年又一年的博客 的文章内容和我的操作日志,简单记录一下升级历史。
首先:在2016年或2017年左右,梦幻辰风已经修改版本支持到PHP7.X。
所以,以下所有折腾,都是基于PHP7.0时的版本。而修改Emlog5.3.1支持PHP7.0,我是参考的 星知苑 的博文《PHP7下安装Emlog5.3.1》(注:在本文发布时,Ta的站点已经打不开了。)
(注:以下内容好像是CSDN采集的 星知苑 博文,大致方法如下,如果造成影响,后果自负。)
1.修改include/lib/option.php,大概11行修改为mysqli
//即:默认MySQL连接方式,mysql或mysqli
const DEFAULT_MYSQLCONN = 'mysql';
改为
const DEFAULT_MYSQLCONN = 'mysqli';
//默认链接方式改为mysqli
2.修改include/lib/database.php,大概16行删除default:
case 'mysql':
default ://这边需要删除default:
3.修改include/lib/cache.php,大概195行加大括号
$$row['option_name'] = $row['option_value'];
改为
${$row['option_name']} = $row['option_value'];
4.PHP版本最近更新的比较快,autoload自动加载函数会报错,function.base.php开头的__autoload函数修改如下
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 . '加载失败。');
}
});
5.对于部分插件写死了数据库链接方式,需要将 $DB = MySql::getInstance(); 改为 $DB = Database::getInstance(); 等等。
通过上述的修改,Emlog5.3.1(也许)可以支持PHP7.X了。现在,我们将向PHP8进发。
首先,在 init.php 的最开头调用 error_reporting() 设置了错误级别,要排错的话,需要把级别开到 E_ALL 。
*以下方法来自 一年又一年的博客 :
1.修改 /include/lib/function.base.php 文件:
__autoload() 函数:
//把 __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 . '加载失败。');
}
});
get_magic_quotes_gpc() 函数
在文件开头 function doStripslashes() {} 函数声明前,补充定义纯用于兼容的桩函数 get_magic_quotes_gpc(),恒返回 FALSE。
if (!function_exists('get_magic_quotes_gpc')) {
function get_magic_quotes_gpc() {
return false;
}
}
in_array() 前检查 NULL 值
//找到if (!@in_array($actionFunc, $emHooks[$hook])) ,将其修改为:
if (!@$emHooks[$hook] || !@in_array($actionFunc, $emHooks[$hook])) {
2.更新 passwordhash.php 密码函数库
前往 phpass 官网下载最新版本的 passwordhash.php ,替换原本的 /include/lib/passwordhash.php 。
现在,程序能跑了,但是会有一些小报错,如:
报错提示:Deprecated: Function get_magic_quotes_gpc() is deprecated in /www/include/lib/function.base.php on line 31
需要修改 include/lib/function.base.php 文件,找到 doStripslashes() 函数,修改如下:
function doStripslashes() {
// 删除对 get_magic_quotes_gpc() 的调用
// 直接进行 stripslashesDeep 处理
$_GET = stripslashesDeep($_GET);
$_POST = stripslashesDeep($_POST);
$_COOKIE = stripslashesDeep($_COOKIE);
$_REQUEST = stripslashesDeep($_REQUEST);
}
同时还需要修改 stripslashesDeep() 函数,修改如下:
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 => $data) {
$value->{$key} = stripslashesDeep($data);
}
return $value;
} else {
// 添加对 null 值的检查
return is_string($value) ? stripslashes($value) : $value;
}
}
同时,元宝AI提示我还有一个完整替代方案:在 init.php最前面添加全局处理。
// 替换 magic_quotes_gpc 功能
if (version_compare(PHP_VERSION, '7.4', '>=')) {
$process = [&$_GET, &$_POST, &$_COOKIE, &$_REQUEST];
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
不过我没试,因为已经解决这个报错了。
不过在网站头部出现了:Notice: Undefined variable 。我看了一下代码如下:
<?php if ($logid): ?>
修改为:
<?php if (isset($logid) && $logid): ?>
即可。
随后,新的报错:
Deprecated: Using ${var} in strings is deprecated, use {$var} instead in /www/content/plugins/tpl_options/tpl_options.php on line 987
这个是emlog5.3.1的插件:模板设置。
打开 tpl_options.php第 987 行:
// 旧代码(已弃用):
$values[$tag['tagname']] = "${tag['tagname']} (${tag['usenum']})";
// 新代码(推荐):
$values[$tag['tagname']] = "{$tag['tagname']} ({$tag['usenum']})";
完整修改后的函数:
/**
* @param array $option
* @return void
*/
private function renderTag($option) {
$tags = Cache::getInstance()->readCache('tags');
$values = array();
foreach ($tags as $tag) {
// 修复 PHP 8.2 弃用的字符串插值语法
$values[$tag['tagname']] = "{$tag['tagname']} ({$tag['usenum']})";
}
$option['values'] = $values;
$this->renderCheckbox($option);
}
随后,新的报错:
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
修改 log_model.php第 184 行的函数声明:
/**
* 前台获取文章列表
*
* @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->db->query($sql);
$logs = array();
while ($row = $this->db->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']) && $cookiePassword != $row['password']) {
$row['excerpt'] = '<p>[该文章已设置加密,请点击标题输入密码访问]</p>';
} else {
if (!empty($row['excerpt'])) {
$row['excerpt'] .= '';
//$row['excerpt'] .= '<p class="readmore"><a href="' . Url::log($row['logid']) . '">阅读全文>></a></p>';
}
}
$row['log_description'] = empty($row['excerpt']) ? breakLog($row['content'], $row['gid']) : $row['excerpt'];
$row['attachment'] = '';
$row['tag'] = '';
$row['tbcount'] = 0;//兼容未删除引用的模板
$logs[] = $row;
}
return $logs;
}
然后需要搜索整个代码库,找到所有调用 getLogsForHome函数的地方,并调整参数顺序。
参照如下:
// 旧调用方式:
$logs = $Log_Model->getLogsForHome('', $page, Option::get('index_lognum'));
// 新调用方式:
$logs = $Log_Model->getLogsForHome(Option::get('index_lognum'), '', $page);
当然,我没这么干,因为太多了。
我选择保持向后兼容,可以修改函数签名但不改变参数顺序:
/**
* 前台获取文章列表
*
* @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->db->query($sql);
$logs = array();
while ($row = $this->db->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']) && $cookiePassword != $row['password']) {
$row['excerpt'] = '<p>[该文章已设置加密,请点击标题输入密码访问]</p>';
} 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;
}
反正没报错了。
然后发现发邮件的插件 kl_sendmail 报错了,而且发送不了邮件。
于是,更新 PHPMailer 的版本,直接更新到7.0.1,将src中所有的文件上传到该插件的目录的class文件中,修改 kl_sendmail.php 文件代码如下:
<?php
/*
Plugin Name: Sendmail
Version: 3.8
Plugin URL: (链接已失效)
Description: 发送博客留言至E-mail。
Author: 作者:KLLER
Author Email: [email protected]
Author URL: (链接已失效)
*/
!defined('EMLOG_ROOT') && 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',"<br /><a href="/jump.php?url=1" target="_blank" rel="nofollow">1</a><br />",$content);
$content=preg_replace('!【图片链接:(.*)】!uU',"",$content);
$content=preg_replace('!【图片地址:(.*)】!uU',"",$content);
$content=preg_replace('!【图片:(.*)】!uU',"",$content);
$content=preg_replace("!【隐藏评论】([sS]*?)【/隐藏评论】!uU","(小声说)<br /><i>1</i>",$content);
$content=preg_replace("!【隐藏内容】([sS]*?)【/隐藏内容】!uU","(小声说)<br /><i>1</i>",$content);
$content=preg_replace("!【隐藏内容:([sS]*?)】!uU","(小声说)<br /><i>1</i>",$content);
$content=preg_replace("!【隐藏信息:([sS]*?)】!uU","(小声说)<br /><i>1</i>",$content);
$content=preg_replace("!【隐藏:([sS]*?)】!uU","(小声说)<br /><i>1</i>",$content);
return $content;
}
function kl_sendmail_do($mailserver, $port, $mailuser, $mailpass, $mailto, $subject, $content, $fromname)
{
try {
$mail = new PHPMailer(true);
// 字符设置
$mail->CharSet = "UTF-8";
$mail->Encoding = "base64";
// 服务器设置
if(KL_MAIL_SENDTYPE == 1) {
$mail->isSMTP();
} else {
$mail->isMail();
}
$mail->Host = $mailserver;
$mail->Port = $port;
$mail->SMTPAuth = true;
$mail->Username = $mailuser;
$mail->Password = $mailpass;
// SSL/TLS设置
if($mailserver == 'smtp.gmail.com' || $mailserver == KL_MAIL_SMTP) {
if($port == 465) {
$mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS; // SSL
} else {
$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // TLS
}
}
// 发件人
$mail->setFrom($mailuser, $fromname);
// 收件人
$mail->addAddress($mailto);
// 内容
$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $content;
$mail->AltBody = strip_tags($content); // 纯文本版本
// 发送邮件
$mail->send();
return true;
} catch (Exception $e) {
error_log("邮件发送失败: " . $mail->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->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 > 0)
{
$DB = Option::EMLOG_VERSION >= '5.3.0' ? Database::getInstance() : MySql::getInstance();
$Comment_Model = new Comment_Model();
$pinfo = $Comment_Model->getOneComment($pid);
if(!empty($pinfo['mail']))
{
$subject = '您在梦幻辰风发表的评论收到了Ta的回复';
$content = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><div style="width:99%;">
<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;">
<p><strong>'.$pinfo['poster'].'</strong>阁下,您之前在《'.$log_title.'》发表的评论:</p>
<p style="padding:10px;background-color:#F0FFF0;">'.$pinfo['comment'].'</p>
<p><strong>'.$comname.'</strong> 给您的回复:</p>
<p style="padding:10px;background-color:#F0F8FF;">'.$comment.'</p>
<p>您可以直接<a href="'.Url::log($gid).'#'.$pid.'" target="_blank">点击这里查看原文</a>,与'.$comname.'继续交流。</p>
<p>感谢您关注 梦幻辰风,本通知由自动信箱发出,请勿直接回复本邮件。</p>
</div>
</div>
<!-- 邮件版面格式来自挨踢路 -->';
$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 >= '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->query($sql);
$row = $DB->fetch_array($res);
$author = $row['username'];
$twitter = $row['content'];
$subject = "{$author}发布的碎语收到了新的回复";
if(strpos(KL_MAIL_TOEMAIL, '@139.com') === false)
{
$content = "{$author}发布的碎语:{$twitter}<br /><br />{$name}对碎语的回复:{$r}<br /><br /><strong>=> 现在就前往<a href="{$_SERVER['HTTP_REFERER']}" target="_blank">碎语页面</a>进行查看</strong><br />";
$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 >= '5.3.0' ? Database::getInstance() : MySql::getInstance();
$blogname = Option::get('blogname');
$Comment_Model = new Comment_Model();
$commentArray = $Comment_Model->getOneComment($commentId);
extract($commentArray);
$subject='您在梦幻辰风发表的评论收到了Ta的回复';
if(strpos($mail, '@139.com') === false)
{
$emBlog = new Log_Model();
$logData = $emBlog->getOneLogForHome($gid);
$log_title = $logData['log_title'];
$content = '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><div style="width:99%;">
<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;">
<p><strong>'.$poster.'</strong>阁下,您之前在《'.$log_title.'》发表的评论:</p>
<p style="padding:10px;background-color:#F0FFF0;">'.$comment.'</p>
<p><strong>'.$userData['username'].'</strong> 给您的回复:</p>
<p style="padding:10px;background-color:#F0F8FF;">'.$reply.'</p>
<p>您可以直接<a href="'.Url::log($gid).'#'.$pid.'" target="_blank">点击这里查看原文</a>,与'.$userData['username'].'继续交流。</p>
<p>感谢您关注 梦幻辰风,本通知由自动信箱发出,请勿直接回复本邮件。</p>
</div>
</div>
<!-- 邮件版面格式来自挨踢路 -->';
$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 '<div class="sidebarsubmenu" id="kl_sendmail"><a href="./plugin.php?plugin=kl_sendmail">邮件设置</a></div>';
}
addAction('adm_sidebar_ext', 'kl_sendmail_menu');
?>
完事。
但是梦幻辰风邮件回复一直失败。
结果发现是今年3月腾讯企业邮箱看我长时间没使用smtp功能,自己给我关了!
……
搞定。
可能是服务器性能原因,跑PHP8有点卡不愣登的。最后降成PHP7.4,结果反而更快乐了。
欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!
