<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
>
<channel>
<title><![CDATA[墨白]]></title> 
<atom:link href="https://app.chenliang.xyz/rss.php" rel="self" type="application/rss+xml" />
<description><![CDATA[]]></description>
<link>https://app.chenliang.xyz/</link>
<language>zh-cn</language>

<item>
    <title>网站安全防护：常见漏洞与防御</title>
    <link>https://app.chenliang.xyz/?post=67</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/46291786360917.png" alt="网站安全防护：常见漏洞与防御" />
<h2>一、SQL 注入</h2>
<p>永远使用预处理语句，不拼接 SQL：</p>
<pre><code>$stmt = $pdo-&gt;prepare("SELECT * FROM user WHERE id = ?");
$stmt-&gt;execute([$id]);
</code></pre>
<h2>二、XSS</h2>
<p>输出到页面前对用户输入做 <code>htmlspecialchars</code> 转义。</p>
<h2>三、CSRF</h2>
<p>关键表单加随机 token 校验，敏感操作要求二次确认。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:58 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=67</guid>
</item>
<item>
    <title>REST API 设计与调试实战</title>
    <link>https://app.chenliang.xyz/?post=68</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/f7911786360918.png" alt="REST API 设计与调试实战" />
<h2>一、资源与路由</h2>
<p>用名词复数表示资源，HTTP 方法表达动作：</p>
<pre><code>GET    /articles      列表
POST   /articles      新建
GET    /articles/:id  详情
</code></pre>
<h2>二、鉴权</h2>
<p>对外接口用 API Key 或 OAuth2，敏感操作走 HTTPS。</p>
<h2>三、调试工具</h2>
<p>用 curl 或 Postman 验证请求与响应，统一错误码与 JSON 结构。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:58 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=68</guid>
</item>
<item>
    <title>Git 团队协作工作流最佳实践</title>
    <link>https://app.chenliang.xyz/?post=65</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/32331786360917.png" alt="Git 团队协作工作流最佳实践" />
<h2>一、分支模型</h2>
<p>采用 main + develop + feature 分支，功能开发从 feature 切出：</p>
<pre><code>git checkout -b feature/login develop
</code></pre>
<h2>二、提交规范</h2>
<p>提交信息遵循 <code>type(scope): subject</code>，如 <code>fix(auth): 修复登录态丢失</code>。</p>
<h2>三、合并与变基</h2>
<p>本地未推送的提交用 <code>rebase</code> 整理，已共享的分支用 <code>merge</code> 保留历史。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:57 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=65</guid>
</item>
<item>
    <title>前端性能优化：让网站快人一步</title>
    <link>https://app.chenliang.xyz/?post=66</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/94311786360917.png" alt="前端性能优化：让网站快人一步" />
<h2>一、资源加载</h2>
<p>合并与压缩 CSS/JS，启用 HTTP/2 多路复用，懒加载首屏外图片。</p>
<h2>二、缓存策略</h2>
<p>静态资源设长缓存 + 文件指纹，HTML 用 no-cache：</p>
<pre><code>Cache-Control: public, max-age=31536000, immutable
</code></pre>
<h2>三、关键渲染路径</h2>
<p>内联首屏关键 CSS，异步加载非关键脚本，减少白屏时间。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:57 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=66</guid>
</item>
<item>
    <title>CSS Grid 与 Flexbox 布局实战</title>
    <link>https://app.chenliang.xyz/?post=63</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/b4361786360916.png" alt="CSS Grid 与 Flexbox 布局实战" />
<h2>一、Flexbox 一维布局</h2>
<p>适合导航栏、卡片行等横向排列：</p>
<pre><code>.nav { display: flex; gap: 16px; align-items: center; }
</code></pre>
<h2>二、Grid 二维布局</h2>
<p>适合整体页面栅格：</p>
<pre><code>.grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
</code></pre>
<h2>三、响应式</h2>
<p>用 <code>minmax()</code> 与 <code>auto-fit</code> 让网格自适应列数，减少媒体查询。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:56 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=63</guid>
</item>
<item>
    <title>Nginx 反向代理与 HTTPS 配置详解</title>
    <link>https://app.chenliang.xyz/?post=64</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/0f371786360916.png" alt="Nginx 反向代理与 HTTPS 配置详解" />
<h2>一、反向代理</h2>
<p>把请求转发到后端应用：</p>
<pre><code>location / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
}
</code></pre>
<h2>二、HTTPS</h2>
<p>用 Let's Encrypt 申请证书后配置：</p>
<pre><code>listen 443 ssl;
ssl_certificate /path/fullchain.pem;
ssl_certificate_key /path/privkey.pem;
</code></pre>
<h2>三、强制跳转</h2>
<p>80 端口统一 301 跳转到 443，避免明文传输。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:56 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=64</guid>
</item>
<item>
    <title>Emlog Pro 主题开发：从零搭一个极简模板</title>
    <link>https://app.chenliang.xyz/?post=61</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/f46a1786360915.png" alt="Emlog Pro 主题开发：从零搭一个极简模板" />
<h2>一、目录结构</h2>
<p>模板放在 <code>content/templates/你的别名/</code>，必须包含 header.php、footer.php、log_list.php、echo_log.php、module.php、style.css。</p>
<h2>二、头部安全检查</h2>
<p>每个 PHP 模板文件开头都要加防直访：</p>
<pre><code>&lt;?php if (!defined('EMLOG_ROOT')) { exit('error!'); } ?&gt;
</code></pre>
<h2>三、标准函数与钩子</h2>
<p>列表用 <code>blog_sort()</code>、文章用 <code>echo_log()</code>，挂载点用 <code>doAction('index_head')</code> 等，严格对齐官方 default 模板。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:55 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=61</guid>
</item>
<item>
    <title>Linux 服务器基础运维命令大全</title>
    <link>https://app.chenliang.xyz/?post=62</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/47c11786360915.png" alt="Linux 服务器基础运维命令大全" />
<h2>一、进程与资源</h2>
<p>查看负载和内存：</p>
<pre><code>top -c
free -h
df -h
</code></pre>
<h2>二、日志排查</h2>
<p>实时跟踪 Nginx 错误日志：</p>
<pre><code>tail -f /var/log/nginx/error.log
</code></pre>
<h2>三、定时任务</h2>
<p>用 crontab 管理计划任务，<code>crontab -e</code> 编辑，注意时区与 PATH。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:55 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=62</guid>
</item>
<item>
    <title>PHP 8 新特性速览与平滑升级指南</title>
    <link>https://app.chenliang.xyz/?post=59</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/16391786360914.png" alt="PHP 8 新特性速览与平滑升级指南" />
<h2>一、命名参数（Named Arguments）</h2>
<p>调用函数时可按参数名传值，顺序不再重要，可读性大幅提升：</p>
<pre><code>&lt;?php
htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
// PHP 8 可以写成
htmlspecialchars(str: $str, flags: ENT_QUOTES, encoding: 'UTF-8');
</code></pre>
<h2>二、联合类型与 mixed</h2>
<p>参数和返回值现在可以声明多种类型，mixed 表示任意类型：</p>
<pre><code>function demo(int|string $v): mixed { return $v; }
</code></pre>
<h2>三、升级建议</h2>
<p>升级前用 <code>php -l</code> 校验语法，确认 Composer 依赖声明支持 ^8.0，并在预发环境充分回归测试。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:54 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=59</guid>
</item>
<item>
    <title>MySQL 索引优化：从慢查询到毫秒响应</title>
    <link>https://app.chenliang.xyz/?post=60</link>
    <description><![CDATA[<img src="https://app.chenliang.xyz/content/uploadfile/202608/59831786360914.png" alt="MySQL 索引优化：从慢查询到毫秒响应" />
<h2>一、为什么慢</h2>
<p>没有合适索引时，MySQL 只能全表扫描。用 <code>EXPLAIN</code> 查看执行计划，关注 type 与 rows：</p>
<pre><code>EXPLAIN SELECT * FROM orders WHERE user_id = 100 AND status = 1;
</code></pre>
<h2>二、组合索引最左前缀</h2>
<p>建立 <code>(user_id, status)</code> 组合索引，查询必须命中最左列才能生效。</p>
<pre><code>ALTER TABLE orders ADD INDEX idx_user_status (user_id, status);
</code></pre>
<h2>三、避免索引失效</h2>
<p>不要在索引列上做函数运算或隐式类型转换，否则索引失效回退全表扫描。</p>]]></description>
    <pubDate>Mon, 10 Aug 2026 19:21:54 +0800</pubDate>
    <dc:creator>blogger</dc:creator>
    <guid>https://app.chenliang.xyz/?post=60</guid>
</item>
</channel>
</rss>