<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on virusdefender's blog ʕ•ᴥ•ʔ</title><link>https://strcpy.me/</link><description>Recent content in Home on virusdefender's blog ʕ•ᴥ•ʔ</description><generator>Hugo</generator><language>zh_CN</language><lastBuildDate>Sun, 10 May 2026 00:00:01 +0000</lastBuildDate><atom:link href="https://strcpy.me/feed/index.xml" rel="self" type="application/rss+xml"/><item><title>POCSAG 协议考古 - 硬件实现</title><link>https://strcpy.me/index.php/archives/808/</link><pubDate>Sun, 10 May 2026 00:00:01 +0000</pubDate><guid>https://strcpy.me/index.php/archives/808/</guid><description>&lt;p&gt;上一篇文章梳理了 POCSAG 的协议格式，这一篇来看看硬件的实际选型。POCSAG 是运行在 2-FSK 调制之上的应用层协议，硬件层面只需要两个核心能力：一个支持 FSK 调制解调的射频前端，一个能跑协议解析的 MCU。看上去选择很多，但真要做的时候，射频芯片的寄存器配置、FSK 极性的匹配、频率稳定度、开发门槛都是坑。&lt;/p&gt;
&lt;p&gt;好在 GitHub 上有几个开源项目，各走了一条路，拿来当硬件选型的参考很合适。&lt;/p&gt;
&lt;h2 id="硬件选型"&gt;硬件选型&lt;/h2&gt;

 &lt;div class="admonition warning"&gt;
 &lt;div class="admonition-header"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"&gt;&lt;path d="M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480L40 480c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24l0 112c0 13.3 10.7 24 24 24s24-10.7 24-24l0-112c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z"/&gt;&lt;/svg&gt;
 &lt;span&gt;Warning&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="admonition-content"&gt;
 &lt;p&gt;无线电设备的研发必须严格遵守相关法律法规：禁止在非民用频段进行信号发射；严禁违规接收非授权频段信号；严禁将非公开的信号与数据上传至互联网。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/div&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;/th&gt;
					&lt;th&gt;MCU&lt;/th&gt;
					&lt;th&gt;射频前端&lt;/th&gt;
					&lt;th&gt;板卡方案&lt;/th&gt;
					&lt;th&gt;简介&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/killeder/GoRail_Pager"&gt;GoRail_Pager&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;STM32F103C8T6&lt;/td&gt;
					&lt;td&gt;TI CC1101&lt;/td&gt;
					&lt;td&gt;自己画 PCB&lt;/td&gt;
					&lt;td&gt;纯 FSK 芯片；外挂 ESP8266 走 MQTT。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/livequr/SX1276_Receive_LBJ"&gt;SX1276_Receive_LBJ&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;ESP32&lt;/td&gt;
					&lt;td&gt;SX1276&lt;/td&gt;
					&lt;td&gt;现成开发板&lt;/td&gt;
					&lt;td&gt;TTGO LoRa 32 v1.6.1，约 18 美元到手即用。SX1276 支持 LoRa/FSK 双模。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;&lt;a href="https://github.com/MisakaXing/RP2040-Based-LBJ-Receiver"&gt;RP2040-Based&lt;/a&gt;&lt;/td&gt;
					&lt;td&gt;RP2040&lt;/td&gt;
					&lt;td&gt;SX1276&lt;/td&gt;
					&lt;td&gt;自己画 PCB&lt;/td&gt;
					&lt;td&gt;同样基于 SX1276，MCU 换成树莓派 RP2040，有完整的 PCB 和外壳文件。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;TTGO LoRa 32 价格不算低，但完全不用 DIY——一块板子到手即用，代码现成，不需要画 PCB。缺点是板子形态固定，体积、功耗、接口都没法自己调整。&lt;/p&gt;</description></item><item><title>POCSAG 协议考古 - 协议基本格式</title><link>https://strcpy.me/index.php/archives/807/</link><pubDate>Fri, 01 May 2026 00:00:01 +0000</pubDate><guid>https://strcpy.me/index.php/archives/807/</guid><description>&lt;p&gt;在智能手机普及之前，有一个时代的移动通信是靠 BP 机（Pager/寻呼机）撑起来的。POCSAG 就是那个时代最成功的寻呼协议之一。虽然 BP 机早已淡出大众视野，但 POCSAG 在今天并没有完全消失——一些医院的老式内部呼叫系统、工厂的报警通知、铁路列车接近预警（800MHz 机车电台 LBJ）等场景中，仍然能看到它的身影。&lt;/p&gt;
&lt;p&gt;今天让我们翻开这份来自上世纪的&lt;a href="https://www.raveon.com/pdfiles/AN142(POCSAG).pdf"&gt;技术文档&lt;/a&gt;，看看它是如何在极其有限的带宽和功耗约束下，设计出一套完整的一对多消息广播系统的。&lt;/p&gt;
&lt;h2 id="什么是-pocsag"&gt;什么是 POCSAG&lt;/h2&gt;
&lt;p&gt;POCSAG 全称是 Post Office Code Standardization Advisory Group（邮政总局编码标准化咨询组），由当时掌管全英电信的英国邮政总局制定。它是一种无线数据传输的协议，用于向&amp;quot;寻呼机&amp;quot;（Pager）单向发送消息。&lt;/p&gt;
&lt;p&gt;POCSAG 定义了三种标准数据速率：512 bps、1200 bps、2400 bps。512 bps 的通信距离最远，而 1200 和 2400 bps 允许每秒传的寻呼消息数量更多。&lt;/p&gt;
&lt;h2 id="物理层调制方式"&gt;物理层：调制方式&lt;/h2&gt;
&lt;p&gt;POCSAG 采用 Frequency Shift Keying（FSK，频移键控）调制。FSK 是一种数字调制技术，用载波频率的变化来表示数字信号——不同的频率对应不同的 bit 值，接收端通过检测频率来判断发过来的是 0 还是 1。&lt;/p&gt;
&lt;p&gt;具体到 POCSAG：在射频载波上使用 ±4500Hz 的频偏，高频代表数字 &lt;code&gt;0&lt;/code&gt;，低频代表数字 &lt;code&gt;1&lt;/code&gt;。同一个传输频道上可以混合不同速率的数据块。&lt;/p&gt;
&lt;h2 id="cap-code寻呼机的身份证"&gt;CAP Code：寻呼机的&amp;quot;身份证&amp;quot;&lt;/h2&gt;
&lt;p&gt;CAP Code（Channel Access Protocol code，频道接入协议码）是每台寻呼机独一无二的地址标识，总共 21 位，这意味着一个频道理论上可以分配 2097152 个不同的地址。&lt;/p&gt;
&lt;p&gt;这 21 位实际上被拆成了两部分：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;字段&lt;/th&gt;
					&lt;th&gt;位数&lt;/th&gt;
					&lt;th&gt;位置&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;地址位（Address bits）&lt;/td&gt;
					&lt;td&gt;18 bit&lt;/td&gt;
					&lt;td&gt;高位（MSB）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;帧位置位（Frame location bits）&lt;/td&gt;
					&lt;td&gt;3 bit&lt;/td&gt;
					&lt;td&gt;低位（LSB）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;拆出 3 个帧位置位的设计非常精巧——它允许寻呼机只在&amp;quot;属于自己&amp;quot;的那几帧时间里打开接收器，其他帧时间直接断电休眠，显著延长电池寿命。后文会详细展开。&lt;/p&gt;</description></item><item><title>体验 LetsEncrypt 的短期证书</title><link>https://strcpy.me/index.php/archives/806/</link><pubDate>Thu, 27 Nov 2025 00:00:01 +0000</pubDate><guid>https://strcpy.me/index.php/archives/806/</guid><description>&lt;p&gt;在今年 2 月份的时候，LetsEncrypt 就发布了&lt;a href="https://letsencrypt.org/2025/01/16/6-day-and-ip-certs"&gt;一篇文章&lt;/a&gt;称要推出六天的短期证书，而目前 LetsEncrypt 的默认证书还是 90 天的。&lt;/p&gt;
&lt;p&gt;为何要使用有效期更短的证书呢，这个主要有两个重要的原因：&lt;/p&gt;
&lt;h2 id="证书吊销机制不可靠"&gt;证书吊销机制不可靠&lt;/h2&gt;
&lt;p&gt;证书吊销一直是依赖 OCSP 或 CRL 机制，但是都需要是客户端主动的去检查，否则对证书有效性没有任何的影响。&lt;/p&gt;
&lt;h3 id="crl证书吊销列表"&gt;CRL（证书吊销列表）&lt;/h3&gt;
&lt;p&gt;CA 定期生成一个签名的列表，其中包含所有已被吊销但尚未过期的证书序列号。客户端在验证证书时，会下载这个列表，并检查目标证书的序列号是否在其中。
如果在，则说明该证书已被吊销，不应信任。&lt;/p&gt;
&lt;p&gt;缺点包括&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;体积大：随着吊销证书增多，CRL 文件会变得很大，影响性能。&lt;/li&gt;
&lt;li&gt;存在时效性问题：两次更新之间的窗口期内吊销的证书无法被及时发现。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ocsp在线证书状态协议"&gt;OCSP（在线证书状态协议）&lt;/h3&gt;
&lt;p&gt;客户端向 CA 指定的 OCSP 响应服务器发送一个查询请求，包含目标证书的序列号等信息，OCSP 服务器实时返回该证书的状态。&lt;/p&gt;
&lt;p&gt;缺点包括&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;每次查询都会暴露用户正在访问哪个网站&lt;/li&gt;
&lt;li&gt;依赖网络和服务器可用性：如果 OCSP 服务器宕机或响应慢，可能导致连接延迟甚至失败。某些客户端可能会忽略 OCSP 错误继续连接。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其改进版为 OCSP Stapling，即服务器主动从 CA 获取 OCSP 响应，并在 TLS 握手时一并发送给客户端。避免了客户端直接连接 OCSP 服务器，提升性能和隐私。&lt;/p&gt;
&lt;p&gt;短期证书的主要优势在于，它们能显著缩短潜在的风险暴露时间，因为这类证书会相对较快地过期。这降低了对证书吊销机制的依赖。因为上述吊销机制一直不够可靠，所以短期证书将不包含 CRL 或者 OCSP 的配置信息。&lt;/p&gt;
&lt;p&gt;此外，短期证书实际上要求必须实现自动化管理，实现证书签发的自动化也对于安全性至关重要。&lt;/p&gt;
&lt;h2 id="支持-ip-证书"&gt;支持 IP 证书&lt;/h2&gt;
&lt;p&gt;虽然说 IP 和域名的 SSL 的验证和签发本质都是一样的，但是过去只有少数几家 CA 小规模提供此类服务。&lt;/p&gt;
&lt;p&gt;IP 证书很少见最重要的原因是 IP 地址的所有权的变动比域名频繁多了，比如你在某个云厂商创建了一个新的虚拟机，分配了一个 IP 地址，在释放虚拟机的时候，如果你同时选择了释放 IP 的话，这个 IP 可能随时就被其他人所占用。这时候已经签发的长期有效的 IP 地址的证书可能就存在安全隐患了，而使用短期证书即可以匹配 IP 生命周期也可能比较短的场景。&lt;/p&gt;</description></item><item><title>迁移到 Hugo</title><link>https://strcpy.me/index.php/archives/805/</link><pubDate>Thu, 04 Sep 2025 00:00:01 +0000</pubDate><guid>https://strcpy.me/index.php/archives/805/</guid><description>&lt;p&gt;从本站的文章发布日期来看，写博客也已经有 10 多年的历史了。回想了一下本站使用的博客系统，大概分为下面三个阶段，它们让我切换的动力都是简洁轻量的部署与贴合个人审美的模板。&lt;/p&gt;
&lt;h2 id="typecho"&gt;Typecho&lt;/h2&gt;
&lt;p&gt;印象中当年将 Typecho 在多家不同的虚拟主机上都部署过，也是当年初入技术圈的时候，各种胡乱探索的过程。&lt;/p&gt;
&lt;p&gt;相对于 WordPress，差别是 Typecho 更加简洁易用，共同点是 10 多年过去了，我翻了下 Typecho 的 GitHub 发现还是和 WordPress 一样天天在修复安全漏洞。&lt;/p&gt;
&lt;p&gt;这个截图来自官方博客，我当年用的主题似乎和这个有点差别，但是整体布局和色调是接近的。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://strcpy.me/assets/blog/images/805/1.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="jekyll"&gt;Jekyll&lt;/h2&gt;
&lt;p&gt;后面静态博客生成器快速流行起来，无意中发现有人分享了一个主题 &lt;a href="https://github.com/kaeyleo/jekyll-theme-H2O"&gt;jekyll-theme-H2O&lt;/a&gt;，也是一眼就看中了。&lt;/p&gt;
&lt;p&gt;因为不想更换为 Jekyll 之后让之前 Typecho 生成的文件链接失效，所以一个静态网站的 url 也不得不变成 &lt;code&gt;/index.php/archives/100/&lt;/code&gt; 这样的格式了。&lt;/p&gt;
&lt;p&gt;&lt;img src="https://strcpy.me/assets/blog/images/805/2.png" alt=""&gt;&lt;/p&gt;
&lt;h2 id="hugo"&gt;Hugo&lt;/h2&gt;
&lt;p&gt;逛 GitHub 的时候发现了一个名为 &lt;a href="https://github.com/HermanMartinus/bearblog"&gt;ʕ•ᴥ•ʔ Bear Blog&lt;/a&gt; 的博客系统，其小熊的 logo 非常的呆萌可爱。&lt;/p&gt;
&lt;p&gt;不过这个博客系统很遗憾是 Django 开发的，不是静态网站，但是我又一眼就喜欢上了这个网站的模板风格，就打算自己扒一下网站的源码改造一些，调研过程中就发现了原来已经有好心人给弄了 &lt;a href="https://github.com/janraasch/hugo-bearblog/"&gt;Hugo 版本&lt;/a&gt;，所以自然就切换到了 Hugo 上。整体来看，这个版本的风格和 Typecho 还是比较接近的。&lt;/p&gt;
&lt;p&gt;折腾这个没花太多的时间，借助 AI 工具，一些明显的问题和数据格式的简单迁移很快就搞定了，主要遇到的一个卡点是这个博客区分 Dark 和 Light 模式，并借助 css 自动切换，但是 Markdown 中代码块的高亮却是固定的模式，导致不管选择哪个高亮的主题在另外一个模式下总是看上去比较奇怪。后来搜索了一些资料，最终是导出了两个主题的语法高亮 css 然后插入自定义的 css 进行选择，感觉 Hugo 自带这个功能的话会更好一些。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-css" data-lang="css"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt; &lt;span class="nt"&gt;type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt; &lt;span class="nt"&gt;media&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;screen&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;dark&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* Generated using: hugo gen chromastyles --style=github-dark */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* github-dark css 内容 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;5&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;6&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;media&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="nt"&gt;light&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;7&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* Generated using: hugo gen chromastyles --style=friendly */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;8&lt;/span&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;/* friendly css 内容 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;9&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>寻找不太一样的 Webshell 检测绕过方法</title><link>https://strcpy.me/index.php/archives/804/</link><pubDate>Mon, 21 Aug 2023 00:00:01 +0000</pubDate><guid>https://strcpy.me/index.php/archives/804/</guid><description>&lt;p&gt;这其实是一篇写于 2022 年初的老文，不过鉴于很久没发过文章了，就来凑个数。&lt;/p&gt;
&lt;p&gt;本文不再赘述编码、替换等通用绕过技术，也不太多的深入检测的核心原理，而是列举一些检测周边的 bug，这些 bug 基本原理都不复杂，但也确确实实的在影响检测效果，而且可能也是横跨多个引擎的通用绕过技术。&lt;/p&gt;
&lt;h2 id="php-server-模式和-cli-模式行为不同"&gt;PHP Server 模式和 Cli 模式行为不同&lt;/h2&gt;
&lt;p&gt;正常情况下，我们运行 PHP 网站都是 PHP Server 的模式，但是在一些 Webshell 检测中，是使用的 Cli 模式，简单来说就是 &lt;code&gt;php sample.php&lt;/code&gt; 这样来模拟执行和检测的。这样做的原因可能是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;避免检测过程中出现 bug 导致整个进程崩溃，影响其他检测。Cli 模式下，每个检测都对应一个单独的进程；&lt;/li&gt;
&lt;li&gt;方便给不同的检测样本添加不同的时间和内存限制。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这两种模式下，PHP 运行的行为基本是一样的，但是也存在细微的&lt;a href="https://www.php.net/manual/en/features.commandline.differences.php"&gt;差别&lt;/a&gt;，这就可以用于来绕过 Webshell 检测。&lt;/p&gt;
&lt;h3 id="shebang-line"&gt;shebang line&lt;/h3&gt;
&lt;p&gt;为了方便和其他脚本解释器一样，直接使用 &lt;code&gt;./x.php&lt;/code&gt; 的形式运行 PHP 脚本，PHP 解释器也提供了 shebang line 的支持，但是 PHP 对 shebang line 的支持和 Bash、Python 等比还有些不一样。&lt;/p&gt;
&lt;p&gt;shebang line 是 &lt;code&gt;#!/usr/bin/php&lt;/code&gt;、&lt;code&gt;#!/bin/bash&lt;/code&gt;、&lt;code&gt;#!/usr/bin/python&lt;/code&gt; 的形式，对于 Bash 和 Python 来说，语言的注释符就是 &lt;code&gt;#&lt;/code&gt;，所以这一行自然就忽略掉了，不需要特殊的处理。而对于 PHP 来说，&lt;code&gt;#&lt;/code&gt; 不是注释符，需要进行特殊的处理，否则就会出现语法错误。所以 Cli 模式下，会特殊的判断和跳过，而 Server 模式下面不会去处理。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;1&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#! &amp;lt;?php echo 100*100;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;2&lt;/span&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;3&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="ln"&gt;4&lt;/span&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Server 模式下的输出是&lt;/p&gt;</description></item></channel></rss>