普通视图

让Emlog5.3.1支持到PHP8.4

2025年12月6日 21:34

封面图

前些日子在 破袜子@大致 提到 让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: kller@foxmail.com
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功能,自己给我关了!

……

搞定。

2025年12月7日注:

可能是服务器性能原因,跑PHP8有点卡不愣登的。最后降成PHP7.4,结果反而更快乐了。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

应当为自己培养一个值得终生的爱好

2025年12月2日 08:23

封面图

去年9月,王教授说我应该培养一个终身性的爱好。

只不过,他一直推荐我买个相机,走在拍摄风景与美女的路上的同时可以在摄影的世界里可以换一个角度观察世界。不过比较遗憾的是对我来说,优秀的相机价格十分昂贵,更何况王教授只赞助一个5元代金券,实在是买不起了。

在一个月后,王教授分享了一个链接,《4000元起,这几款热门轻便相机……》。

我点开看看,的确是4000元起,只不过实际上是6000元以上才能买到。一个月到手工资还不够买一个相机的我只能叹了口气开溜。

2025年,1月,在奔向28岁高龄的路上,找到了一个很终身的爱好。

——游戏机。

于是,老婆出资,在switch2即将出售之际,买了一台日版switch。随后,原价买了《马里奥制造2》《双人成行》的数字版。(血亏,应该买卡带的,但是马造2的卡带难买。)

至此,我似乎找到了周末除了加班以外打发时间的好玩意。

我不喜欢出门,以前拍拍照片也是因为不想浪费收集的蔡司镜头,在把手机换成红米后,便不再喜欢拍照了。在这个熟悉的县城里,每天两点一线的生活早已经对一切见怪不怪,没有新奇的事情,在几乎拍过了光影的效果之后,拍照就成了可遇不可求的奢侈了。

宅在家写作倒是不错,但是久坐腰疼的毛病实在是难受,而趴着去码字,仿佛是一种折磨了。所以,躺在沙发上玩游戏就成了最好的选择。

许久以前,老婆陪我在iPad上玩和平精英,而后,我陪老婆一起玩王者荣耀。对于新入坑的我来说,专精一个英雄倒是成了最简单的方式。于是随着芈月战力的提高,便陷入了逆天匹配机制中的“牢”玩家能者多“牢”的局面。遗憾的是,老婆不愿意陪我一起玩了。

可周末总要有除了加班之外的打发时间的方式。

老婆说,一起做饭、一起收拾卫生。可我,更想要的是完整的放松与休息,就像将自己灵魂整个抛弃之后把肉体扔到营养液中泡着一样。

原本,手机是一个很好排解方式。可惜遗憾的是手机刷久了,脖子会累,手机会累,对手机不太好。但是躺在沙发上,用着手柄玩游戏,倒是不错。——至少,手机不累。

于是,在芈月的陪伴下,我只争取一个赛季点亮一个王者印记便好。

而后,打开《马里奥制造2》,用UU加速器连接好网络,然后开启多人联机。在每一次胜负之中或功亏一篑,或侥幸取胜。在手柄中上苦练技巧,在单人图中不断尝试……于是,忙里偷闲不久,在到了B分段后,便停下了脚步。

——主要是,合租的家庭组翻车了。

随后,与天命人一起继续征战。但是魂系游戏对于高龄的我来说,有点反应不过来。开了风灵月影,大圣是完整了,我却没意思了。

打开都市天际线,以猫猫的名字建造了一个城市,却在发展许久之后,因人口的老龄化大规模的人口死亡导致城市一夜赤字。至今仍然没有恢复元气。

玩个不累的吧。

买了一个星露谷物语的卡带。

决定,种地。

我可以伐树,我可以种地,我可以下矿,我可以和每一个人交朋友,我可以钓鱼……

有意思了。

游戏说,必须两点前睡觉。

现实里,最好十二点就睡。

……

突然发觉,对于一个接近中年的男人来说,游戏好像是最廉价的爱好了。

与没有爱好相比,游戏至少可以让人没有直接抑郁的风险。

与钓鱼相比,至少没有早出晚归消失的风险

与棋牌相比,至少没有金钱大规模缩水的风险。

挺好。

只不过,没有王教授那么拍着风花雪月的浪漫,没有姜辰用文字描摹的细腻。

有的,只是老一辈人眼中的不务正业。

但是呢,你总要有一个属于你一生的爱好不是吗?

要不然,无趣的人生里,岂不是没有了一丝丝光亮。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

没有落雪的冬日

2025年12月1日 11:48

封面图

从节气来算,已经入冬二十多天了。

对于在西北边陲的我而言,却仿佛是第一次看到这个世界一般。在12月的第一天,竟然还没有在大地上看到沉积堆攒的雪。

在入冬的前两日,天色阴沉,最后的秋风卷走了秋日里最后的余温。我正裹紧衣服在感慨雪地胎换得及时,却不知道在那一夜雨夹雪后,再没有了冬日的气息。

很奇怪,在零上与零下徘徊的温度让每一个人感受到了冬日的温差。而看着湛蓝的天空,却找不到一丝丝落雪的痕迹。

好像,该下雪了。但是奇怪的天气却没有一丝丝的下雪的迹象。

甚至于,荒草都有了几分生机,流浪在外的野猫与家猫见面时,都不知道是不是该继续换毛了。

于是,猫咪不知岁月,却也只能继续前行。家猫选择在家打滚卖萌,又或者高冷的蹭一下铲屎官的腿,毕竟在它的领地里,岁月静好。

而户外的野猫,战栗的迎着寒风,用尾巴包裹着自己的小脚,为自己赋予属于自己的温暖。

而徘徊于家与岗位的我们,在为着自己的一亩三分地忙碌,在为着一日三餐周旋。有人说这是人间烟火气,但却没有人说,没有落雪的冬日里,盖不住世间的泥泞,遮不住所有不平。

在不同的发声之中,却也让人觉得啼笑皆非。有人说路修不到门口,却不知是曾经自己的“高人”所拦;有人说没有时间出去,又或者出去都是人,却恍然间发现,孩子们已经迎来了属于他们的假期。

快乐的孩子们在阿勒泰地区迎来了与周末衔接起来有9天的雪假。在伊犁州则迎来了3天、5天的秋假。

可惜,秋假、雪假虽好,但却与我无关。

我行走在大街小巷,感受着萧瑟的寒风渗透进衣服之中,抚摸着我的每一寸皮肤,带走了为数不多的水分,让干燥的感觉涌上心头,在挠了挠之后,却发觉更痒了。

而看看前路,在寒风的陪伴之中有几分冷,我裹紧冲锋衣。想将羽绒服套上,但是年轻人的执拗却让我咬着牙前行。

看看过往,或在感慨风花雪月,又或者在感慨温水青蛙。可当有机会真正走出来去一点一点感受着整个世界时,却发觉曾经一切是那么渺小。

最近网络舆情在不断地充斥着每一个信息茧房。我曾会戏谑调侃,而如今却只是静观其变。小说世界里需要讲逻辑,可是现实里却从未讲究过什么。

就像,十二月的西北边陲之地,居然没有见到雪。

在感慨了几句之后,我便继续撑开自己的平板,在obsidian之中,一点一滴记录着自己的时间。

还好,才12月……初。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

一夜入秋,孤独的文字,平凡的生活

2025年10月4日 00:13

两个月前立秋了。

而那时,恰是热的时候。

眨眼间,两个月就如同被撕下的日历一般,被丢弃在垃圾堆里。

时间很快,快到让我在这一刻都仿佛活在昨天。

昨天,火热的光炙烤在皮肤上的痛感还历历在目。

封面图 - 一夜入秋,独孤的文字,平凡的生活

今天,却已经看着远方的山上点缀着皑皑白雪,漂浮着云雾。随着镜头慢慢拉近,青绿色的树尖下点缀着鎏金,映躺着点滴暗红。

秋天了。

我裹紧被子,发觉到几分寒意。吞咽着口水,喉咙的根部不知道是干燥还是怎么的,居然有了几分疼痛的感觉。

换上了厚厚的睡衣,在冬日有暖气的日子里,室温是二三十度。而只有在这没有供暖的时间里,这个可能在二十多度或者十来度的房间之中,才会让人知晓秋日的萧瑟。

我伸开手,指尖龟裂的皮肤总是告诉着我不再年轻了。

人未近三十,心却已耄耋。

随着时间奔流而去,将所有的文字冲刷到了未来,我徘徊在现在河道之中,撑着渔网打捞着仅存的字符。当我打开电脑,看着梦幻辰风后台所有的评论,但却因为自己没有新的文字就失去了回复的欲望。于是,在这一刻我就成了沉默的旁观者。

十年来的时间里,百万余文字堆砌出了千余篇文章,1800余人来来往往留下了3万余条评论。我躲藏在后台看着从过去到现在的“梦”,从喧嚣繁闹成为了如今草木自生自灭,只留下偶尔回来瞅上一眼的故人。

至此,“梦”的世界终究从一个人的狂欢走到了一个人的寂寞。恰好正值秋,而秋意本就是孤独。描绘自己的心灵所出现的文字,更是孤独的产物。

但是一个人孤独久了,总是会失去对生活的向往。可是生活充实了,与自己灵魂对话、倾诉的渠道似乎也自然消失了。

所以近两年来,文章并不是无字可写,而是有些滋味,更适合独自咀嚼,慢慢反刍。

于是,缄默的世界变成为了常态。

从文字回归生活,在小呆瓜陪伴的日子里,或是在纠结做什么吃的,或者是在考虑去哪转转。可惜看了看距离,又看了看时间,我两最终还是打算窝在家中,拖着几分疲乏的身躯窝在床上,或刷着短视频,或一同玩着已经快到PVE状态的王者荣耀。

switch躲电视柜下,静静的等待着下次映衬在电视屏幕上。单机游戏成为了生活中最大的奢侈,网络游戏里能够对战的也只剩下手游。可惜,年少时间最想要的如今成为了最大的奢望。原价购买的电子版双人成行至今还在那里卡着,购买的星露谷物语卡带也放置在一旁。种田闯关的游戏,还是敌不过暮气沉沉的自己。

出门看看,上百公里的路途,即将枯黄的草原,萧瑟的秋风,人造的、自然的景色相互枯萎,宣告着岁月与寒风交织出来的飒沓清寒。

那么,便继续蜗居起来。等候着暖气的到来,等候着时间的往返,等候着入夜之后“梦”的开始……

入夜,5摄氏度,还行。

摸摸鼻尖,有几分冰。裹好被子,抱紧小呆瓜,狗蛋在脚边窝着,然后,等待天明。

既已入秋,便与萧瑟相伴,在未来寒冬之中沉默着生长枝丫,静候未来的曦光。

End

以下文字与正文无关,在公众号尾巴惯例的絮叨

上次见面还是49天前,各位,还好吗?

现在在部落格、公众号写东西的频率越来越低了,主要是,不知道该写点什么。@姜老师 天天在写自行车,可我又不骑那玩意,特别是马上就进冬下雪了,新疆完全不适合那东西。

至于折腾电视、电视盒子、电脑啥的,也没可以折腾的必要了。打游戏嘛,技术太菜了,断断续续玩了快三年王者,才混到伊犁州前百的芈月。emmm

至于拍视频什么的就不想了,虽然装备挺多的,但是耐不住性子了。老婆建议我去写写小说,咋说呢,不动脑子看小说很舒服,但是要去慢慢构建一个世界,心力撑不住哇。

所以,就一直好好上班,好好生活。文字可以是谋生的手段,但是不能是生活的唯一。家里有老婆,有狗蛋(猫),有游戏机,出门有工作,能挣钱,也就够了。

嗯,好久不见~我还在这。姜辰虽然一直处于潜水,但是一直关注着一切。很感谢朋友们的念叨,我还是在的。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

2025年,再与宏碁4738G相逢

2025年8月16日 19:20

封面图

根据记忆,我哥应该是在2011年买了他的第一台笔记本电脑,宏碁4738G。这台电脑当时陪伴他在大山深处待了几年。那几年,对他来说是烟酒为伴,与山同孤,与风同独。这台电脑,便是那来时路最好的佐证。

转眼,2015年,这台电脑到了我的手上,成为了我的第一台电脑。

到我手上的时候,是一台有着2GB内存运行着Windows XP系统的电脑。而这样的电脑,在2015年似乎有点不合时宜。

随后,在大学学长的一次指点,在自己的多番摸索后,这台电脑经历了添加内存条、更换固态硬盘、CPU、散热风扇、内置键盘、电池、无线网卡等等一系列操作后,当时的宏碁4738G,已经成了一台安装着i5 560M的CPU,搭载着4+2GB内存的电脑了。

在外置散热器的辅助下,它陪伴了整个大学时光。那个时候,宿舍所有人的电脑几乎都是外接散热器,这显得并不奇怪。

随后,它陪伴我畅游在“我的世界”之中,陪伴我在“三国杀”打发时间,也陪伴着我在自学着office与PHP……

也陪伴着我,书写了5年的梦幻辰风。


2020年7月12日,在一次意外之后,电脑出问题了,无法开机,无法点亮。又或者说,开机几分钟后就直接断电。

而摸摸后壳,烫手。老师傅慕若曦说,可能是南北桥啥的烧了,建议修个主板,或者换个电脑。

为此,我斥资120元巨款,购买了一个主板。

而时至今日我才知道好像发过来的主板是宏碁4738ZG(360驱动大师读取硬件信息时是这么说的,并且打开bios查看,的确是4738ZG了。)。

但是模具是一样的,所以,在相同的位置安装着相同的配件,拧着相同的螺丝。

在多次尝试之后,甚至重装了系统,依然面临几个问题:

  • 一是无法打开Office,加载半天然后就没了后续。
  • 二是几次花屏后断电。而摸摸后壳,没什么温度。

至此,找不到缘由,便将宏碁4738G装在包里,锁在柜子中。而后,靠着前段时间提到的中柏Ezpad 6s pro支撑了半年,在2020年12月15日买了神舟战神系列的ZX6Ti-CU5DS。

一晃,又五年过去了。

神舟战神ZX6Ti-CU5DS已经脱离了它的模具,在淘宝的帮助下,藏进了亚克力机箱,成为了一个“台式主机”。

爸妈也卖了他们在71团的小房子,在最后一次回到我曾经住的阁楼时,又翻出来了这台宏碁4738G。

我想,重新让它活过来。

虽然现在它已经不能够再如当初一般胜任视频剪辑这类大工程了,但是,我想让它重新点亮屏幕、进入桌面。至少,还能够让我看到过往的样子。

于是,从今年6月起,我便斥巨资在淘宝上给它重新换了一圈零件。

  • i5 480M CPU(2016年买i5 560M的那家店)
  • 三星 DDR3 1333MHz 4GB 内存条(还是2016年买i5 560M的那家店)
  • 宏碁4738G 独显
  • 长城固态硬盘(Great Wall GW600 256GB)
  • 光驱及原装光驱托盘

以上所有花费,最贵的是长城固态硬盘。而曾经的CPU、内存条,都是几元、十几元的“垃圾”了。在到货后,拆机、安装。

点亮屏幕,安装Linux mint系统,直接断电关机。

想了许久,买了点其他东西:

  • 5个铜管 + 铜片 + 固态垫 + 热胶 + 风扇 + 铜箔纸
  • 电池

拆机图

在完成散热改造后(图中尚未用铜箔纸连接散热器、铜管和光驱盘),电脑成功安装好Debian Xfce系统,进入桌面,待机一整天,一切正常。

打开office,编辑一个文档什么的,一切正常。

8月,突发奇想,先把中柏Ezpad 6s pro换成了Windows 10 LTSC 2021。

比起Debian Xfce来说,显示效果更好,而且驱动支持更完善。

既然如此,宏碁4738G能否回到Windows的怀抱呢?

显然,可以。趁着一个中午,我为宏碁4738G安装了Windows 10 LTSC 2021。在仔细查了查后,Windows 10将在2025年10月14日结束支持,而Windows 10 LTSC 2021将会在2027年1月12日结束支持。

我想,应该还会有能撑得更久的。

还好,找到了Windows 10 IoT Enterprise LTSC 2021,将会在2032年1月13日结束支持。

通过哔哩哔哩和Github(镜像站),从神舟战神ZX6Ti-CU5DS开始,将Windows 10 22H2转化为了Windows 10 IoT Enterprise LTSC 2021。

最后,再次打开了宏碁4738G,将系统也变为了Windows 10 IoT 企业版 LTSC。

看着这台10年前与我相伴的电脑,在此刻,静默的运行着现在的系统,突然颇为感慨。

一如既往,从未背弃。

虽有波折,但一切终将向好。

你好,我是姜辰。宏碁4738G,好久不见。

还有,屏幕前的你,好久不见。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

使用Linux为电脑焕发第二春

2025年4月12日 23:06

封面图

突然想折腾点什么了。

翻出来2018年买的那个寨板,看着整个后背都是电池的平板电脑,突然开始手痒了。

——特别是看到中柏的淘宝店显示拟于2025年4月16日停止运营,而我还在想办法给他的产品恢复生机与活力,作为一个忠实的顾客,我都有点为自己感动的流泪了。

在为数不多的空闲日子里,我先后几次为它安装了windows 10最新的版本,可惜老旧的它,在开机之后便已经开始卡顿了,运行个浏览器或者WPS,整个世界都变慢了。——慢不重要,人间可以慢,但是不能不动弹。

后来尝试安装windows 7,遗憾的是没办法切换到传统引导模式。而在UEFI模式中,系统始终无法启动。

索性,试一试Linux。我依稀记得以前2019年左右,我给中柏安装过Ubuntu,安装后失去了触屏功能(没有驱动),同时桌面倒置,而且界面显示很小、反应很卡。

那这次索性就换个发行版试试,反正接触过这么多发行版,总有一个能用的。在结合自己2021年起就短暂几次在自己的物理机上使用Linux,特别是2021年底至今,在办公室一直体验着国产系统——银河麒麟。

当然,中柏这个寨板的性能是肯定跑不动麒麟的桌面。于是在简单搜索了网上linux的发行版,结合以及自己多年使用Debian的经验,找到了方向。

  • 桌面简单
  • 系统精简
  • 轻量版
  • 能在老电脑跑

于是,有了以下选项:

  • TinyCore
  • Linux lite
  • Lubuntu

TinyCore以前在虚拟机上跑过,精简到我怀疑都不需要一个GUI界面。

然后,尝试下载使用了Linux lite。

界面很精简,同时进入桌面后也不卡顿,但是唯一美中不足的是,会默认打开键盘的FN键。也就是说,正常情况我要输入yuio,则会变成y456。在查询很久后,没有解决办法,于是只能放弃。

随后,安装了Lubuntu。比起使用Gnome的Ubuntu来说,桌面占用资源不高,系统也很流畅。用了两天,但是11.6寸的屏幕展示1920*1080的效果,眯着眼睛也看不太清楚。可缩放直接是2x,设置1.5x的缩放一直失败。

于是,尝试Linux Mint Xfce。

通过修改DPI值,成功实现了1.5x的放大。但是考虑许久,还是想回到纯正的社区环境酝酿的系统。

——更何况,基于的Ubuntu,背靠商业公司,在Free的世界里有那么一点不自在。

于是,安装了Debian,而桌面则选择了Xfce。在极简安装后,便有了我现在所有的界面。

桌面效果图

整个系统,修改处不多,主要从xfce-look.org 下载安装了主题,剩下的,就是简单的修改了。

  • 修改软件为国内源,我用的是阿里源。
  • 在“设置”——“设置管理器”——“外观”——“字体”中,将DPI从默认值96修改为144。
  • 更换更大尺寸的图标。
  • 重建图标缓存
rm ~/.cache/icon-cache.kcache
sudo rm /var/lib/apt/lists/*
sudo update-icon-cache /usr/share/icons/*
  • 将Windows系统中所有字体,拷贝到/usr/share/fonts/windows/ 目录中,执行sudo fc-cache -fv 更新字体缓存。
  • 修改锁屏快捷键,在“设置”——“键盘”——”应用程序快捷键“中找到xflock4 ,修改为Super + L ,这样就保持了和Windows一样的快捷键。
  • 修改GRUB,跳过开机选择系统的倒计时。
sudo nano /etc/default/grub

找到以下两行并修改为:

GURB_TIMEOUT=0 #将超时时间设置为0秒。
GRUB_DISABLE_OS_PROBER=true #单系统,没必要检测其他系统

然后执行更新。

sudo update-grub
  • 为文件管理器Thunar 添加smb访问功能。
sudo apt install gvfs-backends samba-common smbclient cifs-utils
  • 添加Timeshift创建恢复镜像。
sudo apt install timeshift

最后,通过官网下载deb包安装微信、QQ、WPS、Obsidian。

以及,执行更新命令,为电脑补齐剩余所有。

sudo apt update -y
sudo apt upgrade -y

完成一切后,创建一个恢复镜像,然后开始使用你的Linux。

——最后,如果你的电脑能够流畅使用Windows,那么还是建议你继续使用Windows。除非,你想折腾。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

终不似,少年游

2024年11月26日 00:00

时间很快,快到眨眼之间啊,便已入冬了。在清早看向窗外的时候,远方的山终于染上了白发,让岁月又留上了一年的痕迹。看着时间,成家在小呆瓜的陪伴下已经达成结婚一周年的成就,立业在贵人的帮持下已经开始了一年的新征途。至此,倘若没有体重脱发的困扰,一切都在向好向上前行。

生活与工作,终于都有了新的色彩。而在新的岗位之中,秉持本心,一路向前。

重新打开梦幻辰风,发觉在几次搬迁之中,丢失了一些评论。但是随着自己在折腾代码的路上,将以往的所有交流都选择在首页隐藏。于是在不断的折腾与改变之中,梦幻辰风逐渐成为了记录时间的厚簿。


前些日子JCS.MOE域名自动续费了一年,看着信用卡13.99 美元的账单,方才发觉已经很久没有好好看过自己的一隅世界。终于,让电脑开机,看了看梦幻辰风的现状,又默默移除了一些没有什么用途的功能,让它回归到记录生活与寄居情感的使命之中。而后打开日历看看,几年前买的小服务器在下个月终于要过期了,看了看现在服务器的价格与折腾的麻烦,想着下一步离开服务器的豪宅回到虚拟主机这个廉租房的行列中。至少,省去了折腾,只留下时间与岁月的痕迹,就仿佛在瞬间回头,看到的是2014年的那个凌晨。

可惜,一切都不会再回去了。但好玩的在于整个世界仿佛是一个轮回。华农兄弟又一次身着蓝色战衣手持打野刀提溜着竹鼠,李子柒在田园牧歌中继续吟唱着岁月静好的温馨,特朗普当上了总统入住了白宫,美国丢了43只实验室的猴子……差点,又恍若昨日了。可惜对于石破茂来说,轮回就是上午辞职首相,下午继续当选,只有一个午觉的间隔。

时间很快,快到自己已经不再是少年了。于是在接近三十岁的日子里,想为自己写点什么。可惜每当周末,要么是开着车带着老婆出门,要么是老婆要坚守在岗位上不能回家,要么是自己在岗位上忙碌着新的工作,要么是躺在沙发上打开了王者荣耀研究用芈月在保证赢的同时降低自己评分……

也就因为如此,默默停笔了三个多月。但是回归工作,每天都在敲击着键盘,在不同的文字之中徘徊,让自己慢慢去学习、去领会、去探索这个小县城的一切。也终于了解,这个小县城所有的改变,不是在眨眼之间一蹴而就,而是在一个又一个接力棒的传递,在一个又一个坚守与建设之中,有了新的光亮。


封面图

离开工作与生活,在家最多的便是陪伴了。是老婆陪伴着我,是狗蛋在我敲击键盘时趴在电脑桌旁舔舐着毛,是在相伴与成长之中,任凭岁月自行记录着历史。在深夜之中,我看着星空璀璨,仿佛又见到了十年前的自己。

那时,穿梭于互联网的世界里畅想着自己去空阔又拥挤世界打拼。可惜,刚出象牙塔便进入了幼稚园,在相同又不同的校园生活里留着一颗赤子之心去成长、成熟,在离别与新的征途之中继续前行,在技术与文字的选择中遵循大哥的指示去锤炼自己青涩又单薄的文笔……终于,十年已是过往。

索性,在属于自己的房子中为自己斟上了一杯十年前的老窖,在一饮而尽中,十年里愈发浓郁的酒精变得辛辣与苦涩,在这一瞬间,仿佛那个少年又走向我,摇摇头,几分戏谑的看着十年后的自己,说,“这十年,你的酒量还是这么差。”

嘿,他妈的。

叶满汀洲,寒沙带浅流。二十年重过南楼。柳下系船犹未稳,能几日,又中秋。

黄鹤断矶头,故人今在否?旧江山浑是新愁。欲买桂花同载酒,终不似,少年游。

——《唐多令·芦叶满汀洲》刘过

NoMoreRestrict Settings / 设置

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  

家里的新成员

2024年8月5日 00:00

封面图

五月之后就没有为自己和生活写过什么文字了,为此,我想了个借口,就是家里添新成员了。

之前老婆说,孩子和猫总要养一个(只)。

在深思熟虑后,我俩养了一只猫。

一只,银渐层与蓝猫的结合体·折耳·一个月大·三百克重·雌性·幼猫。

为了欢迎它的到来,我与静静决定给它起个名字。为了让它的名字有文艺色彩,有生活气息,有乡土情怀,我翻遍了诗经、新华字典、民俗文化百科,甚至还看了看中华上下五千年。

所幸,我读过几本书,有个还时常联系的教写作学的老师。虽然没问他的想法,但是经过冥思苦想,我决定给这只银渐层与蓝猫的结合体·折耳·一个月大·三百克重·雌性·幼猫取名为:

狗蛋

老婆夸我很有文化。我想了想,的确有,不过不给师门说了,毕竟再被逐出师门就尴尬了。

狗蛋刚接上时,两眼饱含泪水,也许是与母亲分别的不舍,也许是上火时眼睛难受,也许是感冒时睁不开眼。

无妨,接回家后,慢慢调养。

我俩接上它后,回到苏乡呆了一晚。主要是第二天准备去市里,给它买点猫砂和猫粮。

狗蛋到了苏乡的房子后,立刻钻到桌子底下蹲着,当时的它整个大小看起来与一只大号仓鼠差不多,小且怂。

不过恰好那段时间村里平房地面冷,于是狗蛋在铺着衣服的纸箱子与冰冷的地面之中选择冻了一晚。

还好,它有皮衣。

在市里把东西买齐后便带它回家。在县城家的阳台边,给它安置了一个猫砂盆,在客厅安置了猫窝和猫食盆。至此,它算是到家了。但是一出来的它,看着诺大的房间,完全都是陌生的气息,它选择在沙发下呆了2天。为了防止它乱钻乱跑,我们将所有房间的门时刻紧闭着,生怕这玩意钻到满是灰尘的床底下去。

随着这家伙慢慢对家里熟悉,甚至敢跑酷后,我们终于打开了房间门。随之而来的,就是花遭了殃。这只猫最初在我老婆腿前喵喵叫让老婆把它放到沙发上,而慢慢长大后,喜欢睡在花上。于是我们将花架在凳子上,它便只能望花兴叹了。

那一段时间,它时常睡在沙发下面,或者钻到沙发缝里。胆小的它,听门响就跑。恰好那段时间比较冷,我又经常开着窗户,于是这只猫感冒了。

怎么说呢?就是毫无食欲,毫无生机,旨在睡觉。

网上搜了搜,给猫买个药吧。本来想把自己百试百灵的复方氨酚烷胺胶囊喂给它吃,但是害怕毒死这个小玩意,便打开淘宝,给它买了个盐酸多西环素片。

价格不贵,29.9元。

和我感冒差不多一个价格。不过为了让猫药到病除,发了个顺丰到付。

邮费:16元。

时效:次日达。

一次半片,吃了四天,好了。在陪伴之中养了一两个月,渐渐熟悉起来,开始打打闹闹,来回乱窜。

随着食欲大增,体重达到一公斤,还行,不胖。

恢复健康的它开始睡在花上,甚至爬上了朋友送的健康树上。

健康树上招财猫,还行。

但狗蛋喜欢爬土,不行。

在家里没事跑酷,还行。反正楼下邻居就坐在我办公桌对面,不影响。

糟蹋花还疯狂爬土,真不行。

于是,将所有的花慢慢搬到高处,冷阳台放不下的,就全部移动到书房。

网购了个防猫神器,效果不咋样,但是至少狗蛋不爬土了。但是不知道为啥,这家伙把自己的脚掌弄破了一层皮。再绑上创可贴后,老实了一两天。但是在三十多度的夏日,依然倔强的喜欢花盆。

随着它慢慢能跳上所有的窗户,只庆幸当年装好了纱窗,不然九条命也不太够用了。而此时,这个家伙看到我在书房的电脑前写着东西,它便趴在花盆上,眯着眼睛。

凉快又惬意。

而它的生活,在每天我出门上班后,似乎就是在睡觉、溜达。或许门口有人走动,若不是下班时间,它可能就钻到洗衣机背后的空隙去了。可若是我下班回来,随着熟悉的“狗蛋”声响起,它依然会跑出来迎接一下我们。

当然,有时候也不出来,只会甩一下尾巴,连喵的声音都不会有,特别是它的碗里还有猫粮的时候。

而入夜之后,当我们在客厅泡完脚后,狗蛋便离奇消失了。无论怎么呼唤,都不会出来。但当我们走进卧室,好家伙,这家伙正在床头柜上蹲着。

睡前,床头柜上的猫。

睡醒,身边躺着的长条猫。

至此,无论夜晚或午休,身边总是这家伙。拎起它的脖子出个门,却又胆怯的扒在我的肩膀上不下来。

而在家的时候,却喜欢两个腿站起来,跳出来给人来个惊吓。

又怂且皮。


接下来的日子,等到下个周末空闲点,便带上它再去打针疫苗。

然后,好好养大,养到3公斤以上。


花上的狗蛋

“狗蛋”

它尾巴甩了一下。

“老婆”

“嗯”

家,就在这。

二人一猫,一个世界。

欢迎您来到梦幻辰风(www.mhcf.net)来体验更好的阅读!

版权信息

  •  
❌