普通视图

发现新文章,点击刷新页面。
昨天以前首页
  • ✇新锐博客
  • 子比主题文章归档页面美化版莫忘
    前言 因为自己喜欢倒腾,所以从Corenext换成了子比,但不代表Corenext不好,Corenext主题绝对是做博客的首选。 我换成子比是为了倒腾一些小玩意,今天就给大家带来自己弄的一个美化版的文章归档页面 展示 教程 在子比主题的pages目录下创建一个新的php,名字随便命名,然后将如下代码放入进去 <?php /** * Template name: 新锐-文章归档 * Description: 文章归档页面,包含统计数据和文章列表 */ // 获取分类统计信息并缓存 function get_category_statistics() { return get_cached_data('category_stats', function() { $categories = get_categories(['hide_empty' => false]); $data = []; foreach ($categories as $category) {
     

子比主题文章归档页面美化版

作者 莫忘
2025年3月15日 19:25

前言

因为自己喜欢倒腾,所以从Corenext换成了子比,但不代表Corenext不好,Corenext主题绝对是做博客的首选。

我换成子比是为了倒腾一些小玩意,今天就给大家带来自己弄的一个美化版的文章归档页面

展示

图片[1]-新锐博客
图片[2]-新锐博客

教程

在子比主题的pages目录下创建一个新的php,名字随便命名,然后将如下代码放入进去

<?php
/**
 * Template name: 新锐-文章归档
 * Description: 文章归档页面,包含统计数据和文章列表
 */

// 获取分类统计信息并缓存
function get_category_statistics() {
    return get_cached_data('category_stats', function() {
        $categories = get_categories(['hide_empty' => false]);
        $data = [];
        foreach ($categories as $category) {
            $data[] = ['value' => $category->count, 'name' => $category->name];
        }
        return json_encode($data);
    });
}

// 获取最近一年每月的文章数量并缓存
function get_monthly_post_data() {
    return get_cached_data('monthly_post_data', function() {
        global $wpdb;
        $query = "
            SELECT DATE_FORMAT(post_date, '%Y-%m') AS month, COUNT(*) AS count
            FROM {$wpdb->posts}
            WHERE post_type = 'post' AND post_status = 'publish'
              AND post_date >= DATE_SUB(CURDATE(), INTERVAL 1 YEAR)
            GROUP BY month
            ORDER BY month ASC
        ";
        $results = $wpdb->get_results($query, ARRAY_A);

        $monthly_data = [];
        foreach ($results as $result) {
            $monthly_data[] = [
                'month' => $result['month'],
                'count' => $result['count']
            ];
        }
        return json_encode($monthly_data);
    });
}

// 缓存处理函数
function get_cached_data($transient_key, $callback) {
    if (false === ($data = get_transient($transient_key))) {
        $data = call_user_func($callback);
        set_transient($transient_key, $data, 12 * HOUR_IN_SECONDS);
    }
    return $data;
}

// 统计小工具
function render_archives_widgets($type = 'day') {
    $icons = [
        'day' => ['icon' => 'fa fa-calendar', 'color' => 'c-blue', 'title' => '运营时间'],
        'post' => ['icon' => 'fa fa-file-text', 'color' => 'c-green', 'title' => '文章总数'],
        'comment' => ['icon' => 'fa fa-comments', 'color' => 'c-purple', 'title' => '评论总数'],
        'user' => ['icon' => 'fa fa-users', 'color' => 'c-orange', 'title' => '注册用户']
    ];

    switch ($type) {
        case 'day':
            $first_post = get_posts(['numberposts' => 1, 'order' => 'ASC']);
            $start_time = !empty($first_post) ? strtotime($first_post[0]->post_date) : time();
            $statistic = round((time() - $start_time) / DAY_IN_SECONDS) . ' 天';
            break;
        case 'post':
            $statistic = wp_count_posts()->publish;
            break;
        case 'comment':
            $statistic = get_comment_count()['total_comments'];
            break;
        case 'user':
            $statistic = count_users()['total_users'];
            break;
        default: return;
    }

    echo '<div class="stats-widget">';
    echo '<div class="stats-header">'.$icons[$type]['title'].'</div>';
    echo '<div class="stats-content">';
    echo '<div class="stats-icon"><i class="'.$icons[$type]['icon'].' '.$icons[$type]['color'].'"></i></div>';
    echo '<div class="stats-value">'.$statistic.'</div>';
    echo '</div></div>';
}

// 注册脚本
function grace_archives_scripts() {
  
    wp_enqueue_script('echarts', 'https://cdn.jsdmirror.com/npm/echarts@5.4.0/dist/echarts.min.js', [], null, true);
     wp_enqueue_script('archives-script', get_template_directory_uri().'/js/archives.js', ['echarts', 'jquery'], null, true);
    
    // 将数据传递给 JavaScript
    wp_localize_script('archives-script', 'graceData', [
        'postData' => json_decode(get_category_statistics()),
        'monthlyPostData' => json_decode(get_monthly_post_data()),
        'ajaxUrl' => admin_url('admin-ajax.php')
    ]);
}
add_action('wp_enqueue_scripts', 'grace_archives_scripts');

// AJAX 处理翻页请求
function load_more_posts() {
    $paged = isset($_POST['page']) ? intval($_POST['page']) : 1;
    $posts_per_page = 20;

    $query = new WP_Query([
        'posts_per_page' => $posts_per_page,
        'paged' => $paged,
        'orderby' => 'post_date',
        'order' => 'DESC',
        'post_status' => 'publish'
    ]);

    if ($query->have_posts()) :
        $organized = [];
        while ($query->have_posts()) : $query->the_post();
            $year = get_the_time('Y');
            $month = get_the_time('m');
            $organized[$year][$month][] = $post;
        endwhile;

        ob_start();
        foreach ($organized as $year => $months) : ?>
            <div class="archive-year">
                <h2 class="year-title"><?php echo $year; ?></h2>
                <?php foreach ($months as $month => $posts) : ?>
                    <div class="archive-month">
                        <h3 class="month-title"><?php echo date('n月', mktime(0, 0, 0, $month, 1)); ?></h3>
                        <ul class="post-list">
                            <?php foreach ($posts as $post) : setup_postdata($post); ?>
                                <li>
                                    <time><?php the_time('m-d'); ?></time>
                                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                        <?php the_title(); ?>
                                        <?php if (get_comments_number()) : ?>
                                            <span class="comment-count">(<?php echo get_comments_number(); ?>)</span>
                                        <?php endif; ?>
                                    </a>
                                </li>
                            <?php endforeach; ?>
                        </ul>
                    </div>
                <?php endforeach; ?>
            </div>
        <?php endforeach;

        // 生成新的分页链接
        $pagination = paginate_links([
            'total' => $query->max_num_pages,
            'current' => $paged,
            'prev_next' => true,
            'prev_text' => __('« 上一页'),
            'next_text' => __('下一页 »'),
            'echo' => false
        ]);

        $output = ob_get_clean();
        wp_send_json_success([
            'data' => $output,
            'pagination' => $pagination
        ]);
    else :
        wp_send_json_error('No more posts');
    endif;
    wp_reset_postdata();
    wp_die();
}
add_action('wp_ajax_load_more_posts', 'load_more_posts');
add_action('wp_ajax_nopriv_load_more_posts', 'load_more_posts');

get_header();
?>

<main class="grace-archives">
    <div class="archive-container">
        <div class="archive-main">
            <article class="archive-article">
                <header class="archive-header">
                    <h1><?php the_title(); ?></h1>
                    <!-- 统计小工具 -->
                    <div class="stats-grid">
                        <?php 
                        render_archives_widgets('day');
                        render_archives_widgets('post');
                        render_archives_widgets('comment');
                        render_archives_widgets('user');
                        ?>
                    </div>
                </header>
                
                <!-- 图表区域 -->
                <div class="charts-container">
                    <div class="chart-box" id="postChart"></div>
                    <div class="chart-box" id="monthlyPostChart"></div>
                </div>

                <!-- 文章列表 -->
                <div class="archives-list">
                    <?php
                    // 获取当前页码
                    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                    $posts_per_page = 20;
                    
                    $query = new WP_Query([
                        'posts_per_page' => $posts_per_page,
                        'paged' => $paged,
                        'orderby' => 'post_date',
                        'order' => 'DESC',
                        'post_status' => 'publish'
                    ]);

                    if ($query->have_posts()) :
                        $organized = [];
                        while ($query->have_posts()) : $query->the_post();
                            $year = get_the_time('Y');
                            $month = get_the_time('m');
                            $organized[$year][$month][] = $post;
                        endwhile;

                        foreach ($organized as $year => $months) : ?>
                            <div class="archive-year">
                                <h2 class="year-title"><?php echo $year; ?></h2>
                                <?php foreach ($months as $month => $posts) : ?>
                                    <div class="archive-month">
                                        <h3 class="month-title"><?php echo date('n月', mktime(0, 0, 0, $month, 1)); ?></h3>
                                        <ul class="post-list">
                                            <?php foreach ($posts as $post) : setup_postdata($post); ?>
                                                <li>
                                                    <time><?php the_time('m-d'); ?></time>
                                                    <a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>">
                                                        <?php the_title(); ?>
                                                        <?php if (get_comments_number()) : ?>
                                                            <span class="comment-count">(<?php echo get_comments_number(); ?>)</span>
                                                        <?php endif; ?>
                                                    </a>
                                                </li>
                                            <?php endforeach; ?>
                                        </ul>
                                    </div>
                                <?php endforeach; ?>
                            </div>
                        <?php endforeach; 
                    else :
                        echo '<p>暂无文章</p>';
                    endif;
                    wp_reset_postdata();
                    ?>
                </div>

                <!-- 传统分页 -->
<div class="archive-pagination">
    <?php
    echo paginate_links([
        'total'     => $query->max_num_pages,
        'current'   => $paged,
        'prev_next' => true,
        'prev_text' => __('« 上一页'),
        'next_text' => __('下一页 »'),
        'type'      => 'plain', // 修改这里
        'mid_size'  => 2 // 控制显示页码数量
    ]);
    ?>
</div>
            </article>
        </div>
    </div>
</main>


<script>
// 仅保留图表初始化代码
jQuery(document).ready(function($) {
    // 初始化 ECharts 图表
    const postChart = echarts.init(document.getElementById('postChart'));
    const monthlyPostChart = echarts.init(document.getElementById('monthlyPostChart'));

    postChart.setOption({
        title: { text: '文章分类分布' },
        tooltip: { trigger: 'item' },
        series: [{
            type: 'pie',
            data: graceData.postData
        }]
    });

    monthlyPostChart.setOption({
        title: { text: '每月发文数量' },
        tooltip: { trigger: 'axis' },
        xAxis: {
            type: 'category',
            data: graceData.monthlyPostData.map(item => item.month)
        },
        yAxis: { type: 'value' },
        series: [{
            type: 'line',
            data: graceData.monthlyPostData.map(item => item.count)
        }]
    });
});
</script>

<style>
.grace-archives {
    padding: 2rem 20px;
    background: #f8f9fa;
    min-height: 100vh;
}
/* 分页容器 */
.archive-pagination {
    margin-top: 3rem;
    text-align: center;
}

/* 分页链接基础样式 */
.archive-pagination a, 
.archive-pagination span {
    display: inline-block;
    padding: 8px 16px;
    margin: 0 4px;
    border: 1px solid #e0e0e0;
    border-radius: 4px;
    color: #3498db;
    text-decoration: none;
    transition: all 0.3s;
}

/* 当前页样式 */
.archive-pagination span.current {
    background: #3498db;
    color: white;
    border-color: #3498db;
}

/* 悬停效果 */
.archive-pagination a:hover {
    background: #f8f9fa;
    border-color: #3498db;
}

/* 移动端适配 */
@media (max-width: 480px) {
    .archive-pagination a, 
    .archive-pagination span {
        padding: 6px 12px;
        margin: 2px;
        font-size: 14px;
    }
}
.archive-container {
    max-width: 1400px;
    margin: 0 auto;
}

.archive-main {
    background: #fff;
    border-radius: 12px;
    padding: 2rem;
    box-shadow: 0 4px 12px rgba(0,0,0,0.08);
}

.archive-header {
    margin-bottom: 2rem;
    border-bottom: 2px solid #f0f0f0;
    padding-bottom: 1.5rem;
}

.archive-header h1 {
    font-size: 2.2rem;
    color: #2c3e50;
    margin: 0 0 1.5rem;
}

/* 统计小工具 */
.stats-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 1.5rem;
    margin: 2rem 0;
}

.stats-widget {
    background: #ffffff;
    border: 1px solid #eaeaea;
    padding: 1.5rem;
    border-radius: 10px;
    transition: transform 0.3s ease;
}

.stats-widget:hover {
    transform: translateY(-3px);
    box-shadow: 0 6px 16px rgba(0,0,0,0.1);
}

.stats-header {
    color: #7f8c8d;
    font-size: 0.95rem;
    margin-bottom: 0.8rem;
    font-weight: 500;
}

.stats-content {
    display: flex;
    align-items: center;
    gap: 1.2rem;
}

.stats-icon i {
    font-size: 2rem;
    width: 50px;
    height: 50px;
    display: flex;
    align-items: center;
    justify-content: center;
    border-radius: 8px;
}

.stats-value {
    font-size: 1.8rem;
    font-weight: 600;
    color: #2c3e50;
}

/* 颜色定义 */
.c-blue { background: #e3f2fd; color: #2196f3; }
.c-green { background: #e8f5e9; color: #4caf50; }
.c-purple { background: #f3e5f5; color: #9c27b0; }
.c-orange { background: #fff3e0; color: #ff9800; }

/* 图表容器 */
.charts-container {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 1.5rem;
    margin: 3rem 0;
}

.chart-box {
    height: 400px;
    background: #fff;
    border: 1px solid #eee;
    border-radius: 10px;
    padding: 1rem;
}

/* 文章列表 */
.archives-list {
    margin-top: 2rem;
}

.archive-year {
    margin-bottom: 3rem;
    background: #fafafa;
    border-radius: 8px;
    padding: 1.5rem;
}

.year-title {
    font-size: 1.8rem;
    color: #2c3e50;
    margin: 0 0 1.5rem;
    padding-bottom: 0.8rem;
    border-bottom: 2px solid #eee;
}

.archive-month {
    margin-bottom: 2rem;
    background: #fff;
    border-radius: 6px;
    padding: 1rem;
    box-shadow: 0 2px 6px rgba(0,0,0,0.05);
}

.month-title {
    font-size: 1.4rem;
    color: #34495e;
    margin: 0 0 1rem;
    padding-left: 0.5rem;
}

.post-list {
    list-style: none;
    padding: 0;
    margin: 0;
}

.post-list li {
    padding: 1rem 1.2rem;
    border-bottom: 1px solid #f5f5f5;
    display: flex;
    align-items: center;
    gap: 1.5rem;
    transition: background 0.3s;
}

.post-list li:hover {
    background: #f8f9fa;
}

.post-list time {
    color: #7f8c8d;
    min-width: 70px;
    font-family: monospace;
    font-size: 0.95rem;
}

.post-list a {
    color: #2c3e50;
    transition: color 0.3s;
    flex-grow: 1;
    text-decoration: none;
    font-weight: 500;
}

.post-list a:hover {
    color: #3498db;
}

.comment-count {
    color: #95a5a6;
    font-size: 0.85em;
    margin-left: 0.8rem;
    font-weight: normal;
}

/* 分页样式 */
.archive-pagination {
    margin-top: 3rem;
    text-align: center;
    padding: 1.5rem 0;
}

.archive-pagination .page-numbers {
    display: inline-block;
    padding: 8px 16px;
    margin: 0 5px;
    border: 1px solid #e0e0e0;
    border-radius: 6px;
    color: #3498db;
    text-decoration: none;
    transition: all 0.3s;
}

.archive-pagination .page-numbers.current {
    background: #3498db;
    color: #fff;
    border-color: #3498db;
}

.archive-pagination .page-numbers:hover:not(.current) {
    background: #f8f9fa;
    border-color: #3498db;
}

/* 加载提示 */
.loading {
    text-align: center;
    padding: 1.5rem;
    color: #7f8c8d;
    font-size: 0.95rem;
}

/* 响应式设计 */
@media (max-width: 1200px) {
    .charts-container {
        grid-template-columns: 1fr;
    }
    .chart-box {
        height: 350px;
    }
}

@media (max-width: 768px) {
    .stats-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 1rem;
    }
    
    .stats-value {
        font-size: 1.6rem;
    }
    
    .archive-main {
        padding: 1.5rem;
    }
    
    .year-title {
        font-size: 1.6rem;
    }
}

@media (max-width: 480px) {
    .stats-grid {
        grid-template-columns: 1fr;
    }
    
    .stats-content {
        gap: 1rem;
    }
    
    .archive-pagination .page-numbers {
        padding: 6px 12px;
        margin: 3px;
    }
    
    .post-list li {
        flex-direction: column;
        align-items: flex-start;
        gap: 0.5rem;
        padding: 1rem;
    }
    
}
</style>
<?php get_footer(); ?>

再到子比主题根目录里的JS文件夹里创建一个archives.js的文件,然后将如下代码放进去

// archives.js 完整代码

document.addEventListener('DOMContentLoaded', function() {
    
     const chartContainers = [
        'postChart', 
        'monthlyPostChart'
    ];

    chartContainers.forEach(id => {
        const el = document.getElementById(id);
        if (!el) {
            console.warn(`图表容器 #${id} 未找到`);
            return;
        }
        
        try {
            // 初始化图表代码...
        } catch (error) {
            console.error(`初始化图表 ${id} 失败:`, error);
        }
    });
    // 获取图表容器
    const postChartEl = document.getElementById('postChart');
    const monthlyChartEl = document.getElementById('monthlyPostChart');
    
    // 检查元素是否存在
    if (!postChartEl || !monthlyChartEl) {
        console.warn('图表容器未找到,请检查元素ID是否正确');
        return;
    }

    // 初始化图表实例
    const postChart = echarts.init(postChartEl);
    const monthlyPostChart = echarts.init(monthlyChartEl);

    // 配置分类分布饼图
    postChart.setOption({
        title: { text: '文章分类分布', left: 'center' },
        tooltip: { trigger: 'item' },
        series: [{
            type: 'pie',
            radius: '55%',
            data: graceData.postData,
            emphasis: {
                itemStyle: {
                    shadowBlur: 10,
                    shadowOffsetX: 0,
                    shadowColor: 'rgba(0, 0, 0, 0.5)'
                }
            }
        }]
    });

    // 配置月度趋势折线图
    monthlyPostChart.setOption({
        title: { text: '月度发文趋势', left: 'center' },
        tooltip: { trigger: 'axis' },
        xAxis: {
            type: 'category',
            data: graceData.monthlyPostData.map(item => item.month),
            axisLabel: { rotate: 45 }
        },
        yAxis: { type: 'value' },
        series: [{
            type: 'line',
            smooth: true,
            data: graceData.monthlyPostData.map(item => item.count),
            areaStyle: { color: 'rgba(52, 152, 219, 0.2)' }
        }],
        grid: { containLabel: true }
    });

    // 窗口大小变化时自适应
    window.addEventListener('resize', function() {
        postChart.resize();
        monthlyPostChart.resize();
    });
});

最后再到页面中选择新锐-文章归档模版即可

  • ✇新锐博客
  • 记一次function代码无法生效的情况莫忘
    前言 本人喜欢瞎搞,所以子主题的function.php文件中弄了不少东西,然后也就没太在意某些代码 记录 今天有人在前一篇文章进行了留言,然后我就想要回复他,突然想到之前在function中部署了关于WordPress回复他人邮件通知的功能。 但是一直没有试验有没有部署成功,因为同款主题的其他站长确定部署成功了,我就心血来潮的想要去测试一番。 于是我就在留言板回复了自己的留言,但是一直没有收到邮件,我就知道我没有部署成功。 接着,我就找到了同款主题的其他站长询问,因为安装了wpopt插件,而插件有评论站长收到邮件通知的功能。 所以自然而然就觉得是wpopt的问题了,便有了如下对话。 但是其他人都可以,为啥就我不行呢?有没有办法解决呢? 幸好现在有强大的AI,于是我就去deepseek官网,将之前的回复他人评论邮件通知的代码发给AI,并且提问为何不生效。 AI回复我可能是因为由于其他插件的缘故,导致回复他人邮件通知的功能被屏蔽掉了。于是我就想到了提高此功能的优先级。 我便让AI帮我把功能的优先级提高了。 最终有了新的代码,当然我也让AI美化了一下界面。 传送门
     

记一次function代码无法生效的情况

作者 莫忘
2025年3月13日 00:48

前言

本人喜欢瞎搞,所以子主题的function.php文件中弄了不少东西,然后也就没太在意某些代码

记录

今天有人在前一篇文章进行了留言,然后我就想要回复他,突然想到之前在function中部署了关于WordPress回复他人邮件通知的功能。

但是一直没有试验有没有部署成功,因为同款主题的其他站长确定部署成功了,我就心血来潮的想要去测试一番。

于是我就在留言板回复了自己的留言,但是一直没有收到邮件,我就知道我没有部署成功。

接着,我就找到了同款主题的其他站长询问,因为安装了wpopt插件,而插件有评论站长收到邮件通知的功能。

所以自然而然就觉得是wpopt的问题了,便有了如下对话。

图片[1]-新锐博客

但是其他人都可以,为啥就我不行呢?有没有办法解决呢?

幸好现在有强大的AI,于是我就去deepseek官网,将之前的回复他人评论邮件通知的代码发给AI,并且提问为何不生效。

AI回复我可能是因为由于其他插件的缘故,导致回复他人邮件通知的功能被屏蔽掉了。于是我就想到了提高此功能的优先级。

我便让AI帮我把功能的优先级提高了。

最终有了新的代码,当然我也让AI美化了一下界面。

传送门

  • ✇新锐博客
  • 宝塔网站加速插件 - 让WordPress加载更快速莫忘
    前言 WordPress是一个动态博客框架,所以加载的时候就会很慢,就需要类似wp-super-cache这类插件让网站静态化 我发现wp-super-cache加上宝塔的网站加速插件能让加载变得更加快速 教程 1.宝塔面板的软件商店下载堡塔网站加速插件 2.打开网站加速插件,并且启用想要加速网站的开关 3.专属规则可以选择WordPress 4.在不缓存url地址中添加/wp-admin 5.至此配置完成了,享受网站加速的快感吧
     

宝塔网站加速插件 - 让WordPress加载更快速

作者 莫忘
2025年3月12日 12:40

前言

WordPress是一个动态博客框架,所以加载的时候就会很慢,就需要类似wp-super-cache这类插件让网站静态化

我发现wp-super-cache加上宝塔的网站加速插件能让加载变得更加快速

教程

1.宝塔面板的软件商店下载堡塔网站加速插件

图片[1]-新锐博客

2.打开网站加速插件,并且启用想要加速网站的开关

图片[2]-新锐博客

3.专属规则可以选择WordPress

4.在不缓存url地址中添加/wp-admin

图片[3]-新锐博客

5.至此配置完成了,享受网站加速的快感吧

  • ✇新锐博客
  • WordPress解决feed文件首行换行莫忘
    前言 访问各个大佬博客的时候,有个类似开往的项目,名为blogsclub,站点地址:https://www.blogsclub.org/ 过程 闲来无事就加入了其中,它有个功能是通过WordPress的feed抓取文章,但是我设置了feed却提示没有抓取成功随后就收到了他们官方发出的邮件,提示feed文件首行出现了换行,众所周知,feed是由WordPress自行生成的,不像sitemap可以通过插件来生成所以遇到此类麻烦就很难受,于是只能由最新大热的deepseek来解决,AI告诉我,需要检查各种php文件来确保之前并没有出现换行或空格但是那样就很麻烦,所以我就让deepseek帮我把feed顶部的空格直接删掉就行了。于是就有了以下教程 教程 将如下代码放到主题的function.php文件中 function remove_xml_declaration_whitespace() { // 检查当前页面是否是 feed 页面 if (is_feed()) { // 清空所有现有的输出缓冲区 while (ob_get_level(
     

WordPress解决feed文件首行换行

作者 莫忘
2025年3月2日 12:40

前言

访问各个大佬博客的时候,有个类似开往的项目,名为blogsclub,站点地址:https://www.blogsclub.org/

过程

闲来无事就加入了其中,它有个功能是通过WordPress的feed抓取文章,但是我设置了feed却提示没有抓取成功
随后就收到了他们官方发出的邮件,提示feed文件首行出现了换行,众所周知,feed是由WordPress自行生成的,不像sitemap可以通过插件来生成
所以遇到此类麻烦就很难受,于是只能由最新大热的deepseek来解决,AI告诉我,需要检查各种php文件来确保之前并没有出现换行或空格
但是那样就很麻烦,所以我就让deepseek帮我把feed顶部的空格直接删掉就行了。
于是就有了以下教程

教程

将如下代码放到主题的function.php文件中

function remove_xml_declaration_whitespace() {
    // 检查当前页面是否是 feed 页面
    if (is_feed()) {
        // 清空所有现有的输出缓冲区
        while (ob_get_level() > 0) {
            ob_end_clean();
        }

        // 启动一个新的输出缓冲区,并指定回调函数
        ob_start(function($buffer) {
            // 使用正则表达式删除 XML 声明前的所有空格和换行符
            return preg_replace('/^s*(<?xml)/', '$1', $buffer);
        });
    }
}

// 将函数挂载到 WordPress 的 'wp' 动作上,优先级为 1
add_action('wp', 'remove_xml_declaration_whitespace', 1);
  • ✇新锐博客
  • Seelen UI - Windows桌面美化莫忘
    前言 一直看一种事物都会造成视觉疲劳,所以就需要Windows桌面美化程序来解决这一问题 项目地址 Github:https://github.com/eythaann/Seelen-UI 截图 软件特色 Seelen UI 提供多种主题和布局选项,可以自由调整菜单、小部件等元素,打造独特的个性化桌面。无论你喜欢简约风格还是复杂布局,都能找到适合自己的设置。 内置媒体模块,支持主流音乐播放器,无需打开额外窗口就能控制音乐播放。这个功能特别适合在工作时听音乐的用户,方便快捷。 简单的设置,让新手也能轻松上手 教程 1.首先打开项目地址,然后到releases下载最新的安装包 2.打开并且安装程序 3.根据自己的爱好设置软件
     

Seelen UI - Windows桌面美化

作者 莫忘
2025年2月28日 21:04

前言

一直看一种事物都会造成视觉疲劳,所以就需要Windows桌面美化程序来解决这一问题

项目地址

Github:https://github.com/eythaann/Seelen-UI

截图

图片[1]-新锐博客

软件特色

  • Seelen UI 提供多种主题和布局选项,可以自由调整菜单、小部件等元素,打造独特的个性化桌面。无论你喜欢简约风格还是复杂布局,都能找到适合自己的设置。
  • 内置媒体模块,支持主流音乐播放器,无需打开额外窗口就能控制音乐播放。这个功能特别适合在工作时听音乐的用户,方便快捷。
  • 简单的设置,让新手也能轻松上手

教程

1.首先打开项目地址,然后到releases下载最新的安装包

2.打开并且安装程序

3.根据自己的爱好设置软件

  • ✇新锐博客
  • WordPress解决用户名枚举漏洞禁用REST API莫忘
    前言 今天群里有人说会通过某个地址泄露用户名导致有被爆破的风险,并且给出了解决方案 教程 首先检查一下自己的网站有没有这个漏洞,访问如下网站即可 https://博客域名.com/wp-json/wp/v2/users/ 如果有就到主题的function.php文件中添加如下代码 add_filter('rest_authentication_errors', function ($access) { return new wp_error('rest_cannot_access', 'REST API不再提供访问', ['status' => 403]); }); 此代码禁用了REST API
     

WordPress解决用户名枚举漏洞禁用REST API

作者 莫忘
2025年2月24日 02:31

前言

今天群里有人说会通过某个地址泄露用户名导致有被爆破的风险,并且给出了解决方案

教程

首先检查一下自己的网站有没有这个漏洞,访问如下网站即可

https://博客域名.com/wp-json/wp/v2/users/

如果有就到主题的function.php文件中添加如下代码

add_filter('rest_authentication_errors', function ($access) { return new wp_error('rest_cannot_access', 'REST API不再提供访问', ['status' => 403]); });

此代码禁用了REST API

  • ✇新锐博客
  • 零成本使用cloudflare和vercel部署AI文章摘要莫忘
    前言 搭建网站的各位朋友应该都听说过AI摘要,而其中最出名的就是Tianli,但是呢,五万就需要10米,对我来说还是有点多,穷人一个。 所以就想着研究一下有没有免费的AI摘要项目,今天逛博客的时候就遇到了一个 博客地址 Floatsheep:https://blog.hesiy.cn/posts/qwen-summary 项目地址 Github:https://github.com/FloatSheep/Qwen-Post-Summary/ 教程 1.首先将项目地址fork到自己的github中 2.登录并且找到cloudflare的workers,选择LLM APP模版创建,一定要选择此模版 3.编辑代码,将workers.js的代码放到里面并且部署 4.记录好cloudflare提供的域名,然后到vercel中部署 5.部署好以后,找到项目的storage,然后新建一个数据库 6.有kv的选择kv没有kv的数据库选择Upstash for Redis 7.重新部署项目 8.然后到 FloatBlog / cfai.html 或者 client 找到相应的js和css代码部署到网站中
     

零成本使用cloudflare和vercel部署AI文章摘要

作者 莫忘
2025年2月16日 18:14

前言

搭建网站的各位朋友应该都听说过AI摘要,而其中最出名的就是Tianli,但是呢,五万就需要10米,对我来说还是有点多,穷人一个。

所以就想着研究一下有没有免费的AI摘要项目,今天逛博客的时候就遇到了一个

博客地址

Floatsheep:https://blog.hesiy.cn/posts/qwen-summary

项目地址

Github:https://github.com/FloatSheep/Qwen-Post-Summary/

教程

1.首先将项目地址fork到自己的github中

2.登录并且找到cloudflare的workers,选择LLM APP模版创建,一定要选择此模版

3.编辑代码,将workers.js的代码放到里面并且部署

4.记录好cloudflare提供的域名,然后到vercel中部署

5.部署好以后,找到项目的storage,然后新建一个数据库

6.有kv的选择kv没有kv的数据库选择Upstash for Redis

7.重新部署项目

8.然后到 FloatBlog / cfai.html 或者 client 找到相应的js和css代码部署到网站中即可

  • ✇新锐博客
  • nginx反向代理github莫忘
    前言 因为众所周知的缘故,github时常访问不了,于是就想着反代一下,刚好有台华为云的香港服务器,于是火毅盾的负责人就给了我以下代码 此反代除了登录其他基本没啥问题 教程 1.打开宝塔面板,找到网站的反向代理,设置代理地址为https://github.com,发送域名为$host,然后确定之后可以看到有个配置文件,将如下代码放进去 location ^~ / { # 将请求代理到 GitHub proxy_pass https://github.com; # 设置转发到后端服务器的请求头 proxy_set_header Host github.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header Upgrade $http_upgrade;
     

nginx反向代理github

作者 莫忘
2025年2月6日 22:44

前言

因为众所周知的缘故,github时常访问不了,于是就想着反代一下,刚好有台华为云的香港服务器,于是火毅盾的负责人就给了我以下代码

此反代除了登录其他基本没啥问题

教程

1.打开宝塔面板,找到网站的反向代理,设置代理地址为https://github.com,发送域名为$host,然后确定之后可以看到有个配置文件,将如下代码放进去

location ^~ / {
    # 将请求代理到 GitHub
    proxy_pass https://github.com;

    # 设置转发到后端服务器的请求头
    proxy_set_header Host github.com;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    proxy_http_version 1.1;

    # 清空 Accept-Encoding 头,防止后端返回压缩内容
    proxy_set_header Accept-Encoding "";

    # 替换响应内容中的字符串
    sub_filter "github.githubassets.com" "assets-github.xrbk.cn";
    sub_filter "github.com" "github.xrbk.cn";
    sub_filter "api.github.com" "api-github.xrbk.cn";
    sub_filter 'raw.githubusercontent.com' 'raw.github.xrbk.cn';
    sub_filter_once off;
    sub_filter_types *;

    # 处理 302 重定向中的地址替换
    proxy_redirect ~^https://raw.githubusercontent.com(.*)$ https://raw.github.xrbk.cn$1;

    # 隐藏后端服务器返回的 Content-Security-Policy 头
    proxy_hide_header Content-Security-Policy;

    # 添加自定义的 Content-Security-Policy 头
    add_header Content-Security-Policy "default-src 'self'; img-src *; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'";

    # 静态文件缓存设置
    set $static_fileHbPPNEua 0;
    if ($uri ~* ".(gif|png|jpg|css|js|woff|woff2)$") {
        set $static_fileHbPPNEua 1;
        expires 1m;
    }
    if ($static_fileHbPPNEua = 0) {
        add_header Cache-Control no-cache;
    }
}

2.其中为xrbk.cn的后缀都需要更改为你的域名

3.在宝塔的网站里比如github.xrbk.cn中再添加其他例如api-github.xrbk.cn的域名

4.去服务商那解析这几个子域名即可

  • ✇新锐博客
  • 飞牛OS使用一段时间的感受莫忘
    前言 因为有旧电脑,所以就弄了个飞牛OS,浅说一下使用感受 感受 1.界面UI个人非常喜欢,但是因为是网页版,所以还是有点美中不足的,要是有电脑端的软件就好了 2.之前说过因为没有公网IP,所以进行了frp内网穿透,在使用的过程中感觉还是不错的,但是受制于服务端的带宽,有时候会出现加载慢的情况,这也是没办法的事情 3.其实飞牛os目前我使用最多的还是相册,美中不足的就是无法设置相册的缩略图 4.常见的应用已经不少,但是对于我来说还是有点不够,而且大部分都依托于docker 5.手机APP无法操作docker,只能网页版操作,这点还是很难受的 6.最后就是功耗了,因为使用的是旧电脑,CPU还是i3 7100,所以功耗还是有点大的 结语 目前来说飞牛OS对于我这种刚玩nas的人非常友好,界面好看且操作简单。 本文只是阐述我最近几天使用飞牛OS的感受,记录一下,大佬勿喷。 如果你有想玩nas的想法,还是买个小主机然后装个飞牛os就行了。
     

飞牛OS使用一段时间的感受

作者 莫忘
2025年1月13日 00:17

前言

因为有旧电脑,所以就弄了个飞牛OS,浅说一下使用感受

感受

1.界面UI个人非常喜欢,但是因为是网页版,所以还是有点美中不足的,要是有电脑端的软件就好了

2.之前说过因为没有公网IP,所以进行了frp内网穿透,在使用的过程中感觉还是不错的,但是受制于服务端的带宽,有时候会出现加载慢的情况,这也是没办法的事情

3.其实飞牛os目前我使用最多的还是相册,美中不足的就是无法设置相册的缩略图

4.常见的应用已经不少,但是对于我来说还是有点不够,而且大部分都依托于docker

5.手机APP无法操作docker,只能网页版操作,这点还是很难受的

6.最后就是功耗了,因为使用的是旧电脑,CPU还是i3 7100,所以功耗还是有点大的

结语

目前来说飞牛OS对于我这种刚玩nas的人非常友好,界面好看且操作简单。

本文只是阐述我最近几天使用飞牛OS的感受,记录一下,大佬勿喷。

如果你有想玩nas的想法,还是买个小主机然后装个飞牛os就行了。

  • ✇新锐博客
  • WordPress添加回复评论邮件通知莫忘
    前言 之前就想要弄这个功能了,但是主题不支持,今天果核更新了主题终于支持了 教程 将如下代码放到子主题的function.php 中即可 /** * 新评论回复邮件通知函数(带按钮,美化界面) */ function comment_mail_notify($comment_id) { // 获取评论对象 $comment = get_comment($comment_id); if (!$comment || $comment->comment_approved === 'spam') { return; // 如果评论不存在或标记为垃圾评论,直接返回 } // 获取父评论 ID $parent_id = $comment->comment_parent ? $comment->comment_parent : ''; if (empty($parent_id)) { return; // 如果没有父评论,直接返回 } // 获取父评论对象 $pa
     

WordPress添加回复评论邮件通知

作者 莫忘
2025年1月11日 00:27

前言

之前就想要弄这个功能了,但是主题不支持,今天果核更新了主题终于支持了

教程

将如下代码放到子主题的function.php 中即可

/**
 * 新评论回复邮件通知函数(带按钮,美化界面)
 */
function comment_mail_notify($comment_id) {
    // 获取评论对象
    $comment = get_comment($comment_id);
    if (!$comment || $comment->comment_approved === 'spam') {
        return; // 如果评论不存在或标记为垃圾评论,直接返回
    }

    // 获取父评论 ID
    $parent_id = $comment->comment_parent ? $comment->comment_parent : '';
    if (empty($parent_id)) {
        return; // 如果没有父评论,直接返回
    }

    // 获取父评论对象
    $parent_comment = get_comment($parent_id);
    if (!$parent_comment || empty($parent_comment->comment_author_email)) {
        return; // 如果父评论不存在或邮箱为空,直接返回
    }

    // 获取收件人邮箱
    $to = trim($parent_comment->comment_author_email);

    // 构造邮件内容
    $wp_email = 'no-reply@' . preg_replace('#^www.#', '', strtolower($_SERVER['SERVER_NAME']));
    $subject  = '您在 [' . get_option("blogname") . '] 的留言有了回复';
    $comment_link = get_comment_link($comment_id);
    $message  = '
    <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; border: 1px solid #e0e0e0; border-radius: 8px; background-color: #f9f9f9;">
        <h2 style="color: #333; font-size: 24px; margin-bottom: 20px;">' . trim($parent_comment->comment_author) . ', 您好!</h2>
        <p style="color: #555; font-size: 16px; line-height: 1.6;">
            您曾在文章《' . get_the_title($comment->comment_post_ID) . '》中留言:
        </p>
        <blockquote style="margin: 20px 0; padding: 10px 20px; background-color: #fff; border-left: 4px solid #0073aa; color: #666; font-style: italic;">
            ' . trim($parent_comment->comment_content) . '
        </blockquote>
        <p style="color: #555; font-size: 16px; line-height: 1.6;">
            ' . trim($comment->comment_author) . ' 给您的回复:
        </p>
        <blockquote style="margin: 20px 0; padding: 10px 20px; background-color: #fff; border-left: 4px solid #0073aa; color: #666; font-style: italic;">
            ' . trim($comment->comment_content) . '
        </blockquote>
        <p style="color: #555; font-size: 16px; line-height: 1.6; text-align: center;">
            点击下方按钮查看完整回复内容:
        </p>
        <div style="text-align: center; margin: 20px 0;">
            <a href="' . $comment_link . '" style="display: inline-block; padding: 12px 24px; font-size: 16px; color: #fff; background-color: #0073aa; border-radius: 4px; text-decoration: none;">
                查看回复
            </a>
        </div>
        <p style="color: #555; font-size: 16px; line-height: 1.6;">
            感谢您对 ' . get_option('blogname') . ' 的支持!
        </p>
        <p style="color: #999; font-size: 14px; margin-top: 20px; text-align: center;">
            此邮件由系统自动发送,请勿直接回复。
        </p>
    </div>';

    // 设置邮件头
    $headers = [
        'From: "' . get_option('blogname') . '" <' . $wp_email . '>',
        'Content-Type: text/html; charset=' . get_option('blog_charset'),
    ];

    // 发送邮件
    wp_mail($to, $subject, $message, $headers);
}

// 挂载钩子
add_action('comment_post', 'comment_mail_notify', 5, 1);
add_action('wp_insert_comment', 'comment_mail_notify', 5, 1);
  • ✇新锐博客
  • HEU_KMS_Activator 系统激活工具莫忘
    前言 因为喜欢折腾,所以有时候要安装系统,这时候就需要激活新系统 简介 HEU KMS Activator,简洁高效的全能KMS/OEM激活工具,适用所有windows, office版本,无需联网即可一键激活,支持UEFI的KMS激活工具。KMS服务是微软对Windows, Office等产品的批量许可服务,利用KMS可以激活局域网内的产品。该工具利用KMS机制在系统搭建KMS服务器,从而实现在线或离线激活。 功能介绍 1、智能激活:智能识别最佳的激活方式 优先顺序依次为数字许可证/KMS38/OEM/KMS 自动识别并跳过已经永久激活的Windows/Office 2、KMS激活 安装/卸载自动续期功能,两种模式可供选择[1]自动续订模式(默认 [2]任务计划模式 清除KMS客户端信息:清除KMS服务器地址、端口、激活时间间隔、续订时间间隔等 搭建KMS服务器[手动激活]:KMS服务器地址/端口 3、数字激活(数字许可证激活、KMS38激活) 添加/解除KMS38保护,免受180天激活影响,除非解除保护,否则不能使用KMS38激活 查看当前系统信息:网络状态/激活状态,描述便于快速
     

HEU_KMS_Activator 系统激活工具

作者 莫忘
2025年1月5日 13:25

前言

因为喜欢折腾,所以有时候要安装系统,这时候就需要激活新系统

简介

HEU KMS Activator,简洁高效的全能KMS/OEM激活工具,适用所有windows, office版本,无需联网即可一键激活,支持UEFI的KMS激活工具。KMS服务是微软对Windows, Office等产品的批量许可服务,利用KMS可以激活局域网内的产品。该工具利用KMS机制在系统搭建KMS服务器,从而实现在线或离线激活。

功能介绍

1、智能激活:智能识别最佳的激活方式

优先顺序依次为数字许可证/KMS38/OEM/KMS

自动识别并跳过已经永久激活的Windows/Office

2、KMS激活

安装/卸载自动续期功能,两种模式可供选择[1]自动续订模式(默认 [2]任务计划模式

清除KMS客户端信息:清除KMS服务器地址、端口、激活时间间隔、续订时间间隔等

搭建KMS服务器[手动激活]:KMS服务器地址/端口

3、数字激活(数字许可证激活、KMS38激活)

添加/解除KMS38保护,免受180天激活影响,除非解除保护,否则不能使用KMS38激活

查看当前系统信息:网络状态/激活状态,描述便于快速查看是否支持数字许可证/KMS38

4、OEM激活(提供6种模式)

卸载OEM激活信息:清除动态加载的SLIC等信息,OEM激活将失效

生产$OEM$文件夹:可将该文件夹置于ISO镜像source文件夹下,以集成OEM激活功能

5、更改Windows 10版本、激活信息备份还原、Microsoft Office 零售版转换批量授权版

6、Windows/Office密钥管理功能:安装密钥、卸载密钥、查看密钥、清除Office许可证

7、智能激活、激活成功率高、支持静默参数、几乎支持所有 Windows/Office 所有版本

8、Windows 7上无需依赖.NET Framework、能够离线激活,也能连接网络服务器激活

软件下载

HEU_KMS_Activator_系统激活工具
  • ✇新锐博客
  • 阿里云服务器SWAP导致的硬盘读取爆满问题莫忘
    前言 因为本人喜欢折腾,所以在建立博客之后不久就使用了umami统计 过程 在2024年购入了这台阿里云99计划的云服务器,当时认为这台云服务器性价比很高。 毕竟在服务商日益内卷的情况下,99一年就能拥有2h2g 3m 40g硬盘无限流量的服务商也是不多了。 经过了一段时间的使用感觉也是还可以的,搭配CDN,网站访问速度也是不错的。 但是每隔一段时间服务器的就莫名的硬盘读取达到117mb/s,而写入却仅有几十kb/s。 后来经过排查发现可能是umami的问题,因为除了umami是docker部署的以外,其他程序也仅仅只有WordPress了 而本站也是个小博客,日访问量仅有100,访问人数也就二三十,哪怕有人攻击CDN那边也会有日志。 但是离奇的就是cdn也没有日志,硬盘却爆满了,于是我就怀疑是umami的问题。 那为啥标题会是阿里云服务器SWAP导致的硬盘读取爆满问题呢? 因为在别人的服务器哪怕是配置比我低一点的腾讯云服务器上别人也不会有硬盘读取高达117mb/s的问题 严重怀疑是因为网站一直处于访问的状态,所以umami就一直在记录东西,然后内存占用就会高起来,而我服务器配置也不高
     

阿里云服务器SWAP导致的硬盘读取爆满问题

作者 莫忘
2025年1月3日 19:36

前言

因为本人喜欢折腾,所以在建立博客之后不久就使用了umami统计

过程

在2024年购入了这台阿里云99计划的云服务器,当时认为这台云服务器性价比很高。

毕竟在服务商日益内卷的情况下,99一年就能拥有2h2g 3m 40g硬盘无限流量的服务商也是不多了。

经过了一段时间的使用感觉也是还可以的,搭配CDN,网站访问速度也是不错的。

但是每隔一段时间服务器的就莫名的硬盘读取达到117mb/s,而写入却仅有几十kb/s。

后来经过排查发现可能是umami的问题,因为除了umami是docker部署的以外,其他程序也仅仅只有WordPress了

而本站也是个小博客,日访问量仅有100,访问人数也就二三十,哪怕有人攻击CDN那边也会有日志。

但是离奇的就是cdn也没有日志,硬盘却爆满了,于是我就怀疑是umami的问题。

那为啥标题会是阿里云服务器SWAP导致的硬盘读取爆满问题呢?

因为在别人的服务器哪怕是配置比我低一点的腾讯云服务器上别人也不会有硬盘读取高达117mb/s的问题

严重怀疑是因为网站一直处于访问的状态,所以umami就一直在记录东西,然后内存占用就会高起来,而我服务器配置也不高并且内存占用就已经达到70%了。

所以一旦umami使内存高起来后,服务器就会启用swap也就是虚拟内存。而虚拟内存使用的就是硬盘,但是阿里云的硬盘读取上限为117mb/s。

达到这个上限后就会一直卡着连服务器都连接不了只能重启,而同样配置甚至低一点配置的腾讯云就没遇到过我这种情况。

现在我已经将umami迁移到其他服务器上一个礼拜了,也没遇到过硬盘读取爆高的情况,之前两三天就会遇到一次。

  • ✇新锐博客
  • 适合小白的NAS系统飞牛OS安装教程莫忘
    前言 之前有一个旧电脑放在那没用,于是就想着用弄个nas系统来玩玩 教程 1.首先在可以联网的电脑上下载飞牛os的镜像包和写盘软件,写盘软件上一篇文章已经介绍了 2.打开写盘软件rufus,选择U盘(至少8G),选择镜像文件,其他文件都默认即可 3.制作启动盘结束以后插入到需要安装飞牛OS的电脑,然后在电脑启动刚开始的时候按DEL键(按照提示来,没有提示的就百度搜对应主板进入bios的方法) 4.设置启动项为U盘启动,然后就会提示你选择制作方式,选择第一个 Graphical Install ,如果有其他提示则选择第二个。 5.我在安装的时候提示了452报错,最终在我重新制作启动盘之后解决了这个问题,你们如果遇到其他情况也可以重新制作启动盘 6.进入到设置界面选择系统盘,建议是64G,而我选择的是20G,swap选择4G就差不多了 7.确认安装就可以了然后等待安装结束后确认网卡无误就能进入系统了 8.进入到指定的url地址就可以设置账户和密码了,这样就可以开启飞牛os之旅了,是不是很简单。
     

适合小白的NAS系统飞牛OS安装教程

作者 莫忘
2024年12月30日 17:01

前言

之前有一个旧电脑放在那没用,于是就想着用弄个nas系统来玩玩

教程

1.首先在可以联网的电脑上下载飞牛os的镜像包和写盘软件,写盘软件上一篇文章已经介绍了

2.打开写盘软件rufus,选择U盘(至少8G),选择镜像文件,其他文件都默认即可

image-20240826144432487

3.制作启动盘结束以后插入到需要安装飞牛OS的电脑,然后在电脑启动刚开始的时候按DEL键(按照提示来,没有提示的就百度搜对应主板进入bios的方法)

4.设置启动项为U盘启动,然后就会提示你选择制作方式,选择第一个 Graphical Install ,如果有其他提示则选择第二个。

img_v3_02eb_e43e6332-03f4-46ba-bbb7-873970e5e62g

5.我在安装的时候提示了452报错,最终在我重新制作启动盘之后解决了这个问题,你们如果遇到其他情况也可以重新制作启动盘

6.进入到设置界面选择系统盘,建议是64G,而我选择的是20G,swap选择4G就差不多了

img_v3_02e4_c9914569-6898-4134-bfa8-21094f7ca10g

7.确认安装就可以了然后等待安装结束后确认网卡无误就能进入系统了

image-20240823180036795

8.进入到指定的url地址就可以设置账户和密码了,这样就可以开启飞牛os之旅了,是不是很简单。

  • ✇新锐博客
  • PixPro-支持三种存储的图床程序莫忘
    前言 今天给大家带来一个小巧简洁的图床程序 开源地址 github:https://github.com/JLinMr/PixPro/ 简介 一款专为个人需求设计的高效图床解决方案,集成了强大的图片压缩功能与优雅的前台后台管理界面。 项目结构精简高效,提供自定义图片压缩率与尺寸设置,有效降低存储与带宽成本。 支持上传JPEG、PNG、GIF格式图片并转换为WEBP格式,支持上传SVG、WEBP图片。 支持本地储存,阿里云OSS储存,S3存储。可通过把储存桶挂载到本地的方式解锁更多储存方式。 简洁美观的前端,支持点击、拖拽、粘贴、URL、批量上传。 瀑布流管理后台,便捷查看图片信息,支持图片灯箱、AJAX无加载刷新。 支持自定义压缩率,默认60。支持设置每日上传限制,单次上传限制,文件大小限制 演示站点   前端:https://dev.ruom.top/ 后台:https://dev.ruom.top/admin/ 安装教程   首先下载源码ZIP,将文件上传到网站根目录,访问网址 ,填写相关信息,即可完成安装。 运行环境   推荐PHP 8.1 + MySQL >=
     

PixPro-支持三种存储的图床程序

作者 莫忘
2024年12月7日 13:58

前言

今天给大家带来一个小巧简洁的图床程序

开源地址

github:https://github.com/JLinMr/PixPro/

简介

一款专为个人需求设计的高效图床解决方案,集成了强大的图片压缩功能与优雅的前台后台管理界面。

项目结构精简高效,提供自定义图片压缩率与尺寸设置,有效降低存储与带宽成本。

支持上传JPEG、PNG、GIF格式图片并转换为WEBP格式,支持上传SVG、WEBP图片。

支持本地储存,阿里云OSS储存,S3存储。可通过把储存桶挂载到本地的方式解锁更多储存方式。

简洁美观的前端,支持点击、拖拽、粘贴、URL、批量上传。

瀑布流管理后台,便捷查看图片信息,支持图片灯箱、AJAX无加载刷新。

支持自定义压缩率,默认60。支持设置每日上传限制,单次上传限制,文件大小限制

演示站点

 

前端:https://dev.ruom.top/

后台:https://dev.ruom.top/admin/

安装教程

 

首先下载源码ZIP,将文件上传到网站根目录,访问网址 ,填写相关信息,即可完成安装。

运行环境

 

推荐PHP 8.1 + MySQL >= 5.7

本程序依赖PHP的 Fileinfo 、 Imagick 、 exif拓展,需要自行安装。依赖 pcntl 扩展(宝塔PHP默认已安装)

要求 pcntl_signal 和 pcntl_alarm 函数可用(需主动解除禁用)

  • ✇新锐博客
  • WordPress底部添加页面生成时间和数据库查询次数莫忘
    前言 今天有个群友要在网站底部添加页面生成时间和数据库查询次数,虽然wpopt插件可以实现这个功能,但是仅能管理员查看 效果图 教程 1.首先在function.php 文件中添加如下代码,有子主题可以添加到子主题中 function display_query_count_with_timer() { $query_count = get_num_queries(); $query_time = timer_stop(0, 3); $output = "<p>本次数据库查询" . $query_count . "次,页面生成花费".$query_time."秒</p>"; return $output; } add_shortcode('query_timer', 'display_query_count_with_timer'); 2.如果想添加在底部可以使用WordPress的小工具中的文本,只需要输入[query_timer] 即可。
     

WordPress底部添加页面生成时间和数据库查询次数

作者 莫忘
2024年12月5日 18:19

前言

今天有个群友要在网站底部添加页面生成时间和数据库查询次数,虽然wpopt插件可以实现这个功能,但是仅能管理员查看

效果图

图片[1]-新锐博客

教程

1.首先在function.php 文件中添加如下代码,有子主题可以添加到子主题中

function display_query_count_with_timer() {
    $query_count = get_num_queries();
    $query_time = timer_stop(0, 3);
    $output = "<p>本次数据库查询" . $query_count . "次,页面生成花费".$query_time."秒</p>";
    return $output;
}
add_shortcode('query_timer', 'display_query_count_with_timer');

2.如果想添加在底部可以使用WordPress的小工具中的文本,只需要输入[query_timer] 即可。

  • ✇新锐博客
  • 华为云白嫖13个月Flexus服务器莫忘
    前言 现在许多厂家都有免费送券的活动,今天就介绍一个华为云的送卷活动 教程 活动地址 华为云:https://developer.huaweicloud.com/space/program/list 1.打开活动地址然后登录账号 2.然后在沃土云创中申请计划 3.就可以在激励管理中领取卷了 4.华为云上方搜索Flexus L服务器然后选购2H1G的香港服务器 5.千万不要选择一年而是要选择9个月,然后再续费就可以白嫖十三个月的服务器了,当然多花五块钱是可以多白嫖一个月的。
     

华为云白嫖13个月Flexus服务器

作者 莫忘
2024年11月23日 23:11

前言

现在许多厂家都有免费送券的活动,今天就介绍一个华为云的送卷活动

教程

活动地址

华为云:https://developer.huaweicloud.com/space/program/list

1.打开活动地址然后登录账号

2.然后在沃土云创中申请计划

图片[1]-新锐博客

3.就可以在激励管理中领取卷了

图片[2]-新锐博客

4.华为云上方搜索Flexus L服务器然后选购2H1G的香港服务器

5.千万不要选择一年而是要选择9个月,然后再续费就可以白嫖十三个月的服务器了,当然多花五块钱是可以多白嫖一个月的。

  • ✇新锐博客
  • acmex可视化申请SSL证书莫忘
    前言 前一篇文章教大家如何自签证书,但是有人会想自签证书得不到浏览器的认可啊,会不会有些cdn回源不支持自签证书啊,所以就用acmex申请一个SSL证书就好了。 开源地址 Github:https://github.com/sometiny/acmex 教程 1.首先下载工具包:https://github.com/sometiny/acmex/releases 2.系统不能是centos7.9,至少是ubuntu22.04这种,亲测 3.上传工具包到网站根目录,然后解压找到linux-x64里面的acmex脚本 4.终端执行如下代码 ./acmex setup --listen-at "0.0.0.0:1084" 5.会让你填写yes/no,填写yes即可 6.继续执行如下两条命令(都需要执行) ./acmex --runas console ./acmex --install-as acmex 第一个是启动脚本,第二是将脚本变成名为acmex的系统任务 7.访问外网ip+1084端口就可以访问页面了。 结语 这样我们就可以通过这个页面申请免费的SSL证书了,可视化的,避免不懂代码搞
     

acmex可视化申请SSL证书

作者 莫忘
2024年11月21日 13:55

前言

前一篇文章教大家如何自签证书,但是有人会想自签证书得不到浏览器的认可啊,会不会有些cdn回源不支持自签证书啊,所以就用acmex申请一个SSL证书就好了。

开源地址

Github:https://github.com/sometiny/acmex

教程

1.首先下载工具包:https://github.com/sometiny/acmex/releases

2.系统不能是centos7.9,至少是ubuntu22.04这种,亲测

3.上传工具包到网站根目录,然后解压找到linux-x64里面的acmex脚本

4.终端执行如下代码

./acmex setup --listen-at "0.0.0.0:1084"

5.会让你填写yes/no,填写yes即可

6.继续执行如下两条命令(都需要执行)

./acmex --runas console
./acmex --install-as acmex

第一个是启动脚本,第二是将脚本变成名为acmex的系统任务

7.访问外网ip+1084端口就可以访问页面了。

结语

这样我们就可以通过这个页面申请免费的SSL证书了,可视化的,避免不懂代码搞错了。

  • ✇新锐博客
  • 利用自签证书免去宝塔更换证书的烦恼莫忘
    前言 相信不少小伙伴都用上了cdn,而不少CDN都带有自动续签SSL证书的功能,但是宝塔如果也自动续签的话就有可能不一样了,所以自签证书是最好的选择。 教程 1.打开网址:https://bkssl.com/ssl/selfsign 2.按如下图设置 3.将生成的证书上传到宝塔内就可以了
     
  • ✇新锐博客
  • Win11和Win10我们该如何选择?莫忘
    前言 我是一个比较喜欢折腾的人,无论是网站还是自己的电脑,所以有时候就会在电脑上折腾一些无关紧要的玩意。 但是会导致电脑出现问题,所以这时候只能重装系统来解决。 碎语 现如今主流的家用PC电脑选择的系统无非两个,一个是Window11,一个是Window10 对于这两个系统我都使用过不短的时间。下面就说一下个人认为的优缺点 优点 win10的优点显而易见,稳定且相较于win11不会很臃肿,而且在各路大佬的优化和精简之下,系统体积明显比win11小很多 win11的优点用过的人都知道,那就是美观。无论是右键菜单还是对于第三方软件的ui都有进一步的美化 缺点 win10的缺点就是系统更新不频繁,而且相较于win11少了许多系统自带的功能,比如安卓子系统 win11的缺点就是第三方软件比如我经常使用的斗鱼对它的兼容不是很好,容易出现音画不同步,其次就是对于游戏来说win11就不如win10了 总结 如果你电脑配置足够高且不怎么玩游戏的情况下,win11是你不错的选择。但是如果玩游戏的话哪怕只是英雄联盟等不吃电脑配置的游戏最好使用win10系统。
     

Win11和Win10我们该如何选择?

作者 莫忘
2024年11月14日 13:26

前言

我是一个比较喜欢折腾的人,无论是网站还是自己的电脑,所以有时候就会在电脑上折腾一些无关紧要的玩意。

但是会导致电脑出现问题,所以这时候只能重装系统来解决。

碎语

现如今主流的家用PC电脑选择的系统无非两个,一个是Window11,一个是Window10

对于这两个系统我都使用过不短的时间。下面就说一下个人认为的优缺点

优点

win10的优点显而易见,稳定且相较于win11不会很臃肿,而且在各路大佬的优化和精简之下,系统体积明显比win11小很多

win11的优点用过的人都知道,那就是美观。无论是右键菜单还是对于第三方软件的ui都有进一步的美化

缺点

win10的缺点就是系统更新不频繁,而且相较于win11少了许多系统自带的功能,比如安卓子系统

win11的缺点就是第三方软件比如我经常使用的斗鱼对它的兼容不是很好,容易出现音画不同步,其次就是对于游戏来说win11就不如win10了

总结

如果你电脑配置足够高且不怎么玩游戏的情况下,win11是你不错的选择。但是如果玩游戏的话哪怕只是英雄联盟等不吃电脑配置的游戏最好使用win10系统。

  • ✇新锐博客
  • WordPress侧边栏添加欢迎语莫忘
    前言 今天逛博客看到一个好玩的东西,分享给大家 参考 原地址:https://blog.shiguang666.eu.org/2024/10/25/479d38b5fc12/ 教程 1.首先去青桔API申请key,目前我们使用到的API是完全免费且无次数限制的。 2.访问api接口:https://api.76.al/api/ip/query?key=your_key 3.将如下代码添加到WordPress小工具中的自定义html内 <div id="announcement-widget"> <div class="card-widget card-ip-info"> <div class="announcement_content"> <div id="welcome-info" style="display: none;"> <div class="loading-spinner"></div> </
     

WordPress侧边栏添加欢迎语

作者 莫忘
2024年11月1日 15:59

前言

今天逛博客看到一个好玩的东西,分享给大家

参考

原地址:https://blog.shiguang666.eu.org/2024/10/25/479d38b5fc12/

教程

1.首先去青桔API申请key,目前我们使用到的API是完全免费且无次数限制的。

2.访问api接口:https://api.76.al/api/ip/query?key=your_key

3.将如下代码添加到WordPress小工具中的自定义html内

<div id="announcement-widget">
    <div class="card-widget card-ip-info">
        <div class="announcement_content">
            <div id="welcome-info" style="display: none;">
                <div class="loading-spinner"></div>
            </div>
        </div>
    </div>
</div>

<style>
    #welcome-info {
        display: flex;
        justify-content: center;
        align-items: center;
        height: auto;
    }
    .loading-spinner {
        width: 50px;
        height: 50px;
        border: 3px solid rgba(0, 0, 0, 0.1);
        border-radius: 50%;
        border-top: 3px solid #3498db;
        animation: spin 1s linear infinite;
    }
    @keyframes spin {
        0% { transform: rotate(0deg); }
        100% { transform: rotate(360deg); }
    }
</style>

<script>
    const createAnnouncementComponent = () => {
        const ipInfoElement = document.createElement('div');
        ipInfoElement.className = "card-widget card-ip-info";
        ipInfoElement.innerHTML = `
            <div class="announcement_content">
                <div id="welcome-info">
                    <div class="loading-spinner"></div>
                </div>
            </div>
        `;
        return ipInfoElement;
    };

    const fetchIpInfo = () => {
        fetch('https://api.76.al/api/ip/query?key=your_key')
            .then(response => response.ok ? response.json() : Promise.reject('Network response was not ok'))
            .then(data => showWelcome(data))
            .catch(() => showErrorMessage());
    };

    const getDistance = (e1, n1, e2, n2) => {
        const R = 6371; // Earth radius
        const toRadians = (degree) => degree * (Math.PI / 180);
        const a = Math.sin(toRadians(n1)) * Math.sin(toRadians(n2)) +
                  Math.cos(toRadians(n1)) * Math.cos(toRadians(n2)) *
                  Math.cos(toRadians(e1 - e2));
        return Math.round(R * Math.acos(a));
    };

    const showWelcome = (ipLocationData) => {
        if (!ipLocationData || !ipLocationData.data) {
            return showErrorMessage();
        }

        // 修改为你自己的经纬度 
            const myLng = 121.38206; //经度
            const myLat = 31.11325; //维度
        const { lng, lat, country, prov, city, district } = ipLocationData.data; // 获取区的信息
        const dist = getDistance(myLng, myLat, lng, lat);
        const pos = country === "中国" ? `${prov} ${city} ${district}` : `${city}, ${district}`; // 包含区的信息

        const welcomeInfoElement = document.getElementById("welcome-info");
        welcomeInfoElement.style.display = 'block';
        welcomeInfoElement.innerHTML = `
            💖 欢迎来自 <b><span style="color:#3390ff;">${pos}</span></b> 的朋友<br>
            📏 您距博主约 <b><span style="color: #3390ff;">${dist}</span></b> 公里<br>
        `;
    };

    const showErrorMessage = () => {
        const welcomeInfoElement = document.getElementById("welcome-info");
        welcomeInfoElement.style.display = 'block';
        welcomeInfoElement.innerHTML = `<p>获取IP信息失败,请检查网络.</p>`;
    };

    const initialize = () => {
        document.body.appendChild(createAnnouncementComponent());
        fetchIpInfo();
    };

    window.onload = initialize;
</script>

4.将其中的your_key改为你自己申请的key

5.访问api接口,将其中的lat和lng替换代码中的经纬度

// 修改为你自己的经纬度  
const myLng = 121.38206; //经度
const myLat = 31.11325; //维度

6.访问主页就可以看到了

  • ✇新锐博客
  • 腾讯云国际推出 EdgeOne Pages,免费静态网站托管服务莫忘
    简介 腾讯云国际站推出了一项令人振奋的新服务——EdgeOne Pages。这项服务与 Cloudflare Pages 类似,专为静态网页托管而设计。腾讯给出的承诺是“提供近乎无限制的免费版本,该版本将始终可用”,目前来讲是完全免费的,不用验证信用卡,一个邮箱就能直接注册使用,同时免费提供 SSL 证书。 官网 https://edgeone.ai/products/pages 功能特点 1,海外CDN节点,无需域名备案,目前国内可流畅访问 2,支持React、Vue、Next.js、Hexo 等构建的网站 3,与 GitHub 集成实现自动化构建部署 4,仅需一个邮箱,无需绑银行卡,手机号等等 5,基于EdgeOne 的 全球CDN(无国内节点)加速和防护 免费限制 目前官宣完全免费!我们提供几乎无限的免费版本,该版本将始终可用,允许无限制地使用我们产品的基本功能。我们将继续增强我们的高级功能,同时确保我们服务的稳定性。随着我们走向商业化,免费版本可能会有一定的限制,例如每日构建限制,我们会及时通知您。 容量限制:每个账号所有项目总大小不能超过5G,否则无法完成构建。 目前仅支持绑
     

腾讯云国际推出 EdgeOne Pages,免费静态网站托管服务

作者 莫忘
2024年10月31日 20:19

简介

腾讯云国际站推出了一项令人振奋的新服务——EdgeOne Pages。这项服务与 Cloudflare Pages 类似,专为静态网页托管而设计。腾讯给出的承诺是“提供近乎无限制的免费版本,该版本将始终可用”,目前来讲是完全免费的,不用验证信用卡,一个邮箱就能直接注册使用,同时免费提供 SSL 证书。

官网

https://edgeone.ai/products/pages

功能特点

1,海外CDN节点,无需域名备案,目前国内可流畅访问

2,支持React、Vue、Next.js、Hexo 等构建的网站

3,与 GitHub 集成实现自动化构建部署

4,仅需一个邮箱,无需绑银行卡,手机号等等

5,基于EdgeOne 的 全球CDN(无国内节点)加速和防护

免费限制

目前官宣完全免费!我们提供几乎无限的免费版本,该版本将始终可用,允许无限制地使用我们产品的基本功能。我们将继续增强我们的高级功能,同时确保我们服务的稳定性。随着我们走向商业化,免费版本可能会有一定的限制,例如每日构建限制,我们会及时通知您。

容量限制:每个账号所有项目总大小不能超过5G,否则无法完成构建。

目前仅支持绑定Github账号,以后可能会开发Gitlab等平台的绑定。

注册账号

1,访问 https://edgeone.ai/register,填写邮箱密码接收验证码完成注册!更简单的方式直接Google授权登录!

2,注册成功后,页面重定向到腾讯云国际站,14天试用不用领取没啥用。

3,如果界面不是中文的,可在右上角切换语言到中文简体。

开通Pages

访问 https://console.tencentcloud.com/edgeone/pages 或者左侧菜单点击【Pages】点击立即开通就哦了~

绑定Github

点击【绑定Github】,登录自己的Github账号,给所有的授权即可!

部署项目

选择Github仓库,部署的时候会自动编译。

结语

尝试了部署一下,可能因为是新产品的缘故,所以功能较为简陋,而且官方给出的预览地址只有三个小时,需要你绑定自己的域名。不过免费的还要什么自行车

  • ✇新锐博客
  • 日常"吐槽"一下外设的突然失灵莫忘
    前言 外设是在使用电脑不可或缺的硬件。 碎语 自从会用电脑以后,以前使用的都是那种买电脑送的键盘或者就二三十然后就能得到键鼠一套。 虽然不好用但是熬一年还是可以的,一年花个二三十弄套键鼠还是很合适的。 但是自从玩了游戏以后,键鼠就要稍微弄一下了,但是我也不太懂这方面的,只知道机械键盘和其他。 前两年就在抖音上看了下百元价位的键鼠,发现了达尔优的EK815和罗技的G102 都是百元内的天花板了。 2023年买了EK815,到24年9月份,距离购买键盘一年半以后,键盘出现了按键不灵的情况,wsx这三个键会失灵。 然后就购买了rk r87,也是百元左右的键盘,使用体验非常的不错,但是到今天,过去了一年一个月刚好过了保修期。 键盘就和上一款ek815一样的情况,13 ad zc 这几个键出现了窜键的情况。我知道讲到这里,会有朋友说为何不用更好的键盘? 其实是舍不得,因为在日常使用中对键鼠使用的比较频繁而且自己也不那么在意,所以可能导致键鼠寿命大大缩减。 主要是突然键盘失灵,重新购买还要有个一两天才能到,很让我恼火。 结语 本文主要是本人对切身经历的一些"吐槽",无论是EK815还是rk r87
     

日常"吐槽"一下外设的突然失灵

作者 莫忘
2024年10月27日 19:45

前言

外设是在使用电脑不可或缺的硬件。

碎语

自从会用电脑以后,以前使用的都是那种买电脑送的键盘或者就二三十然后就能得到键鼠一套。

虽然不好用但是熬一年还是可以的,一年花个二三十弄套键鼠还是很合适的。

但是自从玩了游戏以后,键鼠就要稍微弄一下了,但是我也不太懂这方面的,只知道机械键盘和其他。

前两年就在抖音上看了下百元价位的键鼠,发现了达尔优的EK815和罗技的G102 都是百元内的天花板了。

2023年买了EK815,到24年9月份,距离购买键盘一年半以后,键盘出现了按键不灵的情况,wsx这三个键会失灵。

然后就购买了rk r87,也是百元左右的键盘,使用体验非常的不错,但是到今天,过去了一年一个月刚好过了保修期。

键盘就和上一款ek815一样的情况,13 ad zc 这几个键出现了窜键的情况。我知道讲到这里,会有朋友说为何不用更好的键盘?

其实是舍不得,因为在日常使用中对键鼠使用的比较频繁而且自己也不那么在意,所以可能导致键鼠寿命大大缩减。

主要是突然键盘失灵,重新购买还要有个一两天才能到,很让我恼火。

结语

本文主要是本人对切身经历的一些"吐槽",无论是EK815还是rk r87都是不错的产品。

  • ✇新锐博客
  • 利用uptimerobot检测站点状态并且部署监控页面莫忘
    前言 之前介绍过如何使用哪吒监控监控自己的服务器和站点,但那是需要服务器的。 今天教大家如何不用服务器监控自己的站点。 教程 1.首先打开uptimerobot官网,点击右上角的Register fo FREE注册一个账号 2.找到页面中的Add New monitor添加自己的网站 3.输入网站,可以选择邮件通知或其他通知方式,当你网站访问不了的时候它就会通知你 4.添加完网站就去首页的Integrations & API中找到API 5.新建一个Read-only API key,这样别人就不能通过你的API捣乱了 6.访问https://github.com/Qikaile/uptime-status项目 7.Fork到自己的仓库然后更改config.js文件里的内容 8.打开Vercel,然后添加刚刚fork的项目等待部署完成 9.到项目的setting中找到domain,然后填写自己准备好的域名即可
     

利用uptimerobot检测站点状态并且部署监控页面

作者 莫忘
2024年10月27日 15:17

前言

之前介绍过如何使用哪吒监控监控自己的服务器和站点,但那是需要服务器的。

今天教大家如何不用服务器监控自己的站点。

教程

1.首先打开uptimerobot官网,点击右上角的Register fo FREE注册一个账号

2.找到页面中的Add New monitor添加自己的网站

3.输入网站,可以选择邮件通知或其他通知方式,当你网站访问不了的时候它就会通知你

4.添加完网站就去首页的Integrations & API中找到API

5.新建一个Read-only API key,这样别人就不能通过你的API捣乱了

6.访问https://github.com/Qikaile/uptime-status项目

7.Fork到自己的仓库然后更改config.js文件里的内容

8.打开Vercel,然后添加刚刚fork的项目等待部署完成

9.到项目的setting中找到domain,然后填写自己准备好的域名即可

  • ✇新锐博客
  • 记一次可能因宝塔版本导致重装系统的遭遇莫忘
    前言 因为习惯了宝塔的操作习惯,所以一直以来建站使用的都是宝塔。 碎语 之前安装的是宝塔的9.2.0的版本,然后日常使用中也并没有发现什么问题。 但是有天早上有人告诉我,我网站打不开了,于是我就开电脑查看,发现CPU占用一直是百分之百。 当然,这种查看是在阿里云的云监控中进行的,因为那时候宝塔连接不上去,连SSH也无法连接服务器。 幸亏我有瞎倒腾的习惯,所以在阿里云的云监控中开启了主机监控。 我还发现了不仅CPU占用达到了百分之百,硬盘的占用也是高达100M/s。 这么高的读写让我意识到了事情的不对劲,于是我先重启服务器然后连接宝塔之后在监控中查看了日志。 在cpu和硬盘达到百分百的时候,一个名为php-fpm的程序占用非常之大,但因为我是小白,所以不太懂这个是干嘛的。 但是重启服务器后就没事了,所以也就没管。但是几天后又出现了相同的情况,于是我就百度查了一下。 并且在宝塔的论坛中找了一下,发现相关的问题宝塔的工作人员要么没回复,要么就说网站可能被CC之类的了。 我就怀疑是不是我设置了啥导致的这个问题,于是我就重装了系统。但是过了一天这个问题又出现了。 最后我就怀疑是宝塔版本的bug,
     

记一次可能因宝塔版本导致重装系统的遭遇

作者 莫忘
2024年10月26日 12:38

前言

因为习惯了宝塔的操作习惯,所以一直以来建站使用的都是宝塔。

碎语

之前安装的是宝塔的9.2.0的版本,然后日常使用中也并没有发现什么问题。

但是有天早上有人告诉我,我网站打不开了,于是我就开电脑查看,发现CPU占用一直是百分之百。

当然,这种查看是在阿里云的云监控中进行的,因为那时候宝塔连接不上去,连SSH也无法连接服务器。

幸亏我有瞎倒腾的习惯,所以在阿里云的云监控中开启了主机监控。

我还发现了不仅CPU占用达到了百分之百,硬盘的占用也是高达100M/s。

这么高的读写让我意识到了事情的不对劲,于是我先重启服务器然后连接宝塔之后在监控中查看了日志。

在cpu和硬盘达到百分百的时候,一个名为php-fpm的程序占用非常之大,但因为我是小白,所以不太懂这个是干嘛的。

但是重启服务器后就没事了,所以也就没管。但是几天后又出现了相同的情况,于是我就百度查了一下。

并且在宝塔的论坛中找了一下,发现相关的问题宝塔的工作人员要么没回复,要么就说网站可能被CC之类的了。

我就怀疑是不是我设置了啥导致的这个问题,于是我就重装了系统。但是过了一天这个问题又出现了。

最后我就怀疑是宝塔版本的bug,因为宝塔没有指定版本安装的脚本,于是我就找到了宝塔的9.0.0长期稳定版本安装了一下。

到如今已经过去四天了,问题没有出现。所以我觉得可能是宝塔9.2.0的bug。

现在就继续使用9.0.0版本然后等宝塔更新后看看更新日志会不会有相关的bug修复。

  • ✇新锐博客
  • 无需服务器利用vercel搭建typecho博客莫忘
    前言 众所周知,vercel可以搭建静态内容,但是不知道的是也可以搭建typecho博客吧。 教程 准备工作 Github账号,Vercel账号,域名 开始 1.首先访问https://github.com/zycwer/vercel-typecho/并且fork到自己的仓库(最好是下载然后上传到自己仓库) 2.为了防止数据库的泄露,最好将仓库变成私有 3.上传主题文件到usr/theme文件夹下,上传插件到usr/plugins文件夹下 4.使用github登录vercel,点击页面右上角的ADD NEW中的Project 5.找到刚刚fork的项目或者上传的项目点击import并且点击deploy等待部署完成 6.找到项目中的storage,再点击Connect Database,选择其中的Postgres,剩下的直接点右下角的确定就行了, 7.找到项目中的settings,再点击Domains,输入框中输入自己的域名再点击ADD 8.到域名服务商处添加cname解析,记录为cname.vercel-dns.com 9.访问域名,会跳转到typecho安装,数据库选择Po驱动pos
     

无需服务器利用vercel搭建typecho博客

作者 莫忘
2024年10月24日 12:17

前言

众所周知,vercel可以搭建静态内容,但是不知道的是也可以搭建typecho博客吧。

教程

准备工作

Github账号,Vercel账号,域名

开始

1.首先访问https://github.com/zycwer/vercel-typecho/并且fork到自己的仓库(最好是下载然后上传到自己仓库)

2.为了防止数据库的泄露,最好将仓库变成私有

3.上传主题文件到usr/theme文件夹下,上传插件到usr/plugins文件夹下

4.使用github登录vercel,点击页面右上角的ADD NEW中的Project

5.找到刚刚fork的项目或者上传的项目点击import并且点击deploy等待部署完成

6.找到项目中的storage,再点击Connect Database,选择其中的Postgres,剩下的直接点右下角的确定就行了,

7.找到项目中的settings,再点击Domains,输入框中输入自己的域名再点击ADD

8.到域名服务商处添加cname解析,记录为cname.vercel-dns.com

9.访问域名,会跳转到typecho安装,数据库选择Po驱动postgres数据库

10.数据库的地址是刚刚创建的postgres数据库中的@后面以及:5432前面的内容

11.数据库用户名是default,数据库密码是default:后面到@前面的内容,数据库名是verceldb

12.它会提示你到在github仓库中创建一个名为config.inc.php的文件,然后将代码填写到其中。

13.等待vercel重新部署完成,期间不要动任何东西,然后点击我已创建,开始安装。

14.之后就是填写管理员账号和密码就可以了。至此typecho就创建成功了。

问题

本项目的最大问题就是有些主题和插件会更改文件内容,不仅仅是更改数据库的内容,比如handsome主题插件,所以很多主题是用不了的,这就要我们一个个试。

 

  • ✇新锐博客
  • python项目关闭终端照样运行的方法莫忘
    前言 因为想使用一个python项目,所以经历了以下事件并且成功部署好了项目 过程 首先项目就两件事一个是安装环境,另一个就是启动python脚本。 但是呢当我用pip install -r requirements.txt 安装环境的时候,提示pip不存在,突然想到之前遇到过这种情况是版本不对,于是将pip改为pip3就行了。 安装好后就是需要启动python脚本了,于是我就用finalshell连接了服务器,用CD到目录,然后同样的将python改为python3执行了python脚本。 虽然脚本运行起来了,但是我发现只要我关闭了终端,任务好像就停止了。 于是我就百度如何关闭终端不停止任务,最后发现了一个方法。 使用nohup python3 your_script.py & 这个命令就好了。 这样哪怕关闭终端也可以运行了。
     

python项目关闭终端照样运行的方法

作者 莫忘
2024年10月17日 02:29

前言

因为想使用一个python项目,所以经历了以下事件并且成功部署好了项目

过程

首先项目就两件事一个是安装环境,另一个就是启动python脚本。

但是呢当我用pip install -r requirements.txt 安装环境的时候,提示pip不存在,突然想到之前遇到过这种情况是版本不对,于是将pip改为pip3就行了。

安装好后就是需要启动python脚本了,于是我就用finalshell连接了服务器,用CD到目录,然后同样的将python改为python3执行了python脚本。

虽然脚本运行起来了,但是我发现只要我关闭了终端,任务好像就停止了。

于是我就百度如何关闭终端不停止任务,最后发现了一个方法。

使用nohup python3 your_script.py & 这个命令就好了。

这样哪怕关闭终端也可以运行了。

  • ✇新锐博客
  • 使用CDN给Vercel部署的项目加速莫忘
    前言 因为最近搭建了不少项目,都是基于vercel的,但是因为众所周知的原因速度真的是一言难尽。 所以就想用cdn给vercel加速。 教程 因为本人使用的是免费CDN套餐,所以只能添加三个域名,所以本次教程教大家如何使用泛域名来给不同项目加速。 1.首先在CDN添加泛域名,比如*.xxx.com 2.vercel部署的项目填写的域名为比如nav.xxx.com 3.域名控制台填写就nav.xxx.com,cname的值为CDN提供的cname的值 4.CDN控制台一般都有子域名或者别名设置,将nav.xxx.com添加进去 5.关闭CDN的缓存功能,一定要关闭否则会出现串流的情况。 6.访问网站即可 结语 经过CDN加速,访问速度明显比使用vercel原始服务快多了。
     

使用CDN给Vercel部署的项目加速

作者 莫忘
2024年10月14日 15:12

前言

因为最近搭建了不少项目,都是基于vercel的,但是因为众所周知的原因速度真的是一言难尽。

所以就想用cdn给vercel加速。

教程

因为本人使用的是免费CDN套餐,所以只能添加三个域名,所以本次教程教大家如何使用泛域名来给不同项目加速。

1.首先在CDN添加泛域名,比如*.xxx.com

2.vercel部署的项目填写的域名为比如nav.xxx.com

3.域名控制台填写就nav.xxx.com,cname的值为CDN提供的cname的值

4.CDN控制台一般都有子域名或者别名设置,将nav.xxx.com添加进去

5.关闭CDN的缓存功能,一定要关闭否则会出现串流的情况。

6.访问网站即可

结语

经过CDN加速,访问速度明显比使用vercel原始服务快多了。

  • ✇新锐博客
  • Win10优化工具 v1.0.1莫忘
    简介 Win10优化工具是一款网友自制的多功能WIN10系统优化工具,利用Win10优化工具能够轻松的对电脑进行各类优化。 软件功能 1. 资源管理器中显示菜单栏2. 去除快捷方式字样3. 去除快捷方式左下角图标4. 禁止登陆后创建成功登录报告5. 资源管理器窗口最小化时显示完整路径6. 禁止系统自动生成错误报告 (加反)7. 关闭系统自动调试功能 (加运)8. 禁用追踪损坏的快捷链接9. 显示隐藏的文件夹10. 隐藏已知文件的拓展名11. 禁止启动时更新组策略 (加启)12. 使前台任务拥有最大优先级13. 快速响应应用程序请求14. 窗口自动刷新15. 开启自动刷新 (防假死)16. 加速缩略图弹出速度17. 禁用故障转储 Dump18. 提高前台程序的显示速度19. 清除内存内不使用的 DLL 文件20. 自动卸载 IE 中残留的 DLL21.[系统失败时] 不写入调试信息22.[系统失败时] 禁用自动重新启动23.[系统失败时] 不将事件写入系统日记24.Windows Defender 安全健康服务停启用25.Windows Defender 安全中心服务停启用26.Wind
     

Win10优化工具 v1.0.1

作者 莫忘
2024年10月13日 19:21

简介

Win10优化工具是一款网友自制的多功能WIN10系统优化工具,利用Win10优化工具能够轻松的对电脑进行各类优化。

软件功能

1. 资源管理器中显示菜单栏
2. 去除快捷方式字样
3. 去除快捷方式左下角图标
4. 禁止登陆后创建成功登录报告
5. 资源管理器窗口最小化时显示完整路径
6. 禁止系统自动生成错误报告 (加反)
7. 关闭系统自动调试功能 (加运)
8. 禁用追踪损坏的快捷链接
9. 显示隐藏的文件夹
10. 隐藏已知文件的拓展名
11. 禁止启动时更新组策略 (加启)
12. 使前台任务拥有最大优先级
13. 快速响应应用程序请求
14. 窗口自动刷新
15. 开启自动刷新 (防假死)
16. 加速缩略图弹出速度
17. 禁用故障转储 Dump
18. 提高前台程序的显示速度
19. 清除内存内不使用的 DLL 文件
20. 自动卸载 IE 中残留的 DLL
21.[系统失败时] 不写入调试信息
22.[系统失败时] 禁用自动重新启动
23.[系统失败时] 不将事件写入系统日记
24.Windows Defender 安全健康服务停启用
25.Windows Defender 安全中心服务停启用
26.Windows Update (更新服务) 停启用
27. 扰乱 Windows Update 路径

软件截图

图片[1]-新锐博客

下载地址

Win10优化工具 v1.0.1

❌
❌