<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Song</title><link>/</link><description>Recent content on Song</description><generator>Hugo -- gohugo.io</generator><language>zh-Cn</language><lastBuildDate>Wed, 10 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml"/><item><title>在线游戏导航</title><link>/p/%E5%9C%A8%E7%BA%BF%E6%B8%B8%E6%88%8F%E5%AF%BC%E8%88%AA/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>/p/%E5%9C%A8%E7%BA%BF%E6%B8%B8%E6%88%8F%E5%AF%BC%E8%88%AA/</guid><description>&lt;div&gt;
 &lt;a href="/games/saolei.html" &gt;
 &lt;h3&gt;扫雷小游戏&lt;/h3&gt;
 &lt;/a&gt;
 &lt;p&gt;经典逻辑扫雷，挑战你的推理与运气&lt;/p&gt;
 &lt;a href="/games/swf.html"&gt;
 &lt;h3&gt;SWF 小游戏&lt;/h3&gt;
 &lt;/a&gt;
 &lt;p&gt;Flash 经典合集，一键回忆童年&lt;/p&gt;
&lt;/div&gt;</description></item><item><title>Minecraft 服务器搭建指南</title><link>/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/</link><pubDate>Sun, 06 Apr 2025 00:00:00 +0000</pubDate><guid>/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/</guid><description>&lt;img src="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/%E5%B0%81%E9%9D%A2.jpg" alt="Featured image of post Minecraft 服务器搭建指南" /&gt;&lt;p class="lead"&gt;通过本教程，您将学会在 Windows 环境下搭建高性能 Minecraft 服务器，掌握版本选择、性能优化等核心技巧。&lt;/p&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;注意事项&lt;/div&gt;
 &lt;div class="notice-content"&gt;建议服务器运行在独立设备，避免使用笔记本/超极本等移动设备。&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="-准备工作"&gt;🏗 准备工作
&lt;/h2&gt;&lt;h3 id="推荐配置121-版本"&gt;推荐配置（1.21 版本）
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;项目&lt;/th&gt;
					&lt;th style="text-align: left"&gt;要求&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;操作系统&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Windows 10/11 或 Linux&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;处理器&lt;/td&gt;
					&lt;td style="text-align: left"&gt;四核 2.0GHz+&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;内存&lt;/td&gt;
					&lt;td style="text-align: left"&gt;8GB+ DDR4&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;存储&lt;/td&gt;
					&lt;td style="text-align: left"&gt;SSD 10GB+&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;网络&lt;/td&gt;
					&lt;td style="text-align: left"&gt;20Mbps+ 有线连接&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;安全警告&lt;/div&gt;
 &lt;div class="notice-content"&gt;确保关闭高危端口（25/465/587），定期备份服务器。&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="-java-环境配置"&gt;☕ Java 环境配置
&lt;/h2&gt;&lt;h3 id="版本对应表"&gt;版本对应表
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;Minecraft 版本&lt;/th&gt;
					&lt;th style="text-align: left"&gt;推荐 Java 版本&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;1.17-&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Java 8&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Minecraft 1.12 及以下版本对 Java 8 兼容性最好。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;1.18-1.19&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Java 17 或 Java 16（不推荐）&lt;/td&gt;
					&lt;td style="text-align: left"&gt;在这些版本中，Minecraft 对 Java 8 的支持已经逐渐停止，Java 16 和 Java 17 的性能和安全性更好。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;1.20+&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Java 17+&lt;/td&gt;
					&lt;td style="text-align: left"&gt;这些版本对 Java 16 以下的版本可能会有兼容性问题，Java 17 及以上提供了更好的性能和更高的安全性。&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;1.21+&lt;/td&gt;
					&lt;td style="text-align: left"&gt;Java 21+&lt;/td&gt;
					&lt;td style="text-align: left"&gt;新版本的 Minecraft 通常会逐步淘汰旧版的 Java，因此建议尽量使用最新的 LTS 版本（例如 Java 21）。&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;注意&lt;/div&gt;
 &lt;div class="notice-content"&gt;从 Minecraft 1.18 开始，官方已经不再支持 Java 8，因此建议使用 Java 17 及以上版本。&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;当然，如果不打算开那么远古的服务器，无脑选最新的 Java 版本即可，新版本相比旧版本在性能和安全性上都有显著提升，因此选择最新的 LTS 版本通常是最稳妥的选择。&lt;/p&gt;
&lt;h3 id="下载渠道"&gt;下载渠道
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.oracle.com/java/technologies/javase-jdk11-downloads.html" target="_blank" rel="noopener"
 &gt;Oracle JDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://adoptopenjdk.net/" target="_blank" rel="noopener"
 &gt;OpenJDK（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.azul.com/downloads/zulu-community/" target="_blank" rel="noopener"
 &gt;Zulu JDK&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://aws.amazon.com/corretto/" target="_blank" rel="noopener"
 &gt;Amazon Corretto&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://bugmenot.com/view/oracle.com" target="_blank" rel="noopener"
 &gt;Oracle 账号共享&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;根据操作系统选择对应版本（Windows 选 &lt;code&gt;.msi&lt;/code&gt;，Linux 选 &lt;code&gt;.tar.gz&lt;/code&gt;）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="安装步骤"&gt;安装步骤
&lt;/h3&gt;&lt;p&gt;下载完成后，双击安装包，按照提示完成安装即可。&lt;/p&gt;
&lt;p&gt;安装完成后，您可以在命令提示符中输入以下命令验证 Java 是否安装成功：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -version &lt;span class="c1"&gt;# 预期输出：java version &amp;#34;21.0.2&amp;#34; 2024-01-16&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="Minecraft Java 版本示例" class="gallery-image" data-flex-basis="459px" data-flex-grow="191" height="639" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-java-version.png" srcset="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-java-version_hu_88c4fbf0ca069b4e.png 800w, /p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-java-version.png 1223w" width="1223"&gt;&lt;/p&gt;


&lt;div class="notice success"&gt;
 &lt;div class="notice-title"&gt;安装完成！&lt;/div&gt;
 &lt;div class="notice-content"&gt;现在您已经成功安装了 Java 环境，可以开始搭建 Minecraft 服务器了。&lt;br&gt;
如果您在安装过程中遇到任何问题，请参考官方文档或社区论坛获取帮助。&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="-服务端核心选择"&gt;⚙️ 服务端核心选择
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;核心&lt;/th&gt;
					&lt;th style="text-align: left"&gt;特点&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;a class="link" href="https://www.minecraft.net/en-us/download/server" target="_blank" rel="noopener"
 &gt;原版服务端&lt;/a&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;官方原生体验&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;a class="link" href="https://www.spigotmc.org/" target="_blank" rel="noopener"
 &gt;Spigot&lt;/a&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;插件支持 + 性能优化&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;a class="link" href="https://papermc.io/" target="_blank" rel="noopener"
 &gt;Paper&lt;/a&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;增强版 Spigot&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;a class="link" href="https://fabricmc.net/" target="_blank" rel="noopener"
 &gt;Fabric&lt;/a&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;轻量级 MOD 支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;a class="link" href="https://files.minecraftforge.net/" target="_blank" rel="noopener"
 &gt;Forge&lt;/a&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;重型 MOD 支持&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="-启动服务器"&gt;🚀 启动服务器
&lt;/h2&gt;&lt;h3 id="创建服务器文件夹"&gt;创建服务器文件夹
&lt;/h3&gt;&lt;p&gt;在您选择的目录下创建一个新的文件夹，例如：&lt;code&gt;MinecraftServer&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="创建文件夹" class="gallery-image" data-flex-basis="375px" data-flex-grow="156" height="723" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-CreateFolder.png" srcset="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-CreateFolder_hu_798e18407cd9d62d.png 800w, /p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-CreateFolder.png 1132w" width="1132"&gt;&lt;/p&gt;
&lt;h3 id="启动脚本示例"&gt;启动脚本示例
&lt;/h3&gt;&lt;p&gt;在服务器文件夹中创建一个新的文本文件，命名为 &lt;code&gt;start.bat&lt;/code&gt;，并将以下代码复制到文件中：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-batch" data-lang="batch"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -Xmx16G -Xms16G -jar paper-1.21.4-6.jar nogui
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;请根据您的服务器核心版本替换 &lt;code&gt;paper-1.21.4-6.jar&lt;/code&gt; 为实际的 JAR 文件名。&lt;/p&gt;
&lt;h3 id="启动参数详解"&gt;启动参数详解
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-Xmx16G&lt;/code&gt;：最大内存分配（例如 16GB）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-Xms16G&lt;/code&gt;：初始内存分配（建议与 &lt;code&gt;-Xmx&lt;/code&gt; 相同）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;nogui&lt;/code&gt;：禁用图形界面以节省资源&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-jar&lt;/code&gt;：指定 JAR 文件（需替换为实际文件名）&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;首次运行注意事项&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;ol&gt;
&lt;li&gt;运行后窗口会自动关闭，这是正常现象。&lt;/li&gt;
&lt;li&gt;在生成的 &lt;code&gt;eula.txt&lt;/code&gt; 文件中修改授权协议：&lt;br&gt;
&lt;code&gt;eula=false&lt;/code&gt; → &lt;code&gt;eula=true&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;保存文件后重新运行启动脚本。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;


&lt;div class="notice success"&gt;
 &lt;div class="notice-title"&gt;启动成功标志&lt;/div&gt;
 &lt;div class="notice-content"&gt;当控制台显示 &lt;code&gt;Done (XXs)!&lt;/code&gt; 时表示服务器已就绪。&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img alt="启动完成" class="gallery-image" data-flex-basis="426px" data-flex-grow="177" height="628" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-startDone.png" srcset="/p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-startDone_hu_ad8d4d43bcc91efa.png 800w, /p/minecraft-%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%90%AD%E5%BB%BA%E6%8C%87%E5%8D%97/minecraft-startDone.png 1115w" width="1115"&gt;&lt;/p&gt;
&lt;h3 id="控制台操作指南"&gt;控制台操作指南
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;输入指令时&lt;strong&gt;不带&lt;/strong&gt;斜杠，具体操作如下：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;help&lt;/span&gt; &lt;span class="c1"&gt;# 查看帮助&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;list &lt;span class="c1"&gt;# 查看在线玩家&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ban &amp;lt;玩家名&amp;gt; &lt;span class="c1"&gt;# 禁止玩家进入服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pardon &amp;lt;玩家名&amp;gt; &lt;span class="c1"&gt;# 解除禁止&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;op &amp;lt;玩家名&amp;gt; &lt;span class="c1"&gt;# 给予玩家操作权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;deop &amp;lt;玩家名&amp;gt; &lt;span class="c1"&gt;# 取消操作权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;关闭服务器：&lt;code&gt;stop&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="notice danger"&gt;
 &lt;div class="notice-title"&gt;危险操作&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;ul&gt;
&lt;li&gt;直接关闭窗口&lt;/li&gt;
&lt;li&gt;强制结束进程&lt;/li&gt;
&lt;li&gt;意外断电&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;⚠️ 可能造成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;存档损坏&lt;/li&gt;
&lt;li&gt;数据丢失&lt;/li&gt;
&lt;li&gt;插件异常&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="连接服务器"&gt;连接服务器
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;localhost
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;或&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;📡 局域网连接需使用主机内网 IP，公网需配置端口转发。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Office 全版本下载链接（离线安装包）</title><link>/p/office-%E5%85%A8%E7%89%88%E6%9C%AC%E4%B8%8B%E8%BD%BD%E9%93%BE%E6%8E%A5%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E5%8C%85/</link><pubDate>Tue, 30 Jul 2024 00:00:00 +0000</pubDate><guid>/p/office-%E5%85%A8%E7%89%88%E6%9C%AC%E4%B8%8B%E8%BD%BD%E9%93%BE%E6%8E%A5%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E5%8C%85/</guid><description>&lt;h1 id="office-全版本下载链接离线安装包"&gt;Office 全版本下载链接（离线安装包）
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;以下均为 Microsoft 官方 CDN 直链，适用于 Windows（除非标注为 Mac）。&lt;br&gt;
所有链接为 &lt;code&gt;.img&lt;/code&gt; 格式，可直接下载或挂载安装。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="主要下载推荐"&gt;主要下载（推荐）
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Professional2021Retail.img" target="_blank" rel="noopener"
 &gt;Office 2021 Professional (专业版)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-365"&gt;Office 365
&lt;/h2&gt;&lt;h3 id="office-365-proplus企业应用版"&gt;Office 365 ProPlus（企业应用版）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365ProPlusRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365ProPlusRetail.img&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="office-365-business商业应用版"&gt;Office 365 Business（商业应用版）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365BusinessRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365BusinessRetail.img&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="office-365-homeprem家庭版--个人版"&gt;Office 365 HomePrem（家庭版 &amp;amp; 个人版）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365HomePremRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/O365HomePremRetail.img&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="office-365-homeprem-2013家庭版--个人版"&gt;Office 365 HomePrem 2013（家庭版 &amp;amp; 个人版）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/O365HomePremRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/O365HomePremRetail.img&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-2013"&gt;Office 2013
&lt;/h2&gt;&lt;h3 id="完整套件"&gt;完整套件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Professional（专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProfessionalRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProfessionalRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeStudent（家庭学生版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/HomeStudentRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/HomeStudentRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeBusiness（小型企业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/HomeBusinessRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/HomeBusinessRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="单组件"&gt;单组件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectPro（项目管理专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProjectProRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProjectProRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioPro（流程图专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/VisioProRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/VisioProRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectStd（项目管理标准版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProjectStdRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ProjectStdRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioStd（流程图标准版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/VisioStdRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/VisioStdRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access（数据库管理系统）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/AccessRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/AccessRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Outlook（电子邮件）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/OutlookRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/OutlookRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word（文档）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/WordRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/WordRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Excel（表格）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ExcelRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/ExcelRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint（幻灯片）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/PowerPointRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/PowerPointRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Publisher（出版应用软件）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/PublisherRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/PublisherRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OneNote（笔记本）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/OneNoteRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/39168D7E-077B-48E7-872C-B232C3E72675/media/zh-CN/OneNoteRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-2016"&gt;Office 2016
&lt;/h2&gt;&lt;h3 id="完整套件-1"&gt;完整套件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProPlus（专业增强版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlusRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlusRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Professional（专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProfessionalRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProfessionalRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeStudent（家庭学生版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudentRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudentRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeBusiness（小型企业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusinessRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusinessRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="单组件-1"&gt;单组件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectProRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectProRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioProRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioProRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStdRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStdRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStdRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStdRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/AccessRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/AccessRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Outlook&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/OutlookRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/OutlookRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/WordRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/WordRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Excel&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ExcelRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ExcelRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPointRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPointRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Publisher&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PublisherRetail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PublisherRetail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-2019"&gt;Office 2019
&lt;/h2&gt;&lt;h3 id="完整套件-2"&gt;完整套件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProPlus（专业增强版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlus2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlus2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Professional（专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Professional2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Professional2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeStudent（家庭学生版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudent2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudent2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeBusiness（小型企业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusiness2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusiness2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="单组件-2"&gt;单组件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectPro2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectPro2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioPro2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioPro2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStd2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStd2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStd2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStd2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Access2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Access2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Outlook&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Outlook2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Outlook2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Word2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Word2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Excel&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Excel2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Excel2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPoint2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPoint2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Publisher&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Publisher2019Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Publisher2019Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-2021"&gt;Office 2021
&lt;/h2&gt;&lt;h3 id="完整套件-3"&gt;完整套件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProPlus（专业增强版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlus2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProPlus2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Professional（专业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Professional2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Professional2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeStudent（家庭学生版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudent2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeStudent2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HomeBusiness（小型企业版）&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusiness2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/HomeBusiness2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="单组件-3"&gt;单组件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectPro2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectPro2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioPro&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioPro2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioPro2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;ProjectStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStd2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/ProjectStd2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;VisioStd&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStd2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/VisioStd2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Access&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Access2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Access2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Outlook&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Outlook2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Outlook2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Word2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Word2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Excel&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Excel2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Excel2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPoint2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/PowerPoint2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Publisher&lt;/strong&gt;&lt;br&gt;
32 &amp;amp; 64 位：&lt;a class="link" href="https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Publisher2021Retail.img" target="_blank" rel="noopener"
 &gt;https://officecdn.microsoft.com/sg/492350f6-3a01-4f97-b9c0-c7c6ddf67d60/media/zh-CN/Publisher2021Retail.img&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="office-2019-for-mac"&gt;Office 2019 for Mac
&lt;/h2&gt;&lt;h3 id="完整套件-4"&gt;完整套件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;不含 Teams&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=525133" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=525133&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;包含 Teams&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=2009112" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=2009112&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="单组件-4"&gt;单组件
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Word&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=525134" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=525134&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Excel&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=525135" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=525135&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;PowerPoint&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=525136" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=525136&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Outlook&lt;/strong&gt;&lt;br&gt;
安装包：&lt;a class="link" href="https://go.microsoft.com/fwlink/p/?linkid=525137" target="_blank" rel="noopener"
 &gt;https://go.microsoft.com/fwlink/p/?linkid=525137&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Volatility 内存取证框架安装与使用</title><link>/p/volatility-%E5%86%85%E5%AD%98%E5%8F%96%E8%AF%81%E6%A1%86%E6%9E%B6%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/</link><pubDate>Thu, 02 Feb 2023 00:00:00 +0000</pubDate><guid>/p/volatility-%E5%86%85%E5%AD%98%E5%8F%96%E8%AF%81%E6%A1%86%E6%9E%B6%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8/</guid><description>&lt;h1 id="volatility-内存取证框架"&gt;Volatility 内存取证框架
&lt;/h1&gt;&lt;h2 id="安装步骤基于-python2"&gt;安装步骤（基于 Python2）
&lt;/h2&gt;

&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;环境说明&lt;/div&gt;
 &lt;div class="notice-content"&gt;Kali Linux 自带 Python2，无需额外安装。以下操作均在 root 或 sudo 权限下执行。&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="第一步确认-python2-环境"&gt;第一步：确认 Python2 环境
&lt;/h3&gt;&lt;p&gt;Kali 自带 Python2，可通过以下命令验证：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 --version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第二步安装-pip2"&gt;第二步：安装 pip2
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl https://bootstrap.pypa.io/pip/2.7/get-pip.py -o get-pip.py
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 get-pip.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第三步安装-python2-依赖库"&gt;第三步：安装 Python2 依赖库
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install pycryptodome -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# python2 -m pip install distorm3 -i https://pypi.tuna.tsinghua.edu.cn/simple/ # 可选，distorm3 后续会源码编译&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第四步编译安装-distorm3"&gt;第四步：编译安装 distorm3
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/vext01/distorm3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; distorm3
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第五步编译安装-volatility"&gt;第五步：编译安装 Volatility
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;git clone https://github.com/volatilityfoundation/volatility.git &lt;span class="c1"&gt;# 假设目录名为 Volatility&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; Volatility
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 setup.py install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第六步安装常用-python-插件"&gt;第六步：安装常用 Python 插件
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Yara（恶意软件分类工具）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install yara -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# OpenPyxl（读写 Excel 文件）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# ujson（JSON 解析）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install ujson -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# construct 模块（后面 mimikatz 需要特定版本）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install construct -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# mimikatz 插件依赖&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python2 -m pip install mimikatz -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="第七步安装-mimikatz-插件"&gt;第七步：安装 mimikatz 插件
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;将 &lt;code&gt;mimikatz.py&lt;/code&gt; 复制到 &lt;code&gt;volatility-master/volatility/plugins/&lt;/code&gt; 目录中（具体路径根据你的 Volatility 源码位置调整）。&lt;/li&gt;
&lt;li&gt;安装指定版本的 construct（mimikatz 插件所需）：
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip2 install --upgrade pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pip2 install &lt;span class="nv"&gt;construct&lt;/span&gt;&lt;span class="o"&gt;==&lt;/span&gt;2.5.5-reupload -i https://pypi.tuna.tsinghua.edu.cn/simple/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;插件和安装包可统一打包分发（如群文件）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id="基本用法"&gt;基本用法
&lt;/h2&gt;&lt;h3 id="命令格式及插件列表"&gt;命令格式及插件列表
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt; 10
&lt;/span&gt;&lt;span class="lnt"&gt; 11
&lt;/span&gt;&lt;span class="lnt"&gt; 12
&lt;/span&gt;&lt;span class="lnt"&gt; 13
&lt;/span&gt;&lt;span class="lnt"&gt; 14
&lt;/span&gt;&lt;span class="lnt"&gt; 15
&lt;/span&gt;&lt;span class="lnt"&gt; 16
&lt;/span&gt;&lt;span class="lnt"&gt; 17
&lt;/span&gt;&lt;span class="lnt"&gt; 18
&lt;/span&gt;&lt;span class="lnt"&gt; 19
&lt;/span&gt;&lt;span class="lnt"&gt; 20
&lt;/span&gt;&lt;span class="lnt"&gt; 21
&lt;/span&gt;&lt;span class="lnt"&gt; 22
&lt;/span&gt;&lt;span class="lnt"&gt; 23
&lt;/span&gt;&lt;span class="lnt"&gt; 24
&lt;/span&gt;&lt;span class="lnt"&gt; 25
&lt;/span&gt;&lt;span class="lnt"&gt; 26
&lt;/span&gt;&lt;span class="lnt"&gt; 27
&lt;/span&gt;&lt;span class="lnt"&gt; 28
&lt;/span&gt;&lt;span class="lnt"&gt; 29
&lt;/span&gt;&lt;span class="lnt"&gt; 30
&lt;/span&gt;&lt;span class="lnt"&gt; 31
&lt;/span&gt;&lt;span class="lnt"&gt; 32
&lt;/span&gt;&lt;span class="lnt"&gt; 33
&lt;/span&gt;&lt;span class="lnt"&gt; 34
&lt;/span&gt;&lt;span class="lnt"&gt; 35
&lt;/span&gt;&lt;span class="lnt"&gt; 36
&lt;/span&gt;&lt;span class="lnt"&gt; 37
&lt;/span&gt;&lt;span class="lnt"&gt; 38
&lt;/span&gt;&lt;span class="lnt"&gt; 39
&lt;/span&gt;&lt;span class="lnt"&gt; 40
&lt;/span&gt;&lt;span class="lnt"&gt; 41
&lt;/span&gt;&lt;span class="lnt"&gt; 42
&lt;/span&gt;&lt;span class="lnt"&gt; 43
&lt;/span&gt;&lt;span class="lnt"&gt; 44
&lt;/span&gt;&lt;span class="lnt"&gt; 45
&lt;/span&gt;&lt;span class="lnt"&gt; 46
&lt;/span&gt;&lt;span class="lnt"&gt; 47
&lt;/span&gt;&lt;span class="lnt"&gt; 48
&lt;/span&gt;&lt;span class="lnt"&gt; 49
&lt;/span&gt;&lt;span class="lnt"&gt; 50
&lt;/span&gt;&lt;span class="lnt"&gt; 51
&lt;/span&gt;&lt;span class="lnt"&gt; 52
&lt;/span&gt;&lt;span class="lnt"&gt; 53
&lt;/span&gt;&lt;span class="lnt"&gt; 54
&lt;/span&gt;&lt;span class="lnt"&gt; 55
&lt;/span&gt;&lt;span class="lnt"&gt; 56
&lt;/span&gt;&lt;span class="lnt"&gt; 57
&lt;/span&gt;&lt;span class="lnt"&gt; 58
&lt;/span&gt;&lt;span class="lnt"&gt; 59
&lt;/span&gt;&lt;span class="lnt"&gt; 60
&lt;/span&gt;&lt;span class="lnt"&gt; 61
&lt;/span&gt;&lt;span class="lnt"&gt; 62
&lt;/span&gt;&lt;span class="lnt"&gt; 63
&lt;/span&gt;&lt;span class="lnt"&gt; 64
&lt;/span&gt;&lt;span class="lnt"&gt; 65
&lt;/span&gt;&lt;span class="lnt"&gt; 66
&lt;/span&gt;&lt;span class="lnt"&gt; 67
&lt;/span&gt;&lt;span class="lnt"&gt; 68
&lt;/span&gt;&lt;span class="lnt"&gt; 69
&lt;/span&gt;&lt;span class="lnt"&gt; 70
&lt;/span&gt;&lt;span class="lnt"&gt; 71
&lt;/span&gt;&lt;span class="lnt"&gt; 72
&lt;/span&gt;&lt;span class="lnt"&gt; 73
&lt;/span&gt;&lt;span class="lnt"&gt; 74
&lt;/span&gt;&lt;span class="lnt"&gt; 75
&lt;/span&gt;&lt;span class="lnt"&gt; 76
&lt;/span&gt;&lt;span class="lnt"&gt; 77
&lt;/span&gt;&lt;span class="lnt"&gt; 78
&lt;/span&gt;&lt;span class="lnt"&gt; 79
&lt;/span&gt;&lt;span class="lnt"&gt; 80
&lt;/span&gt;&lt;span class="lnt"&gt; 81
&lt;/span&gt;&lt;span class="lnt"&gt; 82
&lt;/span&gt;&lt;span class="lnt"&gt; 83
&lt;/span&gt;&lt;span class="lnt"&gt; 84
&lt;/span&gt;&lt;span class="lnt"&gt; 85
&lt;/span&gt;&lt;span class="lnt"&gt; 86
&lt;/span&gt;&lt;span class="lnt"&gt; 87
&lt;/span&gt;&lt;span class="lnt"&gt; 88
&lt;/span&gt;&lt;span class="lnt"&gt; 89
&lt;/span&gt;&lt;span class="lnt"&gt; 90
&lt;/span&gt;&lt;span class="lnt"&gt; 91
&lt;/span&gt;&lt;span class="lnt"&gt; 92
&lt;/span&gt;&lt;span class="lnt"&gt; 93
&lt;/span&gt;&lt;span class="lnt"&gt; 94
&lt;/span&gt;&lt;span class="lnt"&gt; 95
&lt;/span&gt;&lt;span class="lnt"&gt; 96
&lt;/span&gt;&lt;span class="lnt"&gt; 97
&lt;/span&gt;&lt;span class="lnt"&gt; 98
&lt;/span&gt;&lt;span class="lnt"&gt; 99
&lt;/span&gt;&lt;span class="lnt"&gt;100
&lt;/span&gt;&lt;span class="lnt"&gt;101
&lt;/span&gt;&lt;span class="lnt"&gt;102
&lt;/span&gt;&lt;span class="lnt"&gt;103
&lt;/span&gt;&lt;span class="lnt"&gt;104
&lt;/span&gt;&lt;span class="lnt"&gt;105
&lt;/span&gt;&lt;span class="lnt"&gt;106
&lt;/span&gt;&lt;span class="lnt"&gt;107
&lt;/span&gt;&lt;span class="lnt"&gt;108
&lt;/span&gt;&lt;span class="lnt"&gt;109
&lt;/span&gt;&lt;span class="lnt"&gt;110
&lt;/span&gt;&lt;span class="lnt"&gt;111
&lt;/span&gt;&lt;span class="lnt"&gt;112
&lt;/span&gt;&lt;span class="lnt"&gt;113
&lt;/span&gt;&lt;span class="lnt"&gt;114
&lt;/span&gt;&lt;span class="lnt"&gt;115
&lt;/span&gt;&lt;span class="lnt"&gt;116
&lt;/span&gt;&lt;span class="lnt"&gt;117
&lt;/span&gt;&lt;span class="lnt"&gt;118
&lt;/span&gt;&lt;span class="lnt"&gt;119
&lt;/span&gt;&lt;span class="lnt"&gt;120
&lt;/span&gt;&lt;span class="lnt"&gt;121
&lt;/span&gt;&lt;span class="lnt"&gt;122
&lt;/span&gt;&lt;span class="lnt"&gt;123
&lt;/span&gt;&lt;span class="lnt"&gt;124
&lt;/span&gt;&lt;span class="lnt"&gt;125
&lt;/span&gt;&lt;span class="lnt"&gt;126
&lt;/span&gt;&lt;span class="lnt"&gt;127
&lt;/span&gt;&lt;span class="lnt"&gt;128
&lt;/span&gt;&lt;span class="lnt"&gt;129
&lt;/span&gt;&lt;span class="lnt"&gt;130
&lt;/span&gt;&lt;span class="lnt"&gt;131
&lt;/span&gt;&lt;span class="lnt"&gt;132
&lt;/span&gt;&lt;span class="lnt"&gt;133
&lt;/span&gt;&lt;span class="lnt"&gt;134
&lt;/span&gt;&lt;span class="lnt"&gt;135
&lt;/span&gt;&lt;span class="lnt"&gt;136
&lt;/span&gt;&lt;span class="lnt"&gt;137
&lt;/span&gt;&lt;span class="lnt"&gt;138
&lt;/span&gt;&lt;span class="lnt"&gt;139
&lt;/span&gt;&lt;span class="lnt"&gt;140
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Volatility Foundation Volatility Framework 2.6
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;用法：volatility - 内存取证分析平台
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Options:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -h, --help 列出所有可用选项及其默认值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --conf-file=... 用户配置文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -d, --debug 调试模式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --plugins=PLUGINS 额外插件目录（冒号分隔）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --info 打印所有注册对象的信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cache-directory=... 缓存目录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cache 使用缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --tz=TZ 设置时区
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -f FILENAME 内存镜像文件名
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --profile=WinXPSP2x86 指定配置文件（用 --info 查看支持列表）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -l LOCATION 地址空间 URN 位置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -w, --write 启用写支持
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --dtb=DTB DTB 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --shift=SHIFT Mac KASLR 移位地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --output=text 输出格式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --output-file=FILE 输出到文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -v, --verbose 详细输出
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -g KDBG 指定 KDBG 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --force 强制使用可疑配置文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; -k KPCR 指定 KPCR 地址
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; --cookie=COOKIE 指定 nt!ObHeaderCookie 地址（Windows 10）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;支持的插件命令（部分）：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; amcache 查看 AmCache 应用程序痕迹
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; apihooks 检测内核及进程空间中的 API hook
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; atoms 列出会话及窗口站 atom 表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; atomscan Atom 表池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; auditpol 列出审计策略信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bigpools 转储大分页池
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; bioskbd 读取键盘缓冲数据（早期 BIOS 密码）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cachedump 获取内存中缓存的域帐号密码哈希
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; callbacks 打印全系统通知例程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; clipboard 提取 Windows 剪贴板内容
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cmdline 显示进程命令行参数
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; cmdscan 提取命令行历史记录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; connections 打印系统打开的网络连接（XP/2003）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; connscan 打印 TCP 连接信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; consoles 提取命令行历史记录
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; crashinfo 提取崩溃转储信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; deskscan tagDESKTOP 池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; devicetree 显示设备树信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dlldump 转储进程加载的 DLL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dlllist 打印每个进程的 DLL 列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; driverirp IRP hook 驱动检测
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; drivermodule 关联驱动对象至内核模块
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; driverscan 驱动对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dumpcerts 提取 RAS 私钥及 SSL 公钥
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dumpfiles 提取内存中映射或缓存的文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; dumpregistry 转储注册表信息至磁盘
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; editbox 查看 Edit 编辑控件信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; envars 显示进程环境变量
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; eventhooks 打印 Windows 事件 hook 详细信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; evtlogs 提取 Windows 事件日志（XP/2003）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; filescan 提取文件对象池信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gahti 转储用户句柄类型信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gditimers 打印 GDI 计时器及回调
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; gdt 显示全局描述符表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; getservicesids 获取注册表服务名称并返回 SID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; getsids 打印每个进程的 SID
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; handles 打印每个进程打开的句柄列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hashdump 转储 Windows 帐户密码哈希（LM/NTLM）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hibinfo 转储休眠文件信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hivedump 打印注册表配置单元信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hivelist 打印注册表配置单元列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hivescan 注册表配置单元池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hpakextract 从 HPAK 文件提取物理内存数据
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; hpakinfo 查看 HPAK 文件属性
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; idt 显示中断描述符表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; iehistory 重建 IE 缓存及访问历史
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imagecopy 导出原生 DD 镜像文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; imageinfo 查看/识别镜像信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; impscan 扫描对导入函数的调用
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; joblinks 打印进程任务链接信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kdbgscan 搜索和转储潜在 KDBG 值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; kpcrscan 搜索和转储潜在 KPCR 值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ldrmodules 检测未链接的 DLL
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; lsadump 提取 LSA 密钥信息（已解密）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; machoinfo 转储 Mach-O 文件格式信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; malfind 查找隐藏的和插入的代码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mbrparser 扫描并解析潜在的主引导记录（MBR）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; memdump 转储进程的可寻址内存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; memmap 打印内存映射
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; messagehooks 桌面和窗口消息钩子线程列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mftparser 扫描并解析潜在的 MFT 条目
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; moddump 转储内核驱动程序
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; modscan 内核模块池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; modules 打印加载模块列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; multiscan 批量扫描各种对象
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; mutantscan 互斥对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; notepad 查看记事本当前显示的文本
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; objtypescan 扫描窗口对象类型
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; patcher 基于页面扫描的补丁程序内存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; poolpeek 可配置的池扫描器
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; printkey 打印注册表项及其子项和值
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; privs 显示进程权限
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; procdump 进程转储到可执行文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pslist 按 EPROCESS 列表打印所有运行进程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; psscan 进程对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; pstree 以树形方式打印进程列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; psxview 查找隐藏进程
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; qemuinfo 转储 Qemu 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; raw2dmp 转换为 Windbg 崩溃转储格式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; screenshot 基于 GDI 的屏幕截图
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; servicediff Windows 服务列表比较
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sessions _MM_SESSION_SPACE 详细信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; shellbags 打印 Shellbags 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; shimcache 解析应用程序兼容性 Shim 缓存
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; shutdowntime 获取机器关机时间
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sockets 打印已打开套接字列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; sockscan TCP 套接字对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssdt 显示 SSDT 条目
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; strings 物理到虚拟地址的偏移匹配
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; svcscan Windows 服务列表扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; symlinkscan 符号链接对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; thrdscan 线程对象池扫描
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; threads 调查 _ETHREAD 和 _KTHREADs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; timeliner 创建内存痕迹时间线
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; timers 打印内核计时器及 DPC
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; truecryptmaster 恢复 TrueCrypt 7.1a 主密钥
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; truecryptpassphrase 查找并提取 TrueCrypt 密码
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; truecryptsummary TrueCrypt 摘要信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; unloadedmodules 打印卸载的模块列表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; userassist 打印注册表 UserAssist 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; userhandles 转储用户句柄表
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vaddump 转储 VAD 数据为文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vadinfo 转储 VAD 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vadtree 以树形显示 VAD 树
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vadwalk 显示遍历 VAD 树
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vboxinfo 转储 VirtualBox 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; verinfo 打印 PE 镜像中的版本信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; vmwareinfo 转储 VMware VMSS/VMSN 信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; volshell 内存镜像中的交互式 Shell
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; windows 打印桌面窗口详细信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; wintree Z 顺序打印桌面窗口树
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; wndscan 池扫描窗口站
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; yarascan 以 Yara 签名扫描进程或内核内存
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="使用示例"&gt;使用示例
&lt;/h3&gt;&lt;p&gt;以下示例中 &lt;code&gt;Target.vmem&lt;/code&gt; 为内存镜像文件，&lt;code&gt;--profile=Win7SP1x64&lt;/code&gt; 根据实际情况修改（可通过 &lt;code&gt;imageinfo&lt;/code&gt; 自动识别）。&lt;/p&gt;
&lt;h4 id="分析镜像基本信息"&gt;分析镜像基本信息
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py --filename&lt;span class="o"&gt;=&lt;/span&gt;Target.vmem imageinfo
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查找用户名密码哈希hashdump"&gt;查找用户名密码哈希（hashdump）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 hashdump
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="提取-lsa-密钥信息lsadump"&gt;提取 LSA 密钥信息（lsadump）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 lsadump
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="列举进程pslist不能检测隐藏进程"&gt;列举进程（pslist，不能检测隐藏进程）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 pslist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="直接破解哈希mimikatz-插件"&gt;直接破解哈希（mimikatz 插件）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 mimikatz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="扫描已终止或隐藏的进程psscan"&gt;扫描已终止或隐藏的进程（psscan）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 psscan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="树形显示进程列表pstree"&gt;树形显示进程列表（pstree）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 pstree
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="提取指定进程的内存memdump"&gt;提取指定进程的内存（memdump）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 memdump -p &amp;lt;PID&amp;gt; --dump-dir&lt;span class="o"&gt;=&lt;/span&gt;./
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看服务列表svcscan"&gt;查看服务列表（svcscan）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 svcscan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看-ie-浏览历史iehistory"&gt;查看 IE 浏览历史（iehistory）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 iehistory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看网络连接netscan"&gt;查看网络连接（netscan）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 netscan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看命令行操作cmdscan"&gt;查看命令行操作（cmdscan）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 cmdscan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看文件对象filescan"&gt;查看文件对象（filescan）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 filescan
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="提取文件dumpfiles"&gt;提取文件（dumpfiles）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 dumpfiles -Q 0x物理偏移地址 -D ./
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看记事本内容notepad"&gt;查看记事本内容（notepad）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 notepad
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="屏幕截图screenshot"&gt;屏幕截图（screenshot）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 screenshot --dump-dir&lt;span class="o"&gt;=&lt;/span&gt;./
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看注册表单元列表hivelist"&gt;查看注册表单元列表（hivelist）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 hivelist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="导出注册表单元hivedump"&gt;导出注册表单元（hivedump）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 hivedump -o 0xfffff8a001032410
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="获取注册表键值printkey"&gt;获取注册表键值（printkey）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 printkey -K &lt;span class="s2"&gt;&amp;#34;注册表路径&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="查看-userassist-运行记录"&gt;查看 UserAssist 运行记录
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f Target.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;Win7SP1x64 userassist
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="完整示例解密-truecrypt-加密文件"&gt;完整示例：解密 TrueCrypt 加密文件
&lt;/h3&gt;&lt;p&gt;以 &lt;code&gt;mem.vmem&lt;/code&gt; 为例，分析过程如下：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 1. 获取镜像信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f mem.vmem imageinfo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 输出建议使用 WinXPSP2x86&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 2. 查看进程，发现 TrueCrypt 进程（PID 2012）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f mem.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;WinXPSP2x86 pslist
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 3. 转储 TrueCrypt 进程内存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;python vol.py -f mem.vmem --profile&lt;span class="o"&gt;=&lt;/span&gt;WinXPSP2x86 memdump -p &lt;span class="m"&gt;2012&lt;/span&gt; -D ./
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 4. 将转储文件丢到 edff 解密工具（外部工具）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 步骤截图如下：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;暂无图片&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="常见问题与解决方法"&gt;常见问题与解决方法
&lt;/h2&gt;&lt;h3 id="问题libyaraso-找不到"&gt;问题：libyara.so 找不到
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Failed to import &amp;#39;/usr/lib/libyara.so&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;原因&lt;/strong&gt;：通过 &lt;code&gt;pip install yara&lt;/code&gt; 安装后，libyara.so 被放在了 Python 的 dist-packages 目录下，而 Volatility 期望在 &lt;code&gt;/usr/lib&lt;/code&gt; 中找到。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方法&lt;/strong&gt;：创建软链接&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -s /usr/local/lib/python2.7/dist-packages/usr/lib/libyara.so /usr/lib/libyara.so
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;（如果路径不同，请根据实际情况修改）&lt;/p&gt;
&lt;h3 id="推荐参考文章"&gt;推荐参考文章
&lt;/h3&gt;&lt;p&gt;&lt;a class="link" href="https://blog.csdn.net/Aluxian_/article/details/128194996" target="_blank" rel="noopener"
 &gt;Volatility 内存取证详细教程&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="快捷方式创建方便使用"&gt;快捷方式创建（方便使用）
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 进入 /usr/local/bin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建软链接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ln -s /path/to/vol.py vol &lt;span class="c1"&gt;# 将 /path/to/vol.py 替换为你的 vol.py 实际路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vol -h
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后即可直接使用 &lt;code&gt;vol&lt;/code&gt; 命令代替 &lt;code&gt;python vol.py&lt;/code&gt;。&lt;/p&gt;
&lt;hr&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;版权与使用声明&lt;/div&gt;
 &lt;div class="notice-content"&gt;工具仅可用于授权渗透测试或合法取证分析，请勿用于非法用途。&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>BurpSuite 安装及使用教程</title><link>/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</link><pubDate>Thu, 01 Dec 2022 00:00:00 +0000</pubDate><guid>/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/</guid><description>&lt;img src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/%E5%B0%81%E9%9D%A2.jpg" alt="Featured image of post BurpSuite 安装及使用教程" /&gt;&lt;h1 id="-burpsuite-安装及使用教程"&gt;🛠️ BurpSuite 安装及使用教程
&lt;/h1&gt;&lt;h2 id="1-burpsuite-简介"&gt;1. BurpSuite 简介
&lt;/h2&gt;&lt;p&gt;Burp Suite 是用于攻击 Web 应用程序的集成平台，包含了许多工具。Burp Suite 为这些工具设计了许多接口，以加快攻击应用程序的过程。所有工具都共享一个请求，并能处理对应的 HTTP 消息、持久性、认证、代理、日志、警报。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="2-burpsuite-2021-安装及配置"&gt;2. BurpSuite 2021 安装及配置
&lt;/h2&gt;&lt;h3 id="21-jdk-选择及配置"&gt;2.1 JDK 选择及配置
&lt;/h3&gt;&lt;h4 id="版本对应关系"&gt;版本对应关系
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;BurpSuite 1.7.x&lt;/strong&gt; → Java 8&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;BurpSuite 2021&lt;/strong&gt; → Java 11&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;⚠️ 注意&lt;/strong&gt;：&lt;br&gt;
原文提到“Java 17 不能用”是基于 2021 年的语境。&lt;strong&gt;在当前（2026 年）&lt;/strong&gt;，BurpSuite 新版本通常已支持 Java 17+。请根据你实际下载的 Burp 版本选择对应的 JDK。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="下载"&gt;下载
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noopener"
 &gt;Java 官方下载路径&lt;/a&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;本教程使用的是 2021 年的 Burp，因此下载 Java 11（亲测 Java 17 不适用）。推荐免安装版。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="下载示例" class="gallery-image" data-flex-basis="542px" data-flex-grow="225" height="709" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120203032191.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120203032191_hu_aca9b611045bac5d.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120203032191_hu_40d83883d9847c00.png 1600w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120203032191.png 1602w" width="1602"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Oracle 账号（临时使用）&lt;/strong&gt;：&lt;br&gt;
可访问 &lt;a class="link" href="http://bugmenot.com/view/oracle.com" target="_blank" rel="noopener"
 &gt;bugmenot&lt;/a&gt; 查找可用账号，示例：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1602404824@qq.com&lt;/code&gt; / &lt;code&gt;wf1996ROOT#&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;908344069@qq.com&lt;/code&gt; / &lt;code&gt;Java2019&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;下载后解压至自定义路径，例如 &lt;code&gt;D:/Java/jdk11&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="配置"&gt;配置
&lt;/h4&gt;&lt;h5 id="方法一配置环境变量"&gt;方法一：配置环境变量
&lt;/h5&gt;&lt;ol&gt;
&lt;li&gt;右键“此电脑” → 属性 → 高级系统设置 → 环境变量。&lt;img alt="image-20220120204950181" class="gallery-image" data-flex-basis="510px" data-flex-grow="212" height="336" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120204950181.png" width="714"&gt;&lt;/li&gt;
&lt;li&gt;在系统变量中：
&lt;ul&gt;
&lt;li&gt;新建 &lt;code&gt;JAVA_HOME&lt;/code&gt;，值为 &lt;code&gt;D:\Java\jdk11&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;编辑 &lt;code&gt;PATH&lt;/code&gt;，添加 &lt;code&gt;%JAVA_HOME%\bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;如果有 &lt;code&gt;jre&lt;/code&gt; 目录，添加 &lt;code&gt;%JAVA_HOME%\jre\bin&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;（可选）新建 &lt;code&gt;CLASSPATH&lt;/code&gt;，值为 &lt;code&gt;.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;保存后打开 CMD 执行 &lt;code&gt;java -version&lt;/code&gt;，应显示 Java 11。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="验证示例1" class="gallery-image" data-flex-basis="306px" data-flex-grow="127" height="511" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120210517212.png" width="652"&gt;
&lt;img alt="验证示例2" class="gallery-image" data-flex-basis="1991px" data-flex-grow="829" height="97" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20221201031010248.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20221201031010248_hu_255cc0c40f0a6d30.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20221201031010248.png 805w" width="805"&gt;
&lt;img alt="验证示例3" class="gallery-image" data-flex-basis="1781px" data-flex-grow="742" height="83" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120210655187.png" width="616"&gt;&lt;/p&gt;
&lt;h5 id="方法二运行时指定-java-路径"&gt;方法二：运行时指定 Java 路径
&lt;/h5&gt;&lt;p&gt;启动 Burp 时直接使用 Java 11 的绝对路径：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;D&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;\Java\jdk11\bin\java&lt;/span&gt;&lt;span class="c1"&gt; -jar burpsuite_pro_v2021.x.jar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;：路径中不能包含中文和空格。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h3 id="22-burpsuite-下载安装及激活"&gt;2.2 BurpSuite 下载安装及激活
&lt;/h3&gt;&lt;h4 id="下载-1"&gt;下载
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://portswigger.net/burp/releases" target="_blank" rel="noopener"
 &gt;Burp 官方下载页面&lt;/a&gt;&lt;br&gt;
下载 &lt;strong&gt;Professional&lt;/strong&gt; 版本的 JAR 包。&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220120212121510" class="gallery-image" data-flex-basis="596px" data-flex-grow="248" height="355" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120212121510.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120212121510_hu_a9dce342d24b4ce.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120212121510.png 883w" width="883"&gt;&lt;/p&gt;
&lt;h4 id="运行"&gt;运行
&lt;/h4&gt;&lt;p&gt;在 CMD 中执行：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -jar burpsuite_pro_v2021.x.jar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="运行示例1" class="gallery-image" data-flex-basis="443px" data-flex-grow="184" height="394" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120220428679.png" width="728"&gt;
&lt;img alt="运行示例2" class="gallery-image" data-flex-basis="295px" data-flex-grow="123" height="539" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120230952428.png" width="663"&gt;&lt;/p&gt;
&lt;h4 id="激活"&gt;激活
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;下载注册机：&lt;a class="link" href="https://github.com/h3110w0r1d-y/BurpLoaderKeygen/releases" target="_blank" rel="noopener"
 &gt;BurpLoaderKeygen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;在 CMD 中运行注册机：
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-cmd" data-lang="cmd"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -jar BurpLoaderKeygen.jar
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;按照注册机界面提示操作（复制 License、手动激活等）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="激活步骤1" class="gallery-image" data-flex-basis="438px" data-flex-grow="182" height="677" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120231706416.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120231706416_hu_3ab1cf1b25a49c31.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120231706416.png 1238w" width="1238"&gt;
&lt;img alt="激活步骤2" class="gallery-image" data-flex-basis="300px" data-flex-grow="125" height="530" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120231751086.png" width="664"&gt;
&lt;img alt="激活步骤3" class="gallery-image" data-flex-basis="644px" data-flex-grow="268" height="629" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120232030829.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120232030829_hu_5ec58d189395a220.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120232030829_hu_99bbf11890bb2194.png 1600w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120232030829.png 1689w" width="1689"&gt;
&lt;img alt="激活步骤4" class="gallery-image" data-flex-basis="298px" data-flex-grow="124" height="530" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220120232056689.png" width="659"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;成功标志&lt;/strong&gt;：界面显示 “Success”。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;汉化参考&lt;/strong&gt;：&lt;a class="link" href="https://www.jianshu.com/p/cf0b3d0c6140" target="_blank" rel="noopener"
 &gt;简书教程&lt;/a&gt;&lt;br&gt;
汉化包（百度网盘）：链接 &lt;code&gt;https://pan.baidu.com/s/1VYJGTzbdG5kVqVTVxxbsGQ&lt;/code&gt; 提取码 &lt;code&gt;39en&lt;/code&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="23-burpsuite-快捷启动方式选择"&gt;2.3 BurpSuite 快捷启动方式选择
&lt;/h3&gt;&lt;h4 id="方法一bat-脚本"&gt;方法一：bat 脚本
&lt;/h4&gt;&lt;p&gt;创建 &lt;code&gt;run.bat&lt;/code&gt;，内容（根据实际文件修改）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 要输入的内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -Dfile.encoding=utf-8 -javaagent:BurpSuiteCn.jar -Xbootclasspath/p:burploader.jar -jar burpsuite_pro_v2.0.11beta.jar
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;: 输入内容的具体说明&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;java -Dfile.encoding=utf-8（定义编码） -javaagent:BurpSuiteCn.jar（汉化补丁的名字） -Xbootclasspath/p:burploader.jar -jar（p:之后是加载器名） burpsuite_pro_v2.0.11beta.jar（burp详细版本及文件名）
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="bat示例" class="gallery-image" data-flex-basis="1087px" data-flex-grow="453" height="213" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126173354871.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126173354871_hu_1d960638884da2c3.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126173354871.png 965w" width="965"&gt;&lt;/p&gt;
&lt;h4 id="方法二vbs-静默脚本"&gt;方法二：vbs 静默脚本
&lt;/h4&gt;&lt;p&gt;创建 &lt;code&gt;run.vbs&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;#39; 首先要创建方法一里的 run.bat 文件
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Set ws = WScript.CreateObject(&amp;#34;WScript.Shell&amp;#34;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ws.Run &amp;#34;run.bat&amp;#34;, 0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;补充：创建桌面快捷方式.bat&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bat" data-lang="bat"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chcp 936
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;REM 设置936编码防止某些中文路径导致批处理失效&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;@&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; off
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;setlocal&lt;/span&gt; enabledelayedexpansion
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mode con cols=94 lines=30&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;color&lt;/span&gt; 0a&lt;span class="p"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;title&lt;/span&gt; 创建Burp Suite一键启动脚本快捷方式
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] 获得当前路径:&lt;span class="nv"&gt;%~dp0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%~dp0&lt;/span&gt;run.bat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;exist&lt;/span&gt; &lt;span class="nv"&gt;%path%&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] 发现Burp一键启动脚本run.bat
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] 启动脚本路劲：
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] &lt;span class="nv"&gt;%path%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;creat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;else&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [-] 注意,未发现启动脚本run.bat，请注意是否改名,程序退出... 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pause&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;creat&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] 开始创建快捷方式...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem 设置程序的完整路径(必要)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;Program&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%path%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem 设置快捷方式名字(必要)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;LinkName&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;Burpsuite
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem 程序工作路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;WorkDir&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%~dp0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem 设置快捷方式说明&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;Desc&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;BurpSuite一键启动
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;rem 设置快捷方式图标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;icon&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%~dp0&lt;/span&gt;/Burpsuite.ico
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="k"&gt;not&lt;/span&gt; &lt;span class="k"&gt;defined&lt;/span&gt; &lt;span class="nv"&gt;WorkDir&lt;/span&gt; &lt;span class="k"&gt;call&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;GetWorkDir&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%Program%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Set WshShell=CreateObject(&lt;span class="s2"&gt;&amp;#34;WScript.Shell&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;^)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; strDesKtop=WshShell.SpecialFolders(&lt;span class="s2"&gt;&amp;#34;DesKtop&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;^)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; Set oShellLink=WshShell.CreateShortcut(strDesKtop&lt;span class="se"&gt;^&amp;amp;&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;\&lt;/span&gt;&lt;span class="nv"&gt;%LinkName%&lt;/span&gt;&lt;span class="s2"&gt;.lnk&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;^)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.TargetPath=&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%Program%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.WorkingDirectory=&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%WorkDir%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.WindowStyle=1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.Description=&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%Desc%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.IconLocation=&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;%icon%&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; oShellLink.Save&lt;span class="p"&gt;)&amp;gt;&lt;/span&gt;makelnk.vbs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; [+] 桌面快捷方式创建成功!!
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;makelnk.vbs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;del&lt;/span&gt; /f /q makelnk.vbs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pause&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;eof&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;GetWorkDir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;WorkDir&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%~dp1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="nv"&gt;WorkDir&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;%WorkDir:~,-1%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;pause&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;goto&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nl"&gt;eof&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="方法三exe-启动"&gt;方法三：exe 启动
&lt;/h4&gt;&lt;p&gt;可参考 B 站视频：&lt;a class="link" href="https://www.bilibili.com/video/BV1aq4y1X7oE?p=2" target="_blank" rel="noopener"
 &gt;BurpSuite 2021 教程&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="3-burpsuite-的使用"&gt;3. BurpSuite 的使用
&lt;/h2&gt;&lt;h3 id="31-配置浏览器代理"&gt;3.1 配置浏览器代理
&lt;/h3&gt;&lt;p&gt;要想在自己使用的浏览器上使用 burpsuite 的话，需要为自己的浏览器安装证书。当然也可以不安装证书，因为 burpsuite 里有自带的 谷歌浏览器，按需求来。&lt;/p&gt;
&lt;h4 id="方式一系统代理下载证书"&gt;方式一：系统代理下载证书
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;Windows 设置 → 网络和 Internet → 代理 → 手动设置代理，地址 &lt;code&gt;127.0.0.1&lt;/code&gt;，端口 &lt;code&gt;8080&lt;/code&gt;。&lt;br&gt;
&lt;img alt="代理设置" class="gallery-image" data-flex-basis="304px" data-flex-grow="126" height="597" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126211256245.png" width="758"&gt;&lt;/li&gt;
&lt;li&gt;浏览器访问 &lt;code&gt;http://burp(http://burpsuite/&lt;/code&gt;) 下载 CA 证书。&lt;br&gt;
&lt;img alt="下载证书" class="gallery-image" data-flex-basis="1492px" data-flex-grow="621" height="151" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126211557416.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126211557416_hu_e591ee6d5a527ef1.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126211557416.png 939w" width="939"&gt;&lt;/li&gt;
&lt;li&gt;点击 “CA Certificate” 保存 &lt;code&gt;cacert.der&lt;/code&gt;。&lt;br&gt;
&lt;img alt="保存证书" class="gallery-image" data-flex-basis="479px" data-flex-grow="199" height="934" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126212307381.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126212307381_hu_96ee94a91d8c2334.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126212307381_hu_a6d5ece7034c7946.png 1600w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126212307381.png 1867w" width="1867"&gt;&lt;/li&gt;
&lt;li&gt;在浏览器中导入该证书（受信任的根证书颁发机构），然后访问 &lt;code&gt;https://www.baidu.com&lt;/code&gt; 测试。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="方式二burp-生成证书"&gt;方式二：Burp 生成证书
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;打开 Burp → Proxy → Proxy Settings。&lt;br&gt;
&lt;img alt="代理设置" class="gallery-image" data-flex-basis="819px" data-flex-grow="341" height="254" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1781104794816.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1781104794816_hu_173cf2e1b4907775.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/1781104794816.png 867w" width="867"&gt;&lt;/li&gt;
&lt;li&gt;生成 CA 证书。&lt;br&gt;
&lt;img alt="监听器示例" class="gallery-image" data-flex-basis="410px" data-flex-grow="171" height="951" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20260610232903289.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20260610232903289_hu_9a12e01af142984a.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20260610232903289_hu_37210cf46c47d86.png 1600w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20260610232903289.png 1628w" width="1628"&gt;&lt;/li&gt;
&lt;li&gt;按方式一的步骤 3 安装证书。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="方式三burp-内嵌浏览器"&gt;方式三：Burp 内嵌浏览器
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;打开 Burp → Proxy → open for browser （打开内嵌浏览器）&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h3 id="32-proxy-模块"&gt;3.2 Proxy 模块
&lt;/h3&gt;&lt;p&gt;Burp Proxy 是Burp Suite以用户驱动测试流程功能的核心，通过代理模式，可以让我们拦截、查看、修改所有在客户端和服务端之间传输的数据。&lt;/p&gt;
&lt;h4 id="intercept拦截"&gt;Intercept（拦截）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Forward&lt;/strong&gt;：放行请求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Drop&lt;/strong&gt;：丢弃请求&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intercept is on/off&lt;/strong&gt;：开关拦截&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt;：发送到其他模块&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Raw / Hex / Params / Header&lt;/strong&gt;：查看不同格式&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="http-history"&gt;HTTP History
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;记录所有 HTTP 流量，支持过滤（Filter）&lt;/li&gt;
&lt;li&gt;右键记录可执行更多操作&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="websockets-history"&gt;WebSockets History
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;类似 HTTP History，用于 WebSocket 通信&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="options重要设置"&gt;Options（重要设置）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Proxy Listeners&lt;/strong&gt;：设置监听端口&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intercept Client Requests&lt;/strong&gt;：配置请求拦截规则&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Intercept Server Responses&lt;/strong&gt;：配置响应拦截规则&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Miscellaneous&lt;/strong&gt;：杂项（如自动添加请求头）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="Options示例1" class="gallery-image" data-flex-basis="741px" data-flex-grow="308" height="190" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126220254321.png" width="587"&gt;
&lt;img alt="Options示例2" class="gallery-image" data-flex-basis="446px" data-flex-grow="185" height="446" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126221230676.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126221230676_hu_e9d3b5b22b907bd2.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126221230676.png 829w" width="829"&gt;
&lt;img alt="Options示例3" class="gallery-image" data-flex-basis="511px" data-flex-grow="212" height="370" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126221427067.png" width="788"&gt;
&lt;img alt="Options示例4" class="gallery-image" data-flex-basis="463px" data-flex-grow="193" height="375" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126221623265.png" width="724"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="33-target-模块"&gt;3.3 Target 模块
&lt;/h3&gt;&lt;p&gt;Burp Target 组件主要包含站点地图、目标域、Target 工具三部分组成，他们帮助渗透测试人员更好地了解目标应用的整体状况、当前的工作涉及哪些目标域、分析可能存在的攻击面等信息&lt;/p&gt;
&lt;h4 id="scope作用域"&gt;Scope（作用域）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;限制拦截、扫描的目标范围（域名、目录等）。&lt;br&gt;
&lt;img alt="Scope示例" class="gallery-image" data-flex-basis="858px" data-flex-grow="357" height="237" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126224014034.png" srcset="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126224014034_hu_fcc9dc737603aa7a.png 800w, /p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220126224014034.png 848w" width="848"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="site-map站点地图"&gt;Site Map（站点地图）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;左侧树形结构展示 URL 层级，右侧展示请求/响应详情。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="34-spider爬虫"&gt;3.4 Spider（爬虫）
&lt;/h3&gt;&lt;p&gt;智能爬虫，枚举应用内容与功能。&lt;/p&gt;
&lt;h3 id="35-scanner扫描器仅专业版"&gt;3.5 Scanner（扫描器，仅专业版）
&lt;/h3&gt;&lt;p&gt;自动发现 Web 漏洞。&lt;/p&gt;
&lt;h3 id="36-intruder入侵器"&gt;3.6 Intruder（入侵器）
&lt;/h3&gt;&lt;p&gt;Intruder——是一个定制的高度可配置的工具，对web应用程序进行自动化攻击，如：枚举标识符，收集有用的数据，以及使用fuzzing 技术探测常规漏洞。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://blog.csdn.net/zbj18314469395/article/details/115429675" target="_blank" rel="noopener"
 &gt;教程:Intruder Attack type&amp;amp;Payloads – 拥有上千种姿态的攻击模式&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="target"&gt;Target
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;Host：目标 URL&lt;/li&gt;
&lt;li&gt;Port：端口（HTTP 80，HTTPS 443）&lt;br&gt;
&lt;img alt="Target示例" class="gallery-image" data-flex-basis="640px" data-flex-grow="266" height="187" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/image-20220305212915113.png" width="499"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="positions攻击模式"&gt;Positions（攻击模式）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sniper&lt;/strong&gt;：单个 payload 集合，依次替换每个变量&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Battering ram&lt;/strong&gt;：单个 payload 集合，同时替换所有变量（值相同）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Pitchfork&lt;/strong&gt;：多个 payload 集合，按位置一一对应（数量需相同）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Cluster bomb&lt;/strong&gt;：多个 payload 集合，笛卡尔积组合&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="1sniper狙击枪"&gt;&lt;strong&gt;1、Sniper(狙击枪)&lt;/strong&gt;
&lt;/h5&gt;&lt;p&gt;第一种攻击模式: Sniper&lt;/p&gt;
&lt;p&gt;sniper的特点是只需要指定一个Payload Set，不管你Positions中有几个变数，都是一个Payload Set，但会针对每个变数逐项的替换。
在替换第一个位置变量的时候，第二个是不会动的，也就是替换第一个位置的时候，第二个会是原始值，而测试完第一个位置时，才会测试二个位置。
所以假设尝试替换账号密码，利用Payload内容是11,22,33,aa,bb,cc。进行暴力破解时，会去尝试:
admin:11
admin:22
admin:33
admin:aa
admin:bb
admin:cc
11:password0000
22:password0000… 这样依序下去。&lt;/p&gt;
&lt;p&gt;字段中Position的意思是表示第几个变量，因为我们只有设定两个，
账号§admin§就是position 1，而密码§password0000§就是position 2。
demo如下图:
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70.png)&lt;/p&gt;
&lt;h5 id="2battering-ram攻城槌"&gt;&lt;strong&gt;2、Battering ram(攻城槌)&lt;/strong&gt;
&lt;/h5&gt;&lt;p&gt;第二种攻击模式: Battering ram&lt;/p&gt;
&lt;p&gt;这种攻击模式实际上比第一种还好理解，也是不管你Positions中有几个变数，都是一个Payload Set。
并且每个变量位置的值都会是一样的。
所以假设尝试替换账号密码，账号内容是11,22,33,aa,bb,cc
进行暴力破解时，会去尝试
11:11
22:22
33:33
aa:aa… 这样依序下去
demo如下图:
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971512.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971513.png)&lt;/p&gt;
&lt;h5 id="3pitchfork干草叉"&gt;&lt;strong&gt;3、Pitchfork(干草叉)&lt;/strong&gt;
&lt;/h5&gt;&lt;p&gt;第三种攻击模式: Pitchfork&lt;/p&gt;
&lt;p&gt;不能只输入一个字典，每个变量要有自己的字典文件，也就是说每个变量有一个属于自己的Payload set，但是要注意的是每个Payload set里面的payload个数要一样。
(当然其实payload set不一样也是没关系，还是可以执行，只是多出来的那些payload不会被送出去而已。)
假设两个Position各有自己的Payload Set，
Position 1，也就是账号的地方，Payload是11,22,33
Position 2，也就是密码的地方，Payload是aa,bb,cc
尝试结果会是
11:aa
22:bb
33:cc
demo如下图:
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971514.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971515.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971516.png)&lt;/p&gt;
&lt;h5 id="4cluster-bomb集束炸弹"&gt;&lt;strong&gt;4、Cluster bomb(集束炸弹)&lt;/strong&gt;
&lt;/h5&gt;&lt;p&gt;第四种攻击模式: Cluster bomb&lt;/p&gt;
&lt;p&gt;这种方式也是每个变量都要输入字典，但是不会像Pitchfork是一对一的关系，而是每个都会去尝试到，逐项地去尝试一多对的方式。&lt;/p&gt;
&lt;p&gt;假设两个Position各有自己的Payload Set，
Position 1，也就是账号的地方，Payload是11,22,33
Position 2，也就是密码的地方，Payload是aa,bb,cc
尝试结果会是
11:aa
11:bb
11:cc
22:aa
22:bb
…
demo如下图:
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971527.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971528.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-16492463971529.png)&lt;/p&gt;
&lt;h4 id="payload-type部分常用"&gt;Payload type（部分常用）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Simple list&lt;/strong&gt;：手动输入或加载字典文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Runtime file&lt;/strong&gt;：大文件字典（不显示内容）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Custom iterator&lt;/strong&gt;：多位置组合&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Number&lt;/strong&gt;：数字序列（起始、步长、进制）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brute force&lt;/strong&gt;：字符集暴力枚举&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Null payloads&lt;/strong&gt;：重复相同请求&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;介绍完了四种Attack Mode之后，要来提的就是Payload type，虽然我们前面用的Payload type都是Simple list，(实际上最常用的也是Simple list)。不过Burp所支持的Payload type可是相当的多样化。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715211.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715212.png)&lt;/p&gt;
&lt;h5 id="simple-list"&gt;Simple list
&lt;/h5&gt;&lt;p&gt;首先Simple list可以算是最基本的，用法很简单，可以直接输入按Add，也可以上传文档。
虽然这边我们demo都是手动输入，不过实际上要执行暴力破解等动作，通常Payload一定会是很大量的，用手输入可能会累死，所以实际上都是用选择上传文件的方式。&lt;/p&gt;
&lt;p&gt;那至于字典文件要去哪里找，就…自己到处随便用关键词找找，因为满多地方都有各种不同的字典的或是Payload文档。
谈起Payload与字典文件可能又会无限发散，这边就随便放个SecLists让大家参考参考:
&lt;a class="link" href="https://github.com/danielmiessler/SecLists/tree/master/Passwords" target="_blank" rel="noopener"
 &gt;https://github.com/danielmiessler/SecLists/tree/master/Passwords&lt;/a&gt;&lt;/p&gt;
&lt;h5 id="runtime-file"&gt;Runtime file
&lt;/h5&gt;&lt;p&gt;Runtime file 是指定文档，让你直接选择文档，每一行就是一个Payload，其实这个跟Simple list直接Load就是一样的意思而已，只是Simple list如果汇入的文档很大，会因为画面要显示出来给你看，所以会跑很久，Runtime file没有要显示给你看，所以没这个问题。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715213.png)&lt;/p&gt;
&lt;h5 id="custom-iterator"&gt;Custom iterator
&lt;/h5&gt;&lt;p&gt;Custom iterator这个稍微就有点小复杂了，首先先注意到这边里面也有个Position 1~8&lt;/p&gt;
&lt;p&gt;8个都可以输入不同的Payload Set，也就是说八个之间会去做排列组合，但是前后的顺序不会改变，
最后的结果 = position1 + position2 + position3。
为了方便demo，用的是Battering ram攻击模式，Payload的Position：
Position 1: 11,22,33
Position 2: aa,bb,cc
Position 3: dog,cat&lt;/p&gt;
&lt;p&gt;最后执行的payload会是:
11aadog
22aadog
33aadog
11bbdog
22bbdog
…
以此类推总共18组payload：
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715214.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715315.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715316.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715317.png)&lt;/p&gt;
&lt;h5 id="character-substitution"&gt;Character substitution
&lt;/h5&gt;&lt;p&gt;Character substitution 字符替换的意思，也就是你可以设定把某个字符修改成另一个字符，其实可以算还是会从原本Simple list去延伸，所以看到item的地方跟Simple list一样。
跑完原本的Payload之后会做字符的替换。
所以假设我的payload输入abcd，可以看到字符替换的规则有a-&amp;gt;4,b-&amp;gt;8；所以暴力破解时送完原始的payload abcd之后。有单独把a换成4，有单独把b换成8，也有两个都换的。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715319.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715320.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715321.png)&lt;/p&gt;
&lt;h5 id="recursive-grep"&gt;Recursive grep
&lt;/h5&gt;&lt;p&gt;Recursive grep 其实听起来有点复杂，但是其实没那么复杂XD 可是我没好的范例demo。
是从上一次的响应结果中，取得部分特定内容作为下次请求的Payload。&lt;/p&gt;
&lt;h5 id="illegal-unicode"&gt;Illegal Unicode
&lt;/h5&gt;&lt;p&gt;这个我也是第一次发现原来Burp还有这一招，利用Illegal Unicode进行Bypass。
因为不是很理解，让我先默默跳过…&lt;/p&gt;
&lt;h5 id="character-blocks"&gt;Character blocks
&lt;/h5&gt;&lt;p&gt;Character blocks，举例，可以插入很多个A，起始要几个，每次增加多少个A，到多少个要停止，通常比较适用在测试overflow。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715322.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715323.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715424.png)&lt;/p&gt;
&lt;h5 id="number"&gt;Number
&lt;/h5&gt;&lt;p&gt;Number测试数字，这个也算是实际工作上很常用到的，可以设定起始多少到结尾多少，间隔多少数字，
也可以选择十进制与Hex，还有是否要小数点。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715425.png)
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715426.png)&lt;/p&gt;
&lt;h5 id="datas"&gt;Datas
&lt;/h5&gt;&lt;p&gt;如其名，就是用来测时间日期格式的Payload。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715427.png)&lt;/p&gt;
&lt;h5 id="brute-force"&gt;Brute Force
&lt;/h5&gt;&lt;p&gt;Brute Force是纯粹的暴力破解，这个其实算是我除了Simple与Number以外，可能比较常用到的之一，Payload的产生方式就是Character set中的所有字符排列组合都会试过，那也可以设定最小的长度与最大的长度，不过要注意就是Brute Force很容易一不小心Payload数量就超多的。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715428.png)&lt;/p&gt;
&lt;h5 id="null-payloads"&gt;Null payloads
&lt;/h5&gt;&lt;p&gt;Null payloads 其实就是重复同样的原始请求，没有进行修改，你可能会好奇这样有什么意义？！ 那这个就是等到你遇到需要的场景就会知道意义了，通常可能是做观察与搜集数据的时候用，比如要确认一直重复发起一样的请求，是否服务器都会给一样的响应。&lt;/p&gt;
&lt;h5 id="character-frobber"&gt;Character frobber
&lt;/h5&gt;&lt;p&gt;Character frobber 会按照顺序去递增每个字符的一个ASCII，感觉这个有点冷门，好像其实是满实用的，用途主要应该是用来确认token的每个字符是否有作用。&lt;/p&gt;
&lt;h5 id="bit-flipper"&gt;Bit flipper
&lt;/h5&gt;&lt;p&gt;Username generator&lt;/p&gt;
&lt;p&gt;用户名生成。&lt;/p&gt;
&lt;h5 id="ecb-block-shuffler"&gt;ECB block shuffler
&lt;/h5&gt;&lt;p&gt;ECB block shuffler 牵扯到加密模式，先不管他。&lt;/p&gt;
&lt;h4 id="payload-processing"&gt;Payload Processing
&lt;/h4&gt;&lt;p&gt;对 payload 进行加工（添加前缀/后缀、编码、正则替换等）。例如可以加入前缀、后缀字符、只截取字符串的某一部分等；后缀常见的可能像是Email结尾的字符，比如@gmail.com之类的。
可以利用match替换，可以反转，可以编码，许多方法可以选择。
&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="623px" data-flex-grow="259" height="244" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715429.png" width="634"&gt;
&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="521px" data-flex-grow="217" height="269" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715430.png" width="585"&gt;
&lt;img alt="在这里插入图片描述" class="gallery-image" data-flex-basis="412px" data-flex-grow="171" height="317" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/burpsuite-%E5%AE%89%E8%A3%85%E5%8F%8A%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3piajE4MzE0NDY5Mzk1,size_6,color_FFFFFF,t_70-164924639715431.png" width="545"&gt;&lt;/p&gt;
&lt;h4 id="payload-encoding"&gt;Payload Encoding
&lt;/h4&gt;&lt;p&gt;自动对特殊字符进行 URL 编码。这边则是勾选的话，Payload如果有match的characters就会进行URL-encode。
![在这里插入图片描述](D:/桌面/blog/content/post/网络安全工具安装使用教程/BurpSuite 安装及使用/20210404162540343.png)&lt;/p&gt;
&lt;h3 id="repeater"&gt;Repeater
&lt;/h3&gt;&lt;hr&gt;
&lt;h3 id="37-repeater重发器"&gt;3.7 Repeater（重发器）
&lt;/h3&gt;&lt;p&gt;手动修改并重发单个请求。&lt;/p&gt;
&lt;h3 id="38-sequencer序列器"&gt;3.8 Sequencer（序列器）
&lt;/h3&gt;&lt;p&gt;分析 token 随机性。&lt;/p&gt;
&lt;h3 id="39-decoder解码器"&gt;3.9 Decoder（解码器）
&lt;/h3&gt;&lt;p&gt;编解码工具（Base64、URL、HTML 等）。&lt;/p&gt;
&lt;h3 id="310-comparer比较器"&gt;3.10 Comparer（比较器）
&lt;/h3&gt;&lt;p&gt;可视化对比两个请求/响应的差异。&lt;/p&gt;</description></item><item><title>PHP 基础</title><link>/p/php-%E5%9F%BA%E7%A1%80/</link><pubDate>Sat, 19 Nov 2022 00:00:00 +0000</pubDate><guid>/p/php-%E5%9F%BA%E7%A1%80/</guid><description>&lt;img src="/p/php-%E5%9F%BA%E7%A1%80/%E5%B0%81%E9%9D%A2.jpg" alt="Featured image of post PHP 基础" /&gt;&lt;h1 id="php"&gt;•PHP
&lt;/h1&gt;&lt;h2 id="搭建环境"&gt;搭建环境
&lt;/h2&gt;&lt;h3 id="什么是php"&gt;什么是PHP
&lt;/h3&gt;&lt;p&gt;PHP 定义：一种服务器端的 HTML 脚本/编程语言，是一种简单的、面向对象的、解释型的、健壮的、安全的、性能非常之高的、独立于架构的、可移植的、动态的脚本语言。是一种广泛用于 Open Source（开放源代码）的尤其适合 Web 开发并可以嵌入 HTML 的多用途脚本语言。它的语法接近 C，Java 和 Perl，而且容易学习。该语言让 Web 开发人员快速的书写动态生成的网页。&lt;/p&gt;
&lt;p&gt;PHP前身：Personal HomePage，个人主页，使用 Perl 语言开发的一种写个人主页的语言。&lt;/p&gt;
&lt;p&gt;PHP：PHP Hypertext Preprocessor，php超文本预处理器，底层使用 C 语言。&lt;/p&gt;
&lt;h3 id="安装-apache-环境"&gt;安装 Apache 环境
&lt;/h3&gt;&lt;p&gt;可参考 &lt;a class="link" href="https://blog.csdn.net/weixin_44721672/article/details/88938524" target="_blank" rel="noopener"
 &gt;在 apache 中添加 php 处理模块_李志圆的博客-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="安装-apache-软件"&gt;安装 Apache 软件
&lt;/h4&gt;&lt;h5 id="安装版"&gt;安装版
&lt;/h5&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;获取 Apache 安装软件&lt;br&gt;
&lt;img alt="Apache 安装包" class="gallery-image" data-flex-basis="1545px" data-flex-grow="644" height="75" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118163917725.png" width="483"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;双击安装&lt;br&gt;
&lt;img alt="安装界面" class="gallery-image" data-flex-basis="364px" data-flex-grow="151" height="304" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118164142869.png" width="462"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择自定义&lt;br&gt;
&lt;img alt="自定义安装" class="gallery-image" data-flex-basis="317px" data-flex-grow="132" height="265" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118164441771.png" width="351"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;选择安装位置&lt;br&gt;
&lt;img alt="选择安装路径" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="264" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118164520946.png" width="352"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="免安装版"&gt;免安装版
&lt;/h5&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;官网下载软件&lt;br&gt;
&lt;img alt="下载页面" class="gallery-image" data-flex-basis="2376px" data-flex-grow="990" height="31" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118175158830.png" width="307"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;解压&lt;br&gt;
解压下载的文件，将解压后的文件放在相应目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置&lt;br&gt;
3.1 进入所在目录。&lt;br&gt;
3.2 下载服务器&lt;br&gt;
输入 &lt;code&gt;httpd -k install -n apache&lt;/code&gt;（该命令的意思是安装 Apache 服务器，并将该服务器名称命名为 &lt;code&gt;apache&lt;/code&gt;）。&lt;br&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;注意&lt;/div&gt;
 &lt;div class="notice-content"&gt;若出现 localhost 拒绝连接，则可能是未下载服务器。&lt;/div&gt;
&lt;/div&gt;&lt;br&gt;
&lt;img alt="安装服务器" class="gallery-image" data-flex-basis="1613px" data-flex-grow="672" height="148" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118175615850.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220118175615850_hu_14573674b38088ba.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220118175615850.png 995w" width="995"&gt;&lt;/p&gt;
&lt;p&gt;3.3 修改 &lt;code&gt;httpd.conf&lt;/code&gt;，把路径改为自己的安装路径。&lt;br&gt;
&lt;img alt="修改配置" class="gallery-image" data-flex-basis="1263px" data-flex-grow="526" height="95" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118175930118.png" width="500"&gt;&lt;/p&gt;
&lt;p&gt;3.4 配置文件更改权限（可能？）&lt;br&gt;
搜到的教程中说要改，于是跟着改了，不知道不改要不要紧。&lt;br&gt;
&lt;img alt="权限修改" class="gallery-image" data-flex-basis="645px" data-flex-grow="268" height="129" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118180455127.png" width="347"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="apache-的目录结构说明"&gt;Apache 的目录结构说明
&lt;/h4&gt;&lt;p&gt;&lt;img alt="目录结构" class="gallery-image" data-flex-basis="407px" data-flex-grow="169" height="259" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118164614459.png" width="440"&gt;&lt;/p&gt;
&lt;h4 id="httpdexe-的详细应用"&gt;Httpd.exe 的详细应用
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;服务器进程&lt;br&gt;
服务器程序运行之后才能够工作。&lt;br&gt;
&lt;img alt="服务器进程" class="gallery-image" data-flex-basis="1446px" data-flex-grow="602" height="71" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118164932789.png" width="428"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行 &lt;code&gt;httpd&lt;/code&gt;&lt;br&gt;
用来查看 Apache 具有哪些功能以及配置文件是否有错：&lt;code&gt;httpd&lt;/code&gt; 或 &lt;code&gt;httpd.exe&lt;/code&gt;（文件所在目录）。&lt;br&gt;
&lt;img alt="运行 httpd" class="gallery-image" data-flex-basis="1238px" data-flex-grow="516" height="75" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118165013317.png" width="387"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;查看使用的模块：&lt;code&gt;httpd -M&lt;/code&gt;&lt;br&gt;
&lt;img alt="查看模块" class="gallery-image" data-flex-basis="346px" data-flex-grow="144" height="247" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118165308587.png" width="357"&gt;&lt;/li&gt;
&lt;li&gt;验证配置文件是否有效：&lt;code&gt;httpd -t&lt;/code&gt;&lt;br&gt;
&lt;img alt="验证配置" class="gallery-image" data-flex-basis="1955px" data-flex-grow="814" height="61" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118165448526.png" width="497"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="配置默认站点"&gt;配置默认站点
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Apache 确定服务器上访问的位置&lt;br&gt;
网站文件夹所在位置。&lt;code&gt;httpd.conf&lt;/code&gt; 中的 &lt;code&gt;DocumentRoot&lt;/code&gt;。&lt;br&gt;
&lt;img alt="DocumentRoot 配置" class="gallery-image" data-flex-basis="1453px" data-flex-grow="605" height="73" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118170239004.png" width="442"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;方便用户使用名字访问对应的网站&lt;br&gt;
给文件夹对应的取一个别名。&lt;code&gt;http.conf&lt;/code&gt; 中的 &lt;code&gt;ServerName&lt;/code&gt;。&lt;br&gt;
&lt;img alt="ServerName 配置" class="gallery-image" data-flex-basis="1876px" data-flex-grow="781" height="66" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118170310908.png" width="516"&gt;&lt;/p&gt;
&lt;p&gt;端口可以单独实现：&lt;code&gt;httpd.conf&lt;/code&gt; 中的 &lt;code&gt;listen&lt;/code&gt;。&lt;br&gt;
&lt;img alt="Listen 配置" class="gallery-image" data-flex-basis="1296px" data-flex-grow="540" height="57" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118170429373.png" width="308"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重启 Apache&lt;br&gt;
凡是涉及到 Apache 配置文件的修改，需要重启 Apache 才能生效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;实现 DNS 域名解析&lt;br&gt;
通常默认站点都是本地 DNS：&lt;code&gt;hosts&lt;/code&gt; 文件。&lt;br&gt;
&lt;img alt="hosts 文件" class="gallery-image" data-flex-basis="537px" data-flex-grow="224" height="162" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118170804796.png" width="363"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="运行时出现问题"&gt;运行时出现问题
&lt;/h5&gt;&lt;ol&gt;
&lt;li&gt;要确保 Apache 与 PHP 都是 X64/X32 的。&lt;/li&gt;
&lt;li&gt;PHP 的版本号要对应 Apache 的版本号。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="安装与配置-php"&gt;安装与配置 PHP
&lt;/h3&gt;&lt;h4 id="安装-php-语言"&gt;安装 PHP 语言
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;获取 PHP 安装文件&lt;br&gt;
&lt;img alt="PHP 下载" class="gallery-image" data-flex-basis="1569px" data-flex-grow="653" height="78" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118171824651.png" width="510"&gt;&lt;/li&gt;
&lt;li&gt;解压缩&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="php-目录结构说明"&gt;PHP 目录结构说明
&lt;/h4&gt;&lt;p&gt;&lt;img alt="PHP 目录结构" class="gallery-image" data-flex-basis="885px" data-flex-grow="369" height="210" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118172151887.png" width="775"&gt;&lt;/p&gt;
&lt;h4 id="phpexe-的应用"&gt;PHP.exe 的应用
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;PHP.exe&lt;/code&gt; 可以解析 PHP 代码转变成 HTML 代码，从而让浏览器可以解析。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;进入目录&lt;br&gt;
通过 CMD 进入到 &lt;code&gt;php.exe&lt;/code&gt; 所在目录，例如 &lt;code&gt;cd D:\...\php8&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;运行命令&lt;br&gt;
通过 &lt;code&gt;php.exe&lt;/code&gt; 运行命令来指定要解析的 PHP 脚本：&lt;code&gt;php.exe -f PHP文件所在路径&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="配置-apache-加载-php-模块"&gt;配置 Apache 加载 PHP 模块
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Apache 加载 PHP 模块&lt;br&gt;
在 Apache 的主配置文件中加载对应的 PHP 提供的模块：&lt;br&gt;
&lt;code&gt;LoadModule php_module php8apache2_4.dll&lt;/code&gt; 所提供的模块链接所在路径。&lt;br&gt;
（&lt;code&gt;LoadModule&lt;/code&gt; 是加载模块的语法，标准是：&lt;code&gt;LoadModule 模块名称 模块的实现文件&lt;/code&gt;。注意 PHP 版本为 8 时 &lt;code&gt;php8_module&lt;/code&gt; 中的 &lt;code&gt;8&lt;/code&gt; 不需要写，写了会报错。）&lt;br&gt;
&lt;img alt="加载模块配置" class="gallery-image" data-flex-basis="2013px" data-flex-grow="838" height="85" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118204508927.png" width="713"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Apache 的 &lt;code&gt;bin&lt;/code&gt; 目录下打开 CMD，输入 &lt;code&gt;httpd -M&lt;/code&gt; 确认模块已导入。&lt;br&gt;
&lt;img alt="确认模块" class="gallery-image" data-flex-basis="225px" data-flex-grow="93" height="315" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118204410974.png" width="296"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Apache 分配工作给 PHP 模块&lt;br&gt;
如果是 PHP 代码就交给 PHP 处理：通过文件后缀判断 &lt;code&gt;.php&lt;/code&gt; 结尾肯定是 PHP 代码：&lt;br&gt;
&lt;code&gt;AddType application/x-httpd-php .php&lt;/code&gt;&lt;br&gt;
&lt;img alt="AddType 配置" class="gallery-image" data-flex-basis="1417px" data-flex-grow="590" height="119" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118205339294.png" width="703"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将 PHP 的配置文件加载到 Apache 配置文件中，共同生效。&lt;br&gt;
3.1 在 Apache 中指定 PHP 配置文件所在路径：&lt;code&gt;PHPIniDir php.ini 所在路径&lt;/code&gt;&lt;br&gt;
&lt;img alt="PHPIniDir 配置" class="gallery-image" data-flex-basis="1052px" data-flex-grow="438" height="192" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118224741084.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220118224741084_hu_e380e037663011ea.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220118224741084.png 842w" width="842"&gt;&lt;br&gt;
3.2 &lt;code&gt;php.ini&lt;/code&gt; 文件&lt;br&gt;
&lt;code&gt;php.ini&lt;/code&gt; 文件默认是不存在的，是以 &lt;code&gt;development&lt;/code&gt; 和 &lt;code&gt;production&lt;/code&gt; 格式存在，需要格式化。可以将 &lt;code&gt;php.ini-development&lt;/code&gt; 复制后改名为 &lt;code&gt;php.ini&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h5 id="运行时出现问题-1"&gt;运行时出现问题
&lt;/h5&gt;&lt;p&gt;&lt;img alt="错误提示" class="gallery-image" data-flex-basis="2038px" data-flex-grow="849" height="113" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118222929820.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220118222929820_hu_4080a730a7e013d2.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220118222929820.png 960w" width="960"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;解决方法&lt;/strong&gt;：&lt;br&gt;
原因是 PHP 8.0 需要用到 Visual Studio 2019 的 Microsoft Visual C++ Redistributable 工具，需要访问 &lt;a class="link" href="https://visualstudio.microsoft.com/zh-hans/downloads/" target="_blank" rel="noopener"
 &gt;下载 Visual Studio 2019&lt;/a&gt; 进行下载。&lt;br&gt;
&lt;img alt="VS 下载" class="gallery-image" data-flex-basis="1056px" data-flex-grow="440" height="345" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118223048972.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220118223048972_hu_a49fea1ffbeb98e3.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220118223048972.png 1519w" width="1519"&gt;&lt;/p&gt;
&lt;h4 id="php-连接数据库"&gt;PHP 连接数据库
&lt;/h4&gt;&lt;p&gt;PHP 本身不具备操作 MySQL 数据库的能力，需要借助 PHP 操作 MySQL 的扩展来实现。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;PHP 加载 MySQL 扩展&lt;br&gt;
在 &lt;code&gt;php.ini&lt;/code&gt; 文件中配置。&lt;br&gt;
&lt;img alt="MySQL 扩展配置" class="gallery-image" data-flex-basis="476px" data-flex-grow="198" height="128" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118234056762.png" width="254"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;指定扩展路径&lt;br&gt;
PHP 中所有的扩展都在 &lt;code&gt;ext&lt;/code&gt; 目录中，需要指定扩展所在路径：&lt;code&gt;extension_dir&lt;/code&gt;。&lt;br&gt;
&lt;img alt="extension_dir 配置" class="gallery-image" data-flex-basis="2234px" data-flex-grow="931" height="58" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220118231644541.png" width="540"&gt;&lt;br&gt;
例如：&lt;code&gt;extension_dir = &amp;quot;D:/Security/Server/php/ext&amp;quot;&lt;/code&gt;。当添加 &lt;code&gt;redis.dll&lt;/code&gt; 扩展时，只需写 &lt;code&gt;extension=redis.dll&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重启 Apache&lt;br&gt;
&lt;code&gt;php.ini&lt;/code&gt; 已被 Apache 加载，所以需要重启才会生效。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="搭建基于域名的虚拟主机"&gt;搭建基于域名的虚拟主机
&lt;/h3&gt;&lt;p&gt;在 Apache 中，虚拟主机的搭建有两种方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;在主配置文件中搭建&lt;br&gt;
需要手动开启虚拟主机（基于域名）：&lt;code&gt;NameVirtualHost *:80&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在专门的虚拟主机配置文件中配置&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;加载配置文件&lt;br&gt;
在主配置文件（&lt;code&gt;php.ini&lt;/code&gt;）中加载虚拟主机配置文件：虚拟主机配置文件已经开启了虚拟主机 &lt;code&gt;NameVirtualHost&lt;/code&gt;。&lt;br&gt;
&lt;img alt="加载虚拟主机配置" class="gallery-image" data-flex-basis="1014px" data-flex-grow="422" height="101" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119153756616.png" width="427"&gt;&lt;/li&gt;
&lt;li&gt;配置虚拟主机&lt;br&gt;
在虚拟主机配置文件中配置虚拟主机。&lt;br&gt;
&lt;img alt="虚拟主机配置" class="gallery-image" data-flex-basis="796px" data-flex-grow="331" height="207" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119161002178.png" width="687"&gt;&lt;br&gt;
2.1 增加一个对应的站点文件夹位置：&lt;code&gt;DocumentRoot&lt;/code&gt;&lt;br&gt;
&lt;img alt="DocumentRoot 配置" class="gallery-image" data-flex-basis="1386px" data-flex-grow="577" height="81" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119160801657.png" width="468"&gt;&lt;br&gt;
2.2 增加主机名字（文件夹的别名）：&lt;code&gt;ServerName&lt;/code&gt;&lt;br&gt;
&lt;img alt="ServerName 配置" class="gallery-image" data-flex-basis="1316px" data-flex-grow="548" height="72" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119161312660.png" width="395"&gt;&lt;br&gt;
2.3 增加域名解析 DNS：&lt;code&gt;hosts&lt;/code&gt;&lt;br&gt;
&lt;img alt="hosts 配置" class="gallery-image" data-flex-basis="1105px" data-flex-grow="460" height="86" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119161710138.png" width="396"&gt;&lt;br&gt;
2.4 需要给当前设定的站点（目录）访问权限&lt;br&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;注意&lt;/div&gt;
 &lt;div class="notice-content"&gt;Apache 2.4 会报错不能识别 &lt;code&gt;Order&lt;/code&gt;、&lt;code&gt;Deny&lt;/code&gt;、&lt;code&gt;Allow&lt;/code&gt;。&lt;/div&gt;
&lt;/div&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-apache" data-lang="apache"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;Directory&lt;/span&gt; &lt;span class="s"&gt;&amp;#39;站点目录&amp;#39;&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;Order&lt;/span&gt; Deny,Allow # 没有顺序关系：实际顺序有意义
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;Deny&lt;/span&gt; from 指定的范围
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;Allow&lt;/span&gt; from 指定范围/all
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="权限配置" class="gallery-image" data-flex-basis="657px" data-flex-grow="273" height="246" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119163340245.png" width="674"&gt;&lt;br&gt;
2.5 配置访问列表&lt;br&gt;
当访问一个目录时（没有指定具体要访问的文件）：&lt;code&gt;Options Indexes [FollowSymLinks]&lt;/code&gt;，如果访问目录，则列表显示所有文件。&lt;br&gt;
&lt;img alt="Options 配置" class="gallery-image" data-flex-basis="1126px" data-flex-grow="469" height="85" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119165028290.png" width="399"&gt;&lt;br&gt;
2.6 当用户访问指定目录不指定文件时，通常需要系统指定一个默认文件：&lt;code&gt;DirectoryIndex 默认的文件列表&lt;/code&gt;，使用空格分隔。&lt;br&gt;
&lt;img alt="DirectoryIndex 配置" class="gallery-image" data-flex-basis="1273px" data-flex-grow="530" height="95" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119165344330.png" width="504"&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注意：如果网站中整个根目录允许访问，但其中还有其他文件夹不允许访问，可以增加多个 &lt;code&gt;&amp;lt;Directory&amp;gt;&lt;/code&gt; 标签，针对不同的文件夹。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;localhost 配置&lt;br&gt;
一旦启用虚拟主机配置文件，默认的主机地址 &lt;code&gt;localhost&lt;/code&gt; 就不再生效。如果想要生效，需要为 &lt;code&gt;localhost&lt;/code&gt; 增加单独的虚拟主机。&lt;/li&gt;
&lt;li&gt;添加样图&lt;br&gt;
&lt;img alt="样图" class="gallery-image" data-flex-basis="281px" data-flex-grow="117" height="626" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119170301792.png" width="733"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="php-基础"&gt;PHP 基础
&lt;/h2&gt;&lt;h3 id="php-语法初步"&gt;PHP 语法初步
&lt;/h3&gt;&lt;p&gt;PHP 是一种运行在服务器端的脚本语言，可以嵌入到 HTML 中。&lt;/p&gt;
&lt;h4 id="php-代码标记"&gt;PHP 代码标记
&lt;/h4&gt;&lt;p&gt;在 PHP 历史发展中，可以使用多种标记来区分 PHP 脚本：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ASP 标记：&lt;code&gt;&amp;lt;% php 代码 %&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;短标记：&lt;code&gt;&amp;lt;? php 代码 ?&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;以上两种基本弃用，如果要使用需要在配置文件 &lt;code&gt;php.ini&lt;/code&gt; 中开启。&lt;br&gt;
&lt;img alt="开启短标记" class="gallery-image" data-flex-basis="638px" data-flex-grow="266" height="148" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119150858480.png" width="394"&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;脚本标记：&lt;code&gt;&amp;lt;script language=&amp;quot;php&amp;quot;&amp;gt;php 代码&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;标准标记（常用）：&lt;code&gt;&amp;lt;?php php 代码 ?&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="php-注释"&gt;PHP 注释
&lt;/h4&gt;&lt;p&gt;注释是个人学习和写代码的思路说明。PHP 中注释分为两种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;行注释&lt;/strong&gt;：一次注释一行&lt;br&gt;
&lt;code&gt;//&lt;/code&gt; 后面跟的所有内容都是注释。&lt;br&gt;
&lt;code&gt;#&lt;/code&gt; 与 &lt;code&gt;//&lt;/code&gt; 一样。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;块注释&lt;/strong&gt;：一次注释多行&lt;br&gt;
&lt;code&gt;/*&lt;/code&gt; 与 &lt;code&gt;*/&lt;/code&gt; 之间的全部内容都是注释。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="php-语句分隔符"&gt;PHP 语句分隔符
&lt;/h4&gt;&lt;p&gt;语句分隔符：在 PHP 中，代码以行为单位，系统通过分号 &lt;code&gt;;&lt;/code&gt;（英文状态）判断行的结束。&lt;/p&gt;
&lt;p&gt;特殊说明：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PHP 中标记结束符 &lt;code&gt;?&amp;gt;&lt;/code&gt; 自带语句结束符的效果，最后一行 PHP 代码可以没有语句结束符 &lt;code&gt;;&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;PHP 中很多代码的书写并不是嵌入到 HTML 中，而是单独存在，通常书写习惯中就不建议使用标记结束符 &lt;code&gt;?&amp;gt;&lt;/code&gt;，PHP 会自动从开始到最后全部认为是 PHP 代码，从而解析。&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="变量"&gt;变量
&lt;/h3&gt;&lt;p&gt;变量来源于数学，是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。在指令式语言中，变量通常是可变的。&lt;/p&gt;
&lt;h4 id="变量基本概念"&gt;变量基本概念
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;变量是用来存储数据的。&lt;/li&gt;
&lt;li&gt;变量是存在名字的。&lt;/li&gt;
&lt;li&gt;变量是通过名字来访问数据的。&lt;/li&gt;
&lt;li&gt;变量是可以改变数据的。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="变量的使用"&gt;变量的使用
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;定义：在系统中增加对应的变量名字（内存）。&lt;/li&gt;
&lt;li&gt;赋值：将数据赋值给变量名（可以在定义的同时完成）。&lt;/li&gt;
&lt;li&gt;通过变量名访问存储的数据。&lt;/li&gt;
&lt;li&gt;将变量从内存中删除。&lt;br&gt;
&lt;img alt="变量示例" class="gallery-image" data-flex-basis="616px" data-flex-grow="256" height="302" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119190424980.png" width="776"&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="变量命名规则"&gt;变量命名规则
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;在 PHP 中变量名字必须以 &lt;code&gt;$&lt;/code&gt; 符号开始。&lt;/li&gt;
&lt;li&gt;名字由字母、数字和下划线 &lt;code&gt;_&lt;/code&gt; 构成，但不能以数字开头。&lt;/li&gt;
&lt;li&gt;在 PHP 中本身还允许中文变量（不建议）。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="预定义变量"&gt;预定义变量
&lt;/h4&gt;&lt;p&gt;预定义变量：提前定义的变量，系统定义的变量，存储许多要用到的数据（预定义变量都是数组）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$_GET&lt;/code&gt;：获取所有表单以 GET 方式提交的数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_POST&lt;/code&gt;：POST 提交的数据都会保存在此。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_REQUEST&lt;/code&gt;：GET 和 POST 提交的都会保存。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$GLOBALS&lt;/code&gt;：PHP 中所有的全局变量。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_SERVER&lt;/code&gt;：服务器信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_SESSION&lt;/code&gt;：session 会话数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_COOKIE&lt;/code&gt;：cookie 会话数据。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_ENV&lt;/code&gt;：环境信息。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$_FILES&lt;/code&gt;：用户上传的文件信息。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="可变变量"&gt;可变变量
&lt;/h4&gt;&lt;p&gt;可变变量：如果一个变量保存的值刚好是另外一个变量的名字，那么可以直接通过访问一个变量得到另外一个变量的值：在变量前面再多加一个 &lt;code&gt;$&lt;/code&gt; 符号。&lt;br&gt;
例如：&lt;code&gt;$a = 'b'; $b = 'bb';&lt;/code&gt; 那么 &lt;code&gt;$$a = 'bb'&lt;/code&gt;。&lt;/p&gt;
&lt;h4 id="变量传值"&gt;变量传值
&lt;/h4&gt;&lt;p&gt;将一个变量赋值给另外一个变量：变量传值。有两种方式：值传递和引用传递。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;值传递&lt;/strong&gt;：将变量保存的值复制一份，然后将新的值给另外一个变量保存（两个变量没有关系）。&lt;br&gt;
&lt;img alt="值传递" class="gallery-image" data-flex-basis="539px" data-flex-grow="224" height="595" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119192720376.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220119192720376_hu_fe54edc7042b872b.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220119192720376.png 1337w" width="1337"&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;引用传递&lt;/strong&gt;：将变量保存的值所在的内存地址传递给另外一个变量，两个变量指向同一块内存空间（两个变量是同一个值）。
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;// $新变量 = &amp;amp;$老变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;img alt="引用传递" class="gallery-image" data-flex-basis="624px" data-flex-grow="260" height="535" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119192910519.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220119192910519_hu_d8d4b5bf85f15816.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220119192910519.png 1391w" width="1391"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;内存分区：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;栈区&lt;/strong&gt;：程序可以操作的内存部分（不存数据，运行程序代码），少但快。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;代码段&lt;/strong&gt;：存储程序的内存部分（不执行）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数据段&lt;/strong&gt;：存储普通数据（全局区和静态区）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;堆区&lt;/strong&gt;：存储复杂数据，大但效率低。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="常量"&gt;常量
&lt;/h3&gt;&lt;p&gt;常量与变量一样，都是用来保存数据的。&lt;/p&gt;
&lt;h4 id="常量基本概念"&gt;常量基本概念
&lt;/h4&gt;&lt;p&gt;常量（const/constant）是一种在程序运行当中不可改变的量（数据）。常量一旦定义，通常数据不可改变（用户定义）。&lt;/p&gt;
&lt;h4 id="常量定义形式"&gt;常量定义形式
&lt;/h4&gt;&lt;p&gt;在 PHP 5.3 之后有两种定义方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用函数 &lt;code&gt;define('常量名', 常量值);&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;使用 &lt;code&gt;const 常量名 = 值;&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="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="cl"&gt; &lt;span class="c1"&gt;// 使用函数定义常量：define
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;3.14&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="cl"&gt; &lt;span class="c1"&gt;// 使用 const 关键字定义
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;PII&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&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="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;常量命名规则&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;常量不需要使用 &lt;code&gt;$&lt;/code&gt; 符号，一旦使用系统就会认为是变量。&lt;/li&gt;
&lt;li&gt;常量的名字由字母、数字和下划线组成，不能以数字开头。&lt;/li&gt;
&lt;li&gt;常量的名字通常以大写字母为主（与变量以示区别）。&lt;/li&gt;
&lt;li&gt;常量命名的规则比变量要松散，可以使用一些特殊字符，但只能使用 &lt;code&gt;define&lt;/code&gt; 定义。
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-_-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;smile&amp;#39;&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="cl"&gt;&lt;span class="c1"&gt;// const -_- = &amp;#39;smile&amp;#39;; // 错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注意：&lt;code&gt;define&lt;/code&gt; 和 &lt;code&gt;const&lt;/code&gt; 定义的常量有区别：在于访问权限区别。定义常量通常不区分大小写，但可以区分，可参照 &lt;code&gt;define&lt;/code&gt; 函数的第三个参数（参考文档）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="常量使用形式"&gt;常量使用形式
&lt;/h4&gt;&lt;p&gt;常量的使用与变量一样：不可改变值（在定义的时候必须赋值）。&lt;br&gt;
对于特殊名字的常量，需要使用 &lt;code&gt;constant('常量名')&lt;/code&gt; 函数来访问。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;// 定义特殊常量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-_-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;smile&amp;#39;&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="cl"&gt;&lt;span class="c1"&gt;// 使用常量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;PI&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="cl"&gt;&lt;span class="c1"&gt;// echo -_-; // 特殊符号不能直接使用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;constant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;-_-&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;常量和变量的使用选择&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;数据可能会变化 → 用变量。&lt;/li&gt;
&lt;li&gt;数据不一定会变 → 可以用常量或变量（变量居多）。&lt;/li&gt;
&lt;li&gt;数据不允许被修改 → 一定用常量。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="系统常量"&gt;系统常量
&lt;/h4&gt;&lt;p&gt;系统常量：系统帮助用户定义的常量，用户可以直接使用。&lt;/p&gt;
&lt;p&gt;常用系统常量：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;PHP_VERSION&lt;/code&gt;：PHP 版本号。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PHP_INT_SIZE&lt;/code&gt;：整型大小（所占用的字节数）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;PHP_INT_MAX&lt;/code&gt;：整型能表示的最大值（整型中允许出现负数：带符号）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;魔术常量&lt;/strong&gt;（双下划线开头+常量名+双下划线结束，值会随环境变化）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;__DIR__&lt;/code&gt;：当前被执行的脚本所在电脑的绝对路径。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__FILE__&lt;/code&gt;：当前被执行的脚本所在的电脑的绝对路径（带自己的文件名）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__LINE__&lt;/code&gt;：当前所属的行数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__NAMESPACE__&lt;/code&gt;：当前所属的命名空间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__CLASS__&lt;/code&gt;：当前所属的类。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;__METHOD__&lt;/code&gt;：当前所属的方法。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="数据类型"&gt;数据类型
&lt;/h3&gt;&lt;p&gt;数据类型（data type）：在 PHP 中指的是存储的数据本身的类型，而不是变量的类型。PHP 是一种弱类型语言，变量本身没有数据类型。&lt;/p&gt;
&lt;h4 id="php-的八种数据类型"&gt;PHP 的八种数据类型
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;简单（基本）数据类型（4小类）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;整型&lt;/strong&gt;：int/integer，系统分配 4 个字节存储，表示整数类型（有前提）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;浮点型&lt;/strong&gt;：float/double，系统分配 8 个字节存储，表示小数或者整型存不下的整数。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;字符串型&lt;/strong&gt;：string，系统根据实际长度分配，表示字符串（引号）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;布尔类型&lt;/strong&gt;：bool/boolean，只有两个值：&lt;code&gt;true&lt;/code&gt; 和 &lt;code&gt;false&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;复合数据类型（2小类）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;对象类型&lt;/strong&gt;：object，存放对象（面向对象）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;数组类型&lt;/strong&gt;：array，存储多个数据（一次性）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;特殊数据类型（2小类）&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;资源类型&lt;/strong&gt;：resource，存放资源数据（PHP 外部数据，如数据库、文件）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;空类型&lt;/strong&gt;：NULL，只有一个值就是 &lt;code&gt;NULL&lt;/code&gt;（不能运算）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="类型转换"&gt;类型转换
&lt;/h4&gt;&lt;p&gt;类型转换：在需要指定数据类型时，将外部数据转换成目标数据类型。PHP 中有两种类型转换方式：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;自动转换&lt;/strong&gt;：系统根据需求自己判定转换（用的比较多，效率偏低）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;强制（手动）转换&lt;/strong&gt;：人为根据需要的目标类型转换。&lt;br&gt;
强制转换规则：在变量之前增加一个括号 &lt;code&gt;()&lt;/code&gt;，里面写上对应类型：&lt;code&gt;int&lt;/code&gt;/&lt;code&gt;integer&lt;/code&gt;&amp;hellip; 其中 &lt;code&gt;NULL&lt;/code&gt; 类型要用到 &lt;code&gt;unset()&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在转换过程中，用得比较多的是转布尔类型（判断）和转数值类型（算术运算）。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其他类型转布尔类型&lt;/strong&gt;：&lt;code&gt;true&lt;/code&gt; 或 &lt;code&gt;false&lt;/code&gt;，在 PHP 中比较少类型会变成 &lt;code&gt;false&lt;/code&gt;。&lt;br&gt;
&lt;img alt="转布尔规则" class="gallery-image" data-flex-basis="279px" data-flex-grow="116" height="386" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220119201655626.png" width="449"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其他类型转数值的说明&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;布尔 &lt;code&gt;true&lt;/code&gt; 为 1，&lt;code&gt;false&lt;/code&gt; 为 0。&lt;/li&gt;
&lt;li&gt;字符串转数值有自己的规则：
&lt;ul&gt;
&lt;li&gt;以字母开头的字符串，永远为 0。&lt;/li&gt;
&lt;li&gt;以数字开头的字符串，取到碰到字符串为止（不会同时包含两个小数点）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="类型判断"&gt;类型判断
&lt;/h4&gt;&lt;p&gt;通过一组 &lt;code&gt;is_&lt;/code&gt; 开头的函数来判断变量类型，返回布尔值：&lt;code&gt;is_XXX(变量名)&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;bool&lt;/code&gt; 类型不能用 &lt;code&gt;echo&lt;/code&gt; 查看，可以使用 &lt;code&gt;var_dump&lt;/code&gt; 结构查看：&lt;code&gt;var_dump(变量1, 变量2...)&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;123asdf&amp;#39;&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="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;is_int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;is_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;另外还有一组函数用来获取以及设定数据（变量）的类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;gettype(变量名)&lt;/code&gt;：获取类型，返回类型对应的字符串。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;settype(变量名, 类型)&lt;/code&gt;：设定数据类型，与强制转换不同。强制转换 &lt;code&gt;(类型)变量名&lt;/code&gt; 是对数据值复制的内容进行处理（不会处理实际存储的内容）；而 &lt;code&gt;settype&lt;/code&gt; 会直接改变数据本身。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;sad123&amp;#39;&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;float&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 输出 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;gettype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;settype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;int&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;gettype&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// integer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="整数类型"&gt;整数类型
&lt;/h4&gt;&lt;p&gt;整数类型保存整数数值（范围限制），4 个字节存储数据，最大 32 位约 42 亿。PHP 中默认是有符号类型（区分正负数）。&lt;/p&gt;
&lt;p&gt;PHP 提供了四种整型定义方式：十进制、二进制、八进制、十六进制。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;110&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 十进制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="nx"&gt;b110&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 二进制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mo"&gt;0110&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 八进制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mh"&gt;0x110&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 十六进制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// 默认 PHP 输出数值都会自动转换成十进制输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$c&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$d&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 输出 110 6 72 272
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;进制转换函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;decbin()&lt;/code&gt;：十进制转二进制。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;decoct()&lt;/code&gt;：十进制转八进制。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dechex()&lt;/code&gt;：十进制转十六进制。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bindec()&lt;/code&gt;：二进制转十进制。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;decbin&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// 得到1010
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="浮点类型"&gt;浮点类型
&lt;/h4&gt;&lt;p&gt;浮点型：小数类型以及超过整型存储范围的整数（不保证精度），精度范围大约 15 个有效数字。&lt;/p&gt;
&lt;p&gt;定义方式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.23&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="cl"&gt;&lt;span class="nv"&gt;$f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;1.23e10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 科学计数法，e 表示底数 10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;尽量不要用浮点数做精确判断，因为浮点数保存的数据不够精确，计算机中小数基本上存储都不准确。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="布尔类型"&gt;布尔类型
&lt;/h4&gt;&lt;p&gt;布尔类型：两个值 &lt;code&gt;true&lt;/code&gt; 和 &lt;code&gt;false&lt;/code&gt;，通常用于判断比较。&lt;/p&gt;
&lt;p&gt;常用判断函数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;empty()&lt;/code&gt;：判断数据的值是否为“空”，不是 &lt;code&gt;NULL&lt;/code&gt;，如果为空返回 &lt;code&gt;true&lt;/code&gt;，不为空返回 &lt;code&gt;false&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;isset()&lt;/code&gt;：判断数据存储的变量本身是否存在，存在返回 &lt;code&gt;true&lt;/code&gt;，不存在返回 &lt;code&gt;false&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="运算符"&gt;运算符
&lt;/h3&gt;&lt;p&gt;运算符（operator）是一种将数据进行运算的特殊符号，PHP 中有十种运算符之多。&lt;/p&gt;
&lt;h4 id="赋值运算符"&gt;赋值运算符
&lt;/h4&gt;&lt;p&gt;符号 &lt;code&gt;=&lt;/code&gt;，将右边的结果（可以是变量、数据、常量和其他运算出来的结果）保存到内存的某个位置，然后将该内存地址赋值给左侧的变量（常量）。&lt;/p&gt;
&lt;h4 id="算术运算符"&gt;算术运算符
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;+&lt;/code&gt;：累加&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-&lt;/code&gt;：相减&lt;/li&gt;
&lt;li&gt;&lt;code&gt;*&lt;/code&gt;：相乘&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/&lt;/code&gt;：相除&lt;/li&gt;
&lt;li&gt;&lt;code&gt;%&lt;/code&gt;：取余（模），两个整数相除保留余数&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;进行除法或取余运算时，被除数（第二个数）不能为 0。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="比较运算符"&gt;比较运算符
&lt;/h4&gt;&lt;p&gt;比较两个数据的大小或内容是否相同，返回布尔类型：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&lt;/code&gt;：左边大于右边&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;=&lt;/code&gt;：左边大于等于右边&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;&lt;/code&gt;：左边小于右边&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;=&lt;/code&gt;：左边小于等于右边&lt;/li&gt;
&lt;li&gt;&lt;code&gt;==&lt;/code&gt;：左边等于右边（大小相同）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!=&lt;/code&gt;：左边不等于右边（大小不同）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;===&lt;/code&gt;：全等于，大小和数据类型都相同&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!==&lt;/code&gt;：不全等于，大小或类型不同&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="逻辑运算符"&gt;逻辑运算符
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&amp;amp;&lt;/code&gt;：逻辑与，两边条件同时成立&lt;/li&gt;
&lt;li&gt;&lt;code&gt;||&lt;/code&gt;：逻辑或，至少一边成立&lt;/li&gt;
&lt;li&gt;&lt;code&gt;!&lt;/code&gt;：逻辑非，对已有条件取反&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;123&amp;#39;&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;456&amp;#39;&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="cl"&gt;&lt;span class="c1"&gt;# 逻辑与
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;123&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;45&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 逻辑或
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;123&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;456&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 逻辑非
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;456&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;456&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt; &lt;span class="c1"&gt;// false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;逻辑与和逻辑或具有短路运算特性：如果第一个表达式结果已经满足条件，则不会运行后面的表达式。书写代码时尽量将出现概率最高的表达式放在第一位。&lt;/p&gt;
&lt;h4 id="连接运算符"&gt;连接运算符
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.&lt;/code&gt;：将两个字符串连接在一起。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.=&lt;/code&gt;：复合运算，将左边的内容与右边的内容连接起来，然后重新赋值给左边变量（&lt;code&gt;$a .= $b&lt;/code&gt; 等价于 &lt;code&gt;$a = $a . $b&lt;/code&gt;）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hello &amp;#39;&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;123&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// hello 123
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;.=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//等价于$a = $a . $b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// hello 123
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="错误抑制符"&gt;错误抑制符
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;@&lt;/code&gt;：在可能出错的表达式前面使用，可以抑制错误输出。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 报错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 不报错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="三目运算符"&gt;三目运算符
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;表达式1 ? 表达式2 : 表达式3&lt;/code&gt;：如果表达式1成立则执行表达式2，否则执行表达式3。&lt;br&gt;
可以复合使用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="o"&gt;?&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;三目运算还可以复合三木运算：&lt;code&gt;表达式1 ? (表达式2 ? 表达式3 : 表达式4) : (表达式5 ? 表达式6 : 表达式7)&lt;/code&gt;&lt;/p&gt;
&lt;h4 id="自操作运算符"&gt;自操作运算符
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;++&lt;/code&gt;：在原值上 +1&lt;/li&gt;
&lt;li&gt;&lt;code&gt;--&lt;/code&gt;：在原值上 -1&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前置与后置：&lt;br&gt;
如果只有自操作不参与其他运算，效果相同；如果同时参与其他运算，则后置先保留原值再改变，前置先改变再使用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nv"&gt;$b&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 2,2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// 1,2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;衍生赋值运算符：&lt;code&gt;+=&lt;/code&gt;、&lt;code&gt;-=&lt;/code&gt;、&lt;code&gt;*=&lt;/code&gt;、&lt;code&gt;/=&lt;/code&gt;、&lt;code&gt;%=&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $a = $a + $b = 15
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;-=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// $a = $a - ($b - 1) = 6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="位运算符"&gt;位运算符
&lt;/h4&gt;&lt;h5 id="计算机码"&gt;计算机码
&lt;/h5&gt;&lt;p&gt;计算机存储数据采用二进制编码规则：原码、反码、补码，最左边一位是符号位（正数为0，负数为1）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;原码&lt;/strong&gt;：数据本身从十进制转换成二进制的结果。正数的原码、反码、补码相同；负数符号位为1。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;反码&lt;/strong&gt;：负数符号位不变，其他位取反。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;补码&lt;/strong&gt;：负数反码+1。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;系统中存在 +0 和 -0：&lt;br&gt;
+0: &lt;code&gt;00000000&lt;/code&gt;&lt;br&gt;
-0: &lt;code&gt;10000000&lt;/code&gt;（原码） → &lt;code&gt;11111111&lt;/code&gt;（反码） → &lt;code&gt;00000000&lt;/code&gt;（补码）&lt;/p&gt;
&lt;h5 id="位运算"&gt;位运算
&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;amp;&lt;/code&gt;：按位与，两位都为1结果为1，否则0。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;|&lt;/code&gt;：按位或，至少一位为1结果为1。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~&lt;/code&gt;：按位非，位取反。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;^&lt;/code&gt;：按位异或，相同为0，不同为1。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;&amp;lt;&lt;/code&gt;：按位左移，整体向左移动，右边补0。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt;：按位右移，整体向右移动，左边补符号位（正数补0，负数补1）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;5&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="cl"&gt;&lt;span class="c1"&gt;//按位与
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//得到int(1)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	5	原码	00000101
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	-5	原码	10000101
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		取反	11111010 //反码:符号位不变:其他位取反
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		求补	11111011 //补码:反码+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	取出系统存储的结果进行与操作
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	5	00000101
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	-5	11111011
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	&amp;amp;	00000001	 //最终结果
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	转换:判断符号位,0表示正数(原码),1表示附属(补码)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//按位非
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//得到int(4)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	-5	补码	11111011
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		取反	00000100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		原码	00000100
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//按位右移
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;var_dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//得到int(-2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	-5	补码	11111011
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		&amp;gt;&amp;gt;1	 11111110 //运算结果:补码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; 反码	11111101 //补码-1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; 取反	10000010 //原码:-2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;注意：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;系统进行任何位运算时都使用补码。&lt;/li&gt;
&lt;li&gt;运算结束后必须转换成原码才是最终显示的数据。&lt;/li&gt;
&lt;li&gt;按位左移相当于乘以2，按位右移相当于除以2（不完全正确，整数除以2可能出现小数）。&lt;/li&gt;
&lt;/ol&gt;

 &lt;/blockquote&gt;
&lt;h4 id="运算符优先级"&gt;运算符优先级
&lt;/h4&gt;&lt;p&gt;多种运算符同时存在时的结合顺序。&lt;br&gt;
&lt;img alt="运算符优先级表" class="gallery-image" data-flex-basis="265px" data-flex-grow="110" height="898" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220120163828606.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220120163828606_hu_a78643dca527d3ca.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220120163828606.png 992w" width="992"&gt;&lt;/p&gt;
&lt;h3 id="流程控制"&gt;流程控制
&lt;/h3&gt;&lt;p&gt;流程控制：代码执行的方向。&lt;/p&gt;
&lt;h4 id="控制分类"&gt;控制分类
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;顺序结构&lt;/strong&gt;：代码从上往下顺序执行（最基本结构）。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分支结构&lt;/strong&gt;：给定条件，有多种可执行代码块，根据条件执行某一段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;循环结构&lt;/strong&gt;：在条件控制范围内，指定代码块重复执行。&lt;/li&gt;
&lt;/ul&gt;
&lt;h5 id="顺序结构"&gt;顺序结构
&lt;/h5&gt;&lt;p&gt;最基本结构，所有代码默认从上往下依次执行。&lt;/p&gt;
&lt;h5 id="分支结构"&gt;分支结构
&lt;/h5&gt;&lt;p&gt;PHP 中分支结构主要有 &lt;code&gt;if&lt;/code&gt; 分支和 &lt;code&gt;switch&lt;/code&gt; 分支。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;if 分支&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;给定一个条件，同时为该条件设置多种（两种）情况，然后通过条件判断来实现具体的执行段。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;最简 if：只有一段代码，可选择是否执行。
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&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="cl"&gt; &lt;span class="c1"&gt;// 满足条件执行的代码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;基础 if：两面性。
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&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="cl"&gt; &lt;span class="c1"&gt;// 满足条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&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="cl"&gt; &lt;span class="c1"&gt;// 不满足条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;复杂 if：可在不满足后再次判断。
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;条件表达式1&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="cl"&gt; &lt;span class="c1"&gt;// 满足1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;条件表达式2&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="cl"&gt; &lt;span class="c1"&gt;// 不满足1但满足2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="k"&gt;else&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="cl"&gt; &lt;span class="c1"&gt;// 全部不满足
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;switch 分支&lt;/strong&gt;：适合条件单一、固定值匹配的情况。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&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="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;值1&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 代码1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	在 switch 中，如果条件匹配成功，那么系统就不会继续匹配，而是会顺序执行该 case 下的所有代码，如：匹配到了值1，那么就会执行 代码1和代码2（没有 break 的情况）。如果不需要继续执行，那么就需要使用 break 中断 switch。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;值2&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 代码2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt; &lt;span class="k"&gt;default&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 都不匹配
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;选择&lt;/strong&gt;：&lt;code&gt;if&lt;/code&gt; 能做所有分支结构；&lt;code&gt;switch&lt;/code&gt; 处理条件多且单一、固定值匹配的情况。&lt;/p&gt;
&lt;h5 id="循环结构"&gt;循环结构
&lt;/h5&gt;&lt;p&gt;&lt;strong&gt;for 循环&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//条件表达式1：定义初始化条件,可以有多种赋值语句存在,使用逗号分隔即可。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//条件表达式 2：边界判定,限定循环执行的次数。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//条件表达式3：用来执行条件变化
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;条件表达式1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;条件表达式2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;条件表达式3&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="cl"&gt; &lt;span class="c1"&gt;// 循环体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//从1到10输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$end&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nv"&gt;$end&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&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="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br /&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;	&lt;span class="c1"&gt;//循环体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;执行原理：1 → 2（判断） → 循环体 → 3 → 2（判断）→ &amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;while 循环&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nx"&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="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&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="cl"&gt; &lt;span class="c1"&gt;// 循环体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 条件变化
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&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="cl"&gt;&lt;span class="c1"&gt;//从1输出到10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br /&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//循环体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//循环条件变更	$i++
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;do-while 循环&lt;/strong&gt;：至少执行一次循环体。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;do&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="cl"&gt; &lt;span class="c1"&gt;// 循环体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;条件&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;循环控制&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;continue [层级]&lt;/code&gt;：重新开始循环（默认1层）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;break [层级]&lt;/code&gt;：终止循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&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="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;100&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="cl"&gt; &lt;span class="c1"&gt;//判断是否是5的倍数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;	&lt;span class="c1"&gt;//不是5的倍数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//重新循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$i&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="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//重新跳到循环开始时
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//终止循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//输出数值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br /&amp;gt;&amp;#39;&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="流程控制替代语法"&gt;流程控制替代语法
&lt;/h5&gt;&lt;p&gt;用于在 HTML 中混写 PHP 时替代大括号，使代码更美观。&lt;br&gt;
左大括号 &lt;code&gt;{&lt;/code&gt; 用冒号 &lt;code&gt;:&lt;/code&gt; 替代，右大括号 &lt;code&gt;}&lt;/code&gt; 用 &lt;code&gt;end + 起始标记&lt;/code&gt; 替代。&lt;br&gt;
例如：&lt;code&gt;if(): ... endif;&lt;/code&gt;、&lt;code&gt;for(...): ... endfor;&lt;/code&gt;、&lt;code&gt;switch(): ... endswitch;&lt;/code&gt; 等。&lt;/p&gt;
&lt;p&gt;示例：九九乘法表（表格展示）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;table border=1&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php for($i = 1; $i &amp;lt; 10; $i++): ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php for($j = 1; $j &amp;lt;= $i; $j++): ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php echo $i . &amp;#39; * &amp;#39; . $j . &amp;#39; = &amp;#39; . $i * $j; ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;/td&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php endfor; ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;lt;?php endfor; ?&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&amp;lt;/table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="文件包含"&gt;文件包含
&lt;/h3&gt;&lt;p&gt;在一个 PHP 脚本中将另外一个文件包含进来，合作完成任务。&lt;/p&gt;
&lt;h4 id="文件包含的作用"&gt;文件包含的作用
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;使用被包含文件中的内容，实现代码共享（向上包含）。&lt;/li&gt;
&lt;li&gt;将自身内容提供给其他文件使用（向下包含）。&lt;/li&gt;
&lt;li&gt;分工协作，多个脚本共同完成任务。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="文件包含四种形式"&gt;文件包含四种形式
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;include&lt;/code&gt;：包含文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;include_once&lt;/code&gt;：判断是否已包含过，一个文件最多被包含一次。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;require&lt;/code&gt;：与 &lt;code&gt;include&lt;/code&gt; 相同，但错误级别更高（包含出错时停止执行）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;require_once&lt;/code&gt;：与 &lt;code&gt;include_once&lt;/code&gt; 相同。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;向上包含&lt;/strong&gt;：先包含文件，后使用文件中的内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件1	//include1.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;	&lt;span class="c1"&gt;//被包含文件：定义数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&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="cl"&gt;	&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;3.14&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="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件2	//include2.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="c1"&gt;//包含文件：使用数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//包含当前文件include2.php所在文件夹下的include1.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include1.php&amp;#34;&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="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;PI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//得到结果 13.14
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;向下包含&lt;/strong&gt;：先准备内容，然后包含另外的文件，在另外的文件中，使用当前的内容&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件3	//include3.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="c1"&gt;//定义数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;	&lt;span class="k"&gt;const&lt;/span&gt; &lt;span class="no"&gt;PI&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mf"&gt;3.14&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//包含文件：为了显示以上数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include4.php&amp;#34;&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="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件4	//include4.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;table&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="cl"&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;tr&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;td&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt; &amp;lt;tr&amp;gt;&amp;lt;td&amp;gt; &amp;lt;?php echo PI; ?&amp;gt; &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;&amp;lt;/table&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="文件加载原理"&gt;文件加载原理
&lt;/h4&gt;&lt;p&gt;PHP 执行流程：读取代码 → 编译成字节码 → zend engine 解析 opcode → 输出 HTML。&lt;br&gt;
文件加载时，被包含文件的代码嵌入到当前文件的 &lt;code&gt;include&lt;/code&gt; 位置，单独编译。如果被包含文件有错误，在执行到 &lt;code&gt;include&lt;/code&gt; 语句时才报错。&lt;/p&gt;
&lt;h4 id="include-与-require-的区别"&gt;include 与 require 的区别
&lt;/h4&gt;&lt;h5 id="include-和-include_once-的区别"&gt;include 和 include_once 的区别
&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;Include：系统会碰到一次，执行一次；如果对同一个文件进行多次加载，那么系统会执行多次；&lt;/li&gt;
&lt;li&gt;Include_once：系统碰到多次，也只会执行一次。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件1	//include1.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;	&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PI&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mf"&gt;3.14&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="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//文件2	//include2.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//正常执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include1.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//正常执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//正常执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//再次包含
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;include&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include1.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//报错,变量不可重复定义
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="require-和-include-的区别"&gt;require 和 include 的区别
&lt;/h5&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;include&lt;/code&gt; 错误级别较轻，不会阻止后续代码执行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;require&lt;/code&gt; 要求较高，包含出错后后续代码不再执行。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img alt="image-20220122193045252" class="gallery-image" data-flex-basis="805px" data-flex-grow="335" height="245" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122193045252.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122193045252_hu_bb0bc141a56f7cba.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122193045252.png 822w" width="822"&gt; &lt;img alt="image-20220122193441945" class="gallery-image" data-flex-basis="826px" data-flex-grow="344" height="206" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122193441945.png" width="709"&gt;&lt;/p&gt;
&lt;h4 id="文件加载路径"&gt;文件加载路径
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;绝对路径&lt;/strong&gt;：从磁盘根目录开始（如 &lt;code&gt;D:/sever/apache/htdocs/include1.php&lt;/code&gt;），效率偏低但安全。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;相对路径&lt;/strong&gt;：从当前文件所在目录开始，&lt;code&gt;./&lt;/code&gt; 当前，&lt;code&gt;../&lt;/code&gt; 上级，效率高但容易出错。&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="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="cl"&gt; 	&lt;span class="c1"&gt;//PHP文件加载路径
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//绝对路径
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 	&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;D:/sever/apache/htdocs/include1.php&amp;#34;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 	&lt;span class="c1"&gt;//相对路径加载
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 	&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;include1.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//默认当前文件本身
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./include1.php&amp;#34;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 	&lt;span class="c1"&gt;//复杂相对路径
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 	&lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;../htdocs/include1.php&amp;#34;&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="cl"&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="文件嵌套包含"&gt;文件嵌套包含
&lt;/h4&gt;&lt;p&gt;一个文件包含另一个文件，被包含文件又包含其他文件。嵌套容易导致相对路径出错。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//include1.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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 class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//include2.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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 class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include1.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//include3.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="c1"&gt;//文件嵌套包含
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//被包含include2本身包含了include1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;include_once&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;include2.php&amp;#34;&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="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//正常输出,得到10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="函数"&gt;函数
&lt;/h3&gt;&lt;h4 id="函数的基本概念"&gt;函数的基本概念
&lt;/h4&gt;&lt;p&gt;函数（function）是一种语法结构，将实现某一功能的代码块封装起来，实现代码复用。&lt;/p&gt;
&lt;h4 id="函数定义语法"&gt;函数定义语法
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="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="cl"&gt; &lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; Function 函数名 ([参数]){
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt; 	//函数体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;		//返回值：return 结果；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 }
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;	 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;// 调用可以在定义之前（编译与执行分离）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;display&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;display&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello&amp;#34;&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="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nx"&gt;display&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="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;函数通过 &lt;code&gt;函数名()&lt;/code&gt; 调用。&lt;/li&gt;
&lt;li&gt;如果定义时有参数，调用时必须传入对应参数。&lt;/li&gt;
&lt;li&gt;函数不会自动运行，必须调用才执行。&lt;/li&gt;
&lt;li&gt;只要系统在内存中能够找到对应的函数，就可以执行（函数的调用可以在函数定义之前）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="函数命名规范"&gt;函数命名规范
&lt;/h4&gt;&lt;p&gt;由字母、数字和下划线组成，不能以数字开头。常用命名方式：驼峰法（&lt;code&gt;showParentInfo&lt;/code&gt;）或下划线法（&lt;code&gt;show_parent_info&lt;/code&gt;）。在同一脚本周期内不允许出现同名函数。&lt;/p&gt;
&lt;h4 id="函数的参数"&gt;函数的参数
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;形参与实参&lt;/strong&gt;：形参是定义时的形式参数，实参是调用时传入的实际数据。PHP 允许实参多于形参（多余不用），但不能少于形参个数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;形参是实参的载体：实参在调用时通常是需要传入到函数内部参与计算（运算），那么需要在函数内部去找到实际数据所在的位置才能找到数据本身：需要实际调用的时候，将数据以实参的形式传递给形参：给形参赋值，从而使得函数内部可以用到外部数据。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt="image-20220122203206128" class="gallery-image" data-flex-basis="608px" data-flex-grow="253" height="334" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122203206128.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122203206128_hu_cd7b815dfd29cf5b.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122203206128.png 847w" width="847"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;blockquote class="alert alert-note"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;📝&lt;/span&gt;
 &lt;span class="alert-title"&gt;备注&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;在PHP中允许实参多余形参（个数）：函数内部不用而已。&lt;/p&gt;
&lt;p&gt;在PHP中理论上形参个数没有限制（实际开发不会太多）。&lt;/p&gt;
&lt;p&gt;实参不能少于形参个数。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;默认值&lt;/strong&gt;：形参可以设置默认值，当实参未提供时使用。默认值必须放在参数列表的右边。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$num1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;&lt;span class="c1"&gt;//函数的默认值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$num1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$num2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$num1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$num2&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//调用：默认值如果存在，可以不再传入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$num1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到 10,且不报错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;blockquote class="alert alert-note"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;📝&lt;/span&gt;
 &lt;span class="alert-title"&gt;备注&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;默认值的定义是放在最后边的（多个），不能左边形参有默认值，但是右边没有。&lt;/p&gt;
&lt;p&gt;函数外部定义的变量名字与函数定义的形参名字冲突（同名）是没有任何关联关系的，如果多个函数使用同样的形参名字也不冲突。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;引用传递&lt;/strong&gt;：使用 &lt;code&gt;&amp;amp;&lt;/code&gt; 符号，使函数内部可以修改外部变量的值。调用时必须传入变量。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;	&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;函数名&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;形参&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nx"&gt;形参&lt;/span&gt; &lt;span class="mi"&gt;2&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="cl"&gt;		&lt;span class="c1"&gt;//函数体
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在调用的时候，必须给引用传值的参数位置传入实际参数，而且参数本身必须是变量。（变里才有指向的数据的内存地址）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//定义变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt;&lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//函数定义
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt;$b&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="cl"&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$a&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="cl"&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nv"&gt;$b&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//得到 20
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//得到 10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//调用函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$b&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//得到 10，$a的本身没变
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//得到 10，$b改变
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;说明：函数在定义的时侯，对应的b形参采用的是取地址；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;所以在实参传入之后，形参b取到了外部变量b的内存地址，
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;而a取的是值，因此改变之后：a只改变了函数内部的自己；
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;b改变自己的同时也改变了外部
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="函数体"&gt;函数体
&lt;/h4&gt;&lt;p&gt;函数体内可以定义变量、常量，使用流程控制，调用其他函数等。&lt;/p&gt;
&lt;h4 id="函数返回值"&gt;函数返回值
&lt;/h4&gt;&lt;p&gt;使用 &lt;code&gt;return&lt;/code&gt; 关键字将结果返回给调用处。所有函数都有返回值，未明确 &lt;code&gt;return&lt;/code&gt; 时默认返回 &lt;code&gt;NULL&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220122211657823" class="gallery-image" data-flex-basis="680px" data-flex-grow="283" height="420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122211657823.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122211657823_hu_d117acdba298527a.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122211657823.png 1190w" width="1190"&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;函数的返回值可以是任意数据类型&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;return&lt;/code&gt; 在函数内部会终止函数执行；在文件外部使用 &lt;code&gt;return&lt;/code&gt; 可以返回内容给包含它的文件，并终止后续代码。&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220122212030835" class="gallery-image" data-flex-basis="614px" data-flex-grow="256" height="162" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122212030835.png" width="415"&gt; &lt;img alt="image-20220122212725313" class="gallery-image" data-flex-basis="496px" data-flex-grow="207" height="622" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122212725313.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122212725313_hu_5de14cb6b32b74cb.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122212725313.png 1288w" width="1288"&gt;&lt;/p&gt;
&lt;h4 id="作用域"&gt;作用域
&lt;/h4&gt;&lt;p&gt;作用域：变量（常量）能够被访问的区域。变量可以在普通代码或函数内部定义。&lt;/p&gt;
&lt;p&gt;在 PHP 中作用域严格来说分为两种：但是 PHP 内部还定义一些在严格意义之外的一种，所以总共算三种：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;全局变量&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数外部定义只在全局空间使用，函数内部不可直接访问（可通过 &lt;code&gt;$GLOBALS&lt;/code&gt; 或参数传递）。&lt;/li&gt;
&lt;li&gt;函数周期：直到脚本运行结束（最后一行代码执行完）。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220122214222524" class="gallery-image" data-flex-basis="541px" data-flex-grow="225" height="376" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122214222524.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122214222524_hu_7303aecfe38eaae4.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122214222524.png 848w" width="848"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;局部变量&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;函数内部定义，只在当前函数内使用。&lt;/li&gt;
&lt;li&gt;函数周期：函数执行结束即销毁。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220122214428317" class="gallery-image" data-flex-basis="677px" data-flex-grow="282" height="298" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122214428317.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122214428317_hu_c6a1e0b0eba98ffb.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122214428317.png 841w" width="841"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;超全局变量&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;系统预定义（如 &lt;code&gt;$_SERVER&lt;/code&gt;），无访问限制。&lt;/li&gt;
&lt;li&gt;超全局变量会将全局变量自动纳入到$GLOBALS 里面，而$GLOBALS 没有作用城限制，所以能够帮助局部去访问全局变量：但是必须使用数组方式。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220122215011845" class="gallery-image" data-flex-basis="1550px" data-flex-grow="645" height="133" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122215011845.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122215011845_hu_6760d396efca54ce.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122215011845.png 859w" width="859"&gt;&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220122215320562" class="gallery-image" data-flex-basis="509px" data-flex-grow="212" height="322" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122215320562.png" width="683"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;global&lt;/code&gt; 关键字可以在函数内部声明全局变量，使局部与全局共享同一内存空间。&lt;/p&gt;
&lt;p&gt;基本语法：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="nx"&gt;变量名&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//不能赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;变量名&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;值&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//修改
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;具体使用示例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$str_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;this a&amp;#34;&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="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;str&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="cl"&gt; &lt;span class="c1"&gt;//定义变量：使用全局变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;$str_a&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$str_a&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="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//定义变量：全局不存在
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;global&lt;/span&gt; &lt;span class="nv"&gt;$str_b&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="cl"&gt; &lt;span class="nv"&gt;$str_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;this b&amp;#34;&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//调用函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;str&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;&lt;span class="c1"&gt;//可以得到输出：this a
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//访问‘局部’变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$str_b&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//可以得到输出：this b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
 &lt;blockquote&gt;
 &lt;p&gt;虽然以上方式可以实现局部与全局的互访，但是通常不会这么用。一般如果会存在特殊使用，也会使用参数的形式来访问。（还可以使用常量：define定义的）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="静态变量"&gt;静态变量
&lt;/h4&gt;&lt;p&gt;&lt;code&gt;static&lt;/code&gt;是在函数内部定义的变量，使用 &lt;code&gt;static&lt;/code&gt; 关键字修饰，用来实现跨函数共享数据的变量：函数运行结束，所有同部变量都会清空，如果重新运行一下函数,所有的局部变量又会重新初始化。&lt;/p&gt;
&lt;p&gt;静态变量的使用：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;为了统计当前函数被调用的次数。&lt;/li&gt;
&lt;li&gt;：为了统筹函数多次调用得到的不同结果（递归思想）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;基本语法&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&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="cl"&gt; &lt;span class="c1"&gt;//定义变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nv"&gt;$变量名&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;值&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//通常会在定义的时候就直接赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;静态变量的作用是为了跨函数共享数据（同一个变量多次调用）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;countCall&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="cl"&gt; &lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nv"&gt;$count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&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="cl"&gt; &lt;span class="nv"&gt;$count&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$count&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;countCall&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;countCall&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220122221752626" class="gallery-image" data-flex-basis="587px" data-flex-grow="244" height="299" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122221752626.png" width="732"&gt;&lt;/p&gt;
&lt;h4 id="可变函数"&gt;可变函数
&lt;/h4&gt;&lt;p&gt;如果变量保存的值刚好是一个函数的名字，可以使用 &lt;code&gt;$变量()&lt;/code&gt; 来调用该函数。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$func&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;display&amp;#39;&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="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;display&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hello&amp;#39;&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$func&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// 输出 hello
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220122222640027" class="gallery-image" data-flex-basis="469px" data-flex-grow="195" height="491" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122222640027.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122222640027_hu_c307b3e7f84953d.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122222640027.png 961w" width="961"&gt;&lt;/p&gt;
&lt;p&gt;可变函数在系统使用的过程中还是比较多的，尤其是使用很多系统函数的时候：需要用户在外部定义一个自定义函数，但是是需要传入到系统函数内部使用。&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220122223050266" class="gallery-image" data-flex-basis="488px" data-flex-grow="203" height="369" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122223050266.png" width="751"&gt;&lt;/p&gt;
&lt;h4 id="匿名函数闭包"&gt;匿名函数（闭包）
&lt;/h4&gt;&lt;p&gt;没有名字的函数，通常赋值给变量。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$greet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$name&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Hello, &lt;/span&gt;&lt;span class="si"&gt;$name&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&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="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$greet&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Tom&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220122223454813" class="gallery-image" data-flex-basis="542px" data-flex-grow="226" height="215" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122223454813.png" width="486"&gt; &lt;img alt="image-20220122223608545" class="gallery-image" data-flex-basis="590px" data-flex-grow="246" height="238" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122223608545.png" width="586"&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;闭包&lt;/strong&gt;：匿名函数可以使用 &lt;code&gt;use&lt;/code&gt; 关键字引用外部变量，即使外部函数已执行完毕，这些变量仍被保留。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;getClosure&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="cl"&gt; &lt;span class="nv"&gt;$msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;hello&amp;#39;&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="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$msg&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$msg&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="cl"&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;&lt;span class="nv"&gt;$closure&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;getClosure&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="cl"&gt;&lt;span class="nv"&gt;$closure&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// hello
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220122224256874" class="gallery-image" data-flex-basis="681px" data-flex-grow="283" height="293" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122224256874.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220122224256874_hu_eceec753bb3efd37.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220122224256874.png 832w" width="832"&gt;&lt;/p&gt;
&lt;p&gt;证明：函数的局部变量在函数使用完之后没有被释放&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;使用内部匿名函数；&lt;/li&gt;
&lt;li&gt;匿名函数使用局部变量：use；&lt;/li&gt;
&lt;li&gt;匿名函数被返回给外部使用；&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img alt="image-20220122224659290" class="gallery-image" data-flex-basis="566px" data-flex-grow="236" height="329" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122224659290.png" width="777"&gt;&lt;/p&gt;
&lt;h4 id="伪类型"&gt;伪类型
&lt;/h4&gt;&lt;p&gt;假类型，实际上在 PHP 中不存在的类型。但是通过伪类型可以帮助程序员去更好的查看操作手册从而更方便学习。&lt;/p&gt;
&lt;p&gt;伪类型主要有两种：在三大类八小类之外。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;mixed&lt;/code&gt;：可以是多种数据类型。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;number&lt;/code&gt;：可以是整型或浮点型。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220122225144593" class="gallery-image" data-flex-basis="325px" data-flex-grow="135" height="285" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220122225144593.png" width="387"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="常用系统函数"&gt;常用系统函数
&lt;/h3&gt;&lt;h4 id="输出函数"&gt;输出函数
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;print()&lt;/code&gt;：类似 echo，返回 1。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;print_r()&lt;/code&gt;：简化版的 var_dump，只输出值（常用于数组）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;header('Content-type:text/html;charset=utf-8')&lt;/code&gt;：设置浏览器字符集。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220123152941816" class="gallery-image" data-flex-basis="767px" data-flex-grow="319" height="370" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123152941816.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123152941816_hu_48fc1176180a6cb9.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123152941816.png 1183w" width="1183"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="时间函数"&gt;时间函数
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;date('Y-m-d H:i:s'[, 时间戳])&lt;/code&gt;：格式化时间戳。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;time()&lt;/code&gt;：当前时间戳。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;microtime()&lt;/code&gt;：微秒级时间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strtotime()&lt;/code&gt;：字符串转时间戳。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220123170113659" class="gallery-image" data-flex-basis="825px" data-flex-grow="344" height="388" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123170113659.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123170113659_hu_46c6b9c2a6dd8c22.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123170113659.png 1335w" width="1335"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="数学函数"&gt;数学函数
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;max()&lt;/code&gt; / &lt;code&gt;min()&lt;/code&gt;：最大/最小值。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rand()&lt;/code&gt; / &lt;code&gt;mt_rand()&lt;/code&gt;：随机数（推荐 mt_rand）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;round()&lt;/code&gt;：四舍五入；&lt;code&gt;ceil()&lt;/code&gt; 向上取整；&lt;code&gt;floor()&lt;/code&gt; 向下取整。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pow()&lt;/code&gt;：乘方；&lt;code&gt;abs()&lt;/code&gt; 绝对值；&lt;code&gt;sqrt()&lt;/code&gt; 平方根。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="函数相关函数"&gt;函数相关函数
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;function_exists('函数名')&lt;/code&gt;：判断函数是否存在。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;func_get_arg($n)&lt;/code&gt;：获取第 n 个参数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;func_get_args()&lt;/code&gt;：获取所有参数（数组）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;func_num_args()&lt;/code&gt;：获取参数数量。&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220123172234340" class="gallery-image" data-flex-basis="582px" data-flex-grow="242" height="597" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123172234340.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123172234340_hu_b096a563166ce71e.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123172234340.png 1450w" width="1450"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="错误处理"&gt;错误处理
&lt;/h3&gt;&lt;p&gt;错误处理：指的是系统（或者用户）在对某些代码进行执行的时候，发现有错误，就会通过错误处理的形式告知程序员。&lt;/p&gt;
&lt;h4 id="错误分类"&gt;错误分类
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;语法错误&lt;/strong&gt;：编译不通过，代码不执行（Parse error）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;用户书写的代码不符合PHP的语法规范，语法错误会导致代码在编译过程中不通过，所以代码不会执行（Parse error）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;运行时错误&lt;/strong&gt;：编译通过，执行时条件不满足导致（如调用未定义函数）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;逻辑错误&lt;/strong&gt;：代码正常执行但结果不符合预期。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="错误代号系统常量"&gt;错误代号（系统常量）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;E_PARSE&lt;/code&gt;：编译错误。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E_ERROR&lt;/code&gt;：致命错误，代码不能继续执行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E_WARNING&lt;/code&gt;：警告，不影响执行但可能结果异常。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E_NOTICE&lt;/code&gt;：通知，不影响执行。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E_USER_ERROR&lt;/code&gt; / &lt;code&gt;E_USER_WARNING&lt;/code&gt; / &lt;code&gt;E_USER_NOTICE&lt;/code&gt;：用户自定义错误。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;E_ALL&lt;/code&gt;：所有错误。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="错误触发"&gt;错误触发
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;系统自动触发。系统自动根据错误发生后，对比对应的错误信息，输出给用户：主要针对代码的语法错误和运行时错误。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123194505244" class="gallery-image" data-flex-basis="1458px" data-flex-grow="607" height="129" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123194505244.png" width="784"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;人为触发：&lt;code&gt;trigger_error('错误信息'[, 错误类型])&lt;/code&gt;。知道某些逻辑可能会出错，从而使用对应的判断代码来触发响应的错误提示。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Trigger_error(错误提示);&lt;img alt="image-20220123195249237" class="gallery-image" data-flex-basis="887px" data-flex-grow="369" height="218" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123195249237.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123195249237_hu_aa6d8727081c0508.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123195249237.png 806w" width="806"&gt;&lt;/li&gt;
&lt;li&gt;可以通过第二个参数进行严格性控制。&lt;img alt="image-20220123195357201" class="gallery-image" data-flex-basis="609px" data-flex-grow="253" height="282" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123195357201.png" width="716"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="错误显示设置"&gt;错误显示设置
&lt;/h4&gt;&lt;p&gt;哪些错误该显示，以及该如何显示。在 PHP 中，其实有两种方式来设置当前脚本的错误处理。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在配置文件 &lt;code&gt;php.ini&lt;/code&gt; 中：&lt;code&gt;display_errors = On&lt;/code&gt;是否显示错误，&lt;code&gt;error_reporting = E_ALL&lt;/code&gt;显示什么级别的错误。&lt;/li&gt;
&lt;li&gt;在脚本中：在脚本中定义的配置项级别比配置文件高（通常在开发当中都会在代码中去进行控制和配置）。&lt;code&gt;ini_set('display_errors', 1); error_reporting(E_ALL);&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;error_reporting()：设置对应的错误显示级别。&lt;/li&gt;
&lt;li&gt;ini_set(&amp;ldquo;配置文件中的配置项“,配置值)。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="错误日志设置"&gt;错误日志设置
&lt;/h4&gt;&lt;p&gt;生产环境通常不显示错误，而是记录到日志文件。在 &lt;code&gt;php.ini&lt;/code&gt; 中设置 &lt;code&gt;log_errors = On&lt;/code&gt; 和 &lt;code&gt;error_log = 路径&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220123201440520" class="gallery-image" data-flex-basis="258px" data-flex-grow="107" height="256" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123201440520.png" width="276"&gt; &lt;img alt="image-20220123201720775" class="gallery-image" data-flex-basis="674px" data-flex-grow="280" height="241" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123201720775.png" width="677"&gt;&lt;/p&gt;
&lt;h4 id="自定义错误处理"&gt;自定义错误处理
&lt;/h4&gt;&lt;p&gt;最简单的错误处理：&lt;code&gt;trigger_errors()&lt;/code&gt;函数，但是该函数不会阻止系统报错。&lt;/p&gt;
&lt;p&gt;PHP系统提供了一种用户处理错误的机制：用户自定义错误处理函数，然后将该函数增加到系统错误处理的句柄中，然后系统会在碰到错误之后，使用用户定义的错误函数。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;set_error_handler('自定义函数')&lt;/code&gt; 接管系统错误处理。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123202333327" class="gallery-image" data-flex-basis="1652px" data-flex-grow="688" height="149" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123202333327.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123202333327_hu_2880f77273c41518.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123202333327.png 1026w" width="1026"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;自定义错误处理函数，系统有要求。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123202930563" class="gallery-image" data-flex-basis="400px" data-flex-grow="166" height="581" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123202930563.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123202930563_hu_80911eef34a2f516.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123202930563.png 970w" width="970"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;代码实现：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;自定义错误处理函数：注意参数&lt;/li&gt;
&lt;li&gt;注册自定义函数：修改错误处理机制&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="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="cl"&gt; &lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Content-type:text/html;charset=utf-8&amp;#34;&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="cl"&gt; &lt;span class="c1"&gt;//自定义函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;//$error,是系统提供的错误代码:E_ALL,E_NOTICE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;my_error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$errno&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$errstr&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$errfile&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$errline&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="cl"&gt; &lt;span class="c1"&gt;//判断：当前会碰到的错误有哪些.排除当前本身系统就要排除的错误
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;error_reporting&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="nv"&gt;$errno&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="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&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="cl"&gt; &lt;span class="c1"&gt;//error_reporting没有参数代表获取当前系统错误处理对应的级别
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt; &lt;span class="c1"&gt;//开始判断错误类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;switch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$errno&lt;/span&gt;&lt;span class="p"&gt;){&lt;/span&gt;&lt;span class="c1"&gt;//错误匹配
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;E_ERROR&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;E_USER_ERROR&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;fltal error in file &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errfile&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; on line&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errline&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;br /&amp;gt;&amp;#34;&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="cl"&gt; 		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;error info: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errstr&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="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;E_WARNING&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;E_USER_WARNING&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;warning in file &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errfile&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; on line&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errline&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;br /&amp;gt;&amp;#34;&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="cl"&gt; 		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;error info: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errstr&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="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;E_NOTICE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;E_USER_NOTICE&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;notice in file &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errfile&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; on line&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errline&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;lt;br /&amp;gt;&amp;#34;&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="cl"&gt; 		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;error info: &amp;#34;&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nv"&gt;$errstr&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="cl"&gt; &lt;span class="k"&gt;break&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="cl"&gt; 	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&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="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//报错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//未定义报错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//修改错误机制
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;set_error_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my_error&amp;#34;&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="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="c1"&gt;//报自定义的错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220123205621601" class="gallery-image" data-flex-basis="1147px" data-flex-grow="477" height="340" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123205621601.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123205621601_hu_1cd04e699662bfb6.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123205621601_hu_a85206775b079615.png 1600w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123205621601.png 1625w" width="1625"&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;当前属于简单自定义模式，如果要复杂，可以在某些影响代码功能的错误发生后，让用户跳转到某个指定界面。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="字符串"&gt;字符串
&lt;/h3&gt;&lt;h4 id="字符串定义语法"&gt;字符串定义语法
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;单引号&lt;/strong&gt;：&lt;code&gt;$str = 'content';&lt;/code&gt; 不解析变量和转义（除 &lt;code&gt;\'&lt;/code&gt; 和 &lt;code&gt;\\&lt;/code&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;双引号&lt;/strong&gt;：&lt;code&gt;$str = &amp;quot;content&amp;quot;;&lt;/code&gt; 解析变量和转义（&lt;code&gt;\n&lt;/code&gt;、&lt;code&gt;\r&lt;/code&gt;、&lt;code&gt;\t&lt;/code&gt;、&lt;code&gt;\$&lt;/code&gt; 等）。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; $name = &amp;#39;Tom&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#34;Hello $name&amp;#34;; // Hello Tom
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; echo &amp;#39;Hello $name&amp;#39;; // Hello $name
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;img alt="image-20220123210328294" class="gallery-image" data-flex-basis="329px" data-flex-grow="137" height="239" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123210328294.png" width="328"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;比较适合定义那些比较短（不超过一行）或者没有结构要求的字符串。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Nowdoc&lt;/strong&gt;（无单引号的单引号字符串）：&lt;code&gt;$str = &amp;lt;&amp;lt;&amp;lt;'EOT' ... EOT;&lt;/code&gt;，不解析变量。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Heredoc&lt;/strong&gt;（无双引号的双引号字符串）：&lt;code&gt;$str = &amp;lt;&amp;lt;&amp;lt;EOT ... EOT;&lt;/code&gt;，解析变量。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123210620988" class="gallery-image" data-flex-basis="576px" data-flex-grow="240" height="230" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123210620988.png" width="552"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;适合有结构要求，或者内容超过一行。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;无引号字符串与有引号字符串的区别&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220123211103379" class="gallery-image" data-flex-basis="569px" data-flex-grow="237" height="261" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123211103379.png" width="619"&gt;&lt;/p&gt;
&lt;h4 id="字符串转义"&gt;字符串转义
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;常用转义符&lt;/strong&gt;：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\'&lt;/code&gt;：在单引号字符串中显示单引号。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\&amp;quot;&lt;/code&gt;：在双引号字符串中显示双引号。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\r&lt;/code&gt;：代表回车（理论上是回到当前行的首位置）。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\n&lt;/code&gt;：代表新一行。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\t&lt;/code&gt;：类似 tap 键，输出4个空格。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;\$&lt;/code&gt;：在PHP中使用$符号作为变量符号，因此需要特定识别。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;单引号和双引号的区别&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;单引号中能够识别\&amp;rsquo;，而双引号中就不能识别\&amp;rsquo;。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123213747979" class="gallery-image" data-flex-basis="1267px" data-flex-grow="527" height="268" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123213747979.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220123213747979_hu_b64b2b772c848a1c.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220123213747979.png 1415w" width="1415"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;双引号中因为能够识别$符号，所以双引号中可以解析变量，而单引号不可以。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123214008395" class="gallery-image" data-flex-basis="834px" data-flex-grow="347" height="122" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123214008395.png" width="424"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;双引号中变量识别的规则&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变量本身系统能够与后面的内容区分：应该保证变量的独立性，不要让系统难以区分。
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123214049607" class="gallery-image" data-flex-basis="1341px" data-flex-grow="558" height="129" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123214049607.png" width="721"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;使用变量专业标识符（区分），给变量加上一组大括号{};
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123214236432" class="gallery-image" data-flex-basis="1016px" data-flex-grow="423" height="170" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123214236432.png" width="720"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;双引号中解析变量的规则：为保证变量独立，可使用 &lt;code&gt;{$var}&lt;/code&gt; 或 &lt;code&gt;${var}&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;结构化定义字符串变量的规则&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;结构化定义字符串对应的边界符有条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;上边界符后面不能跟任何内容；&lt;/li&gt;
&lt;li&gt;下边界符必须顶格：最左边；&lt;/li&gt;
&lt;li&gt;下边界同样后面只能跟分号，不能跟任何内容；&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;结构化定义字符串的内部（边界符之间）的所有内容都是字符串本身。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220123215145582" class="gallery-image" data-flex-basis="977px" data-flex-grow="407" height="195" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220123215145582.png" width="794"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=""&gt;
&lt;/h4&gt;&lt;h4 id="字符串长度"&gt;字符串长度
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;strlen()&lt;/code&gt;：字节长度（中文在 UTF-8 下占 3 字节）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mb_strlen($str, 'utf-8')&lt;/code&gt;：多字节字符串长度，需开启 &lt;code&gt;mbstring&lt;/code&gt; 扩展。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="常用字符串函数"&gt;常用字符串函数
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;转换&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;implode()&lt;/code&gt;（数组→字符串），将数组中的元素按照某个规则连接成一个字符串。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;explode()&lt;/code&gt;（字符串→数组）,将字符串按照某个格式进行分割，变成数组。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;中国|北京|顺义 == array(&amp;ldquo;中国，北京&amp;quot;顺义);&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;str_split()&lt;/code&gt;。按照指定长度拆分字符串得到数组。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;截取&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;trim(字符串[,指定字符])&lt;/code&gt;（去两边空格或指定字符）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ltrim()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rtrim()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;子串&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;substr(字符串,起始位置从 0 开始[长度])&lt;/code&gt;，指定位置开始截取字符串，可以截取指定长度（不指定到最后）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strstr(字符串,匹配字符)&lt;/code&gt;，从指定位置开始，截取到最后（可以用来去文件后缀名）。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;大小写&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;strtolower()&lt;/code&gt;，全部小写。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strtoupper()&lt;/code&gt;，全部大写。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ucfirst()&lt;/code&gt;，首字母大写。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;查找&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;strpos()&lt;/code&gt;，判断字符在目标字符串中出现的位置（首次）。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;strrpos()&lt;/code&gt;，判断字符在目标字符串中最后出现的位置。&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt; &lt;span class="nv"&gt;$str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;12a4a67a&amp;#34;&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="cl"&gt; &lt;span class="c1"&gt;//查找位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;strpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到 2，从0开始
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;strrpos&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到 7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;替换&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;str_replace(匹配目标,替换的内容,字符串本身)&lt;/code&gt;，将目标字符串中部分字符串进行替换。&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt; &lt;span class="nv"&gt;$str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;abacd&amp;#34;&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="cl"&gt; &lt;span class="c1"&gt;//字符串替换
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;a&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;b&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到 bbbcd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;格式化&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;printf()&lt;/code&gt;，&lt;/li&gt;
&lt;li&gt;&lt;code&gt;sprintf()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt; &lt;span class="nv"&gt;$age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&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="cl"&gt; &lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tom&amp;#34;&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="cl"&gt; &lt;span class="c1"&gt;//格式化输出
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;printf&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;我叫%s,我%d岁了&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$age&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="cl"&gt; &lt;span class="c1"&gt;//得到 我叫tom,我10岁了
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;重复/打乱&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;str_repeat()&lt;/code&gt;，重复某个字符串N次。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;str_shuffle()&lt;/code&gt;，随机打乱字符串。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt; &lt;span class="nv"&gt;$str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;abcd&amp;#34;&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;str_repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$str&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到 abcdabcd
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nx"&gt;str_shuffle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$str&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="c1"&gt;//得到一个打乱了的字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="数组"&gt;数组
&lt;/h3&gt;&lt;h4 id="数组的概念"&gt;数组的概念
&lt;/h4&gt;&lt;p&gt;数组（array）是将一组数据存储到一个容器中，通过变量指向容器，从而一次性获取所有数据。&lt;/p&gt;
&lt;h4 id="数组定义语法"&gt;数组定义语法
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;array()&lt;/code&gt; 关键字：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;元素1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;元素2&lt;/span&gt;&lt;span class="p"&gt;,&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220124202727304" class="gallery-image" data-flex-basis="705px" data-flex-grow="293" height="382" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124202727304.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124202727304_hu_25f71fd47280a2b5.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124202727304.png 1123w" width="1123"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用中括号 &lt;code&gt;[]&lt;/code&gt;（PHP 5.4+）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;元素1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;元素2&lt;/span&gt;&lt;span class="p"&gt;,&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;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220124202820101" class="gallery-image" data-flex-basis="746px" data-flex-grow="310" height="164" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124202820101.png" width="510"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;隐式定义：给变量加上中括号，系统自动转为数组。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;值1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//如果不提供下标也可以，系统自动生成（数字：从 0 开始）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;下标&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;值2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;//该下标可以是字母（单词）或者数字，与变量命名的规则相似。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="image-20220124202947455" class="gallery-image" data-flex-basis="718px" data-flex-grow="299" height="401" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124202947455.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124202947455_hu_c39fcf582c5fa05a.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124202947455.png 1201w" width="1201"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="php-数组特点"&gt;PHP 数组特点
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;下标可以是整数或字符串，可混合（索引数组/关联数组/混合数组）。&lt;/li&gt;
&lt;li&gt;元素顺序以放入顺序为准，与下标无关。&lt;/li&gt;
&lt;li&gt;数字下标自动增长，从 0 开始，若手动指定较大下标，后续自动增长从最大值+1 开始。&lt;/li&gt;
&lt;li&gt;特殊值下标自动转换：&lt;code&gt;true&lt;/code&gt;→1，&lt;code&gt;false&lt;/code&gt;→0，&lt;code&gt;NULL&lt;/code&gt;→空字符串。&lt;/li&gt;
&lt;li&gt;元素无类型限制，无长度限制。&lt;/li&gt;
&lt;li&gt;数组存储在堆区，分配连续内存。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="多维数组"&gt;多维数组
&lt;/h4&gt;&lt;p&gt;数组中元素又是数组，支持任意维度（不建议超过三维）。二维数组示例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&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="cl"&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Tom&amp;#39;&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="cl"&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Jim&amp;#39;&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="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Jim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="数组遍历"&gt;数组遍历
&lt;/h4&gt;&lt;p&gt;普通数组数据的访问都是通过数组元素的下标来实现访问，如果说数组中所有的数据都需要依次输出出来，就需要我们使用到一些简化的规则来实现自动获取下标以及输出数组元素。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="c1"&gt;//二维数组
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&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="cl"&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Tom&amp;#39;&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="cl"&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Jim&amp;#39;&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="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//访问一维元素：$arr[一维下标]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;&lt;span class="c1"&gt;//结果：array(&amp;#39;name&amp;#39; =&amp;gt; &amp;#39;Tom&amp;#39;);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//访问二维元素：$arr[一维下标][二维下标]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;//得到 Jim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;foreach 遍历&lt;/strong&gt;： foreach($数组变量 as [$下标 =&amp;gt;] $值）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$value&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="cl"&gt; &lt;span class="c1"&gt;// $key 为下标，$value 为值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;foreach 会重置数组指针。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;for 循环遍历&lt;/strong&gt;（要求数字索引连续）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&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="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$len&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nv"&gt;$len&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&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="cl"&gt; &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$arr&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$i&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="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;while + each + list 遍历&lt;/strong&gt;：&lt;br&gt;
&lt;code&gt;each()&lt;/code&gt; 返回当前指针位置的键值对数组（四个元素：0,1,key,value），指针下移。&lt;br&gt;
&lt;code&gt;list()&lt;/code&gt; 将数组元素赋值给变量。&lt;br&gt;
组合使用可实现遍历。&lt;/p&gt;
&lt;p&gt;Each函数使用：each 能够从一个数组中获取当前数组指针所指向的元素的下标和值，拿到之后将数组指针下移，同时将拿到的元素下标和值以一个四个元素的数组返回：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;0 下标 &amp;ndash;&amp;gt; 取得元素的下标值&lt;/li&gt;
&lt;li&gt;1 下标 &amp;ndash;&amp;gt; 取得元素的值&lt;/li&gt;
&lt;li&gt;Key 下标 &amp;ndash;&amp;gt; 取得元素的下标值&lt;/li&gt;
&lt;li&gt;Value 下标 &amp;ndash;&amp;gt; 取得元素的值&lt;/li&gt;
&lt;li&gt;&lt;img alt="image-20220124215827551" class="gallery-image" data-flex-basis="405px" data-flex-grow="168" height="607" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124215827551.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124215827551_hu_2574c995979407bc.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124215827551.png 1025w" width="1025"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果 each 取不到结果（数组指针移动到最后），返回 false&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220124220348510" class="gallery-image" data-flex-basis="368px" data-flex-grow="153" height="714" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124220348510.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124220348510_hu_4a4547eb6618dbe5.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124220348510.png 1097w" width="1097"&gt;&lt;/p&gt;
&lt;p&gt;List 函数使用：list 是一种结构，不是一种函数（没有返回值），是 list 提供一堆变量去从一个数组中取得元素值，然后依次存放到对应的变量当中（批量为变量赋值：值来源于数组）：&lt;/p&gt;
&lt;p&gt;list 必须从索引数组中去获取数据，而且必须从 0 开始。&lt;/p&gt;
&lt;p&gt;正确：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220124221446529" class="gallery-image" data-flex-basis="684px" data-flex-grow="285" height="266" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124221446529.png" width="759"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;错误：变量多于数组元素，没有指定从 0 到指定变量的下标的数组元素。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220124221930386" class="gallery-image" data-flex-basis="1289px" data-flex-grow="537" height="259" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124221930386.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124221930386_hu_a9499e846230821a.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124221930386.png 1392w" width="1392"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以 List 与 each 可以配合：each 一定有两个元素就是 0 和 1 下标元素。&lt;/p&gt;
&lt;p&gt;List[变量 1,变量 2)= each(数组);
//是一种赋值运算，但是可以得到 false 结果（each 取不到正确的结果），整个表达式为 false&lt;/p&gt;
&lt;p&gt;&lt;img alt="image-20220124222415409" class="gallery-image" data-flex-basis="818px" data-flex-grow="340" height="367" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220124222415409.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220124222415409_hu_d3a25a2d4cff7efc.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220124222415409.png 1251w" width="1251"&gt;&lt;/p&gt;
&lt;h4 id="数组相关函数"&gt;数组相关函数
&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;排序函数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sort()&lt;/code&gt; / &lt;code&gt;rsort()&lt;/code&gt;：顺序/逆序，下标重排。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126151805161" class="gallery-image" data-flex-basis="514px" data-flex-grow="214" height="187" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126151805161.png" width="401"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;asort()&lt;/code&gt; / &lt;code&gt;arsort()&lt;/code&gt;：顺序/逆序，保留下标。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126151916972" class="gallery-image" data-flex-basis="482px" data-flex-grow="201" height="193" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126151916972.png" width="388"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ksort()&lt;/code&gt; / &lt;code&gt;krsort()&lt;/code&gt;：按键名排序。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126152034820" class="gallery-image" data-flex-basis="436px" data-flex-grow="181" height="204" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126152034820.png" width="371"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;shuffle()&lt;/code&gt;：随机打乱。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;指针函数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;reset()&lt;/code&gt; / &lt;code&gt;end()&lt;/code&gt;：重置到首位/末位。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126153216584" class="gallery-image" data-flex-basis="583px" data-flex-grow="243" height="209" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126153216584.png" width="508"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;next()&lt;/code&gt; / &lt;code&gt;prev()&lt;/code&gt;：下移/上移。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126153157775" class="gallery-image" data-flex-basis="663px" data-flex-grow="276" height="315" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126153157775.png" srcset="/p/php-%E5%9F%BA%E7%A1%80/image-20220126153157775_hu_fd787c66fb48c01.png 800w, /p/php-%E5%9F%BA%E7%A1%80/image-20220126153157775.png 871w" width="871"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;current()&lt;/code&gt; / &lt;code&gt;key()&lt;/code&gt;：获取当前值/下标。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;img alt="image-20220126153014420" class="gallery-image" data-flex-basis="868px" data-flex-grow="361" height="115" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/php-%E5%9F%BA%E7%A1%80/image-20220126153014420.png" width="416"&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;注意事项：next 和 prev 会移动指针，有可能导致指针移动到最前或者最后（离开数组），导致数组不能使用，通过 next 和 prev 不能回到正确的指针位置。只能通过 end 或者 reset 进行指针重置。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;其他函数&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;count()&lt;/code&gt;：元素个数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;array_push()&lt;/code&gt; / &lt;code&gt;array_pop()&lt;/code&gt;：尾部添加/删除。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;array_shift()&lt;/code&gt; / &lt;code&gt;array_unshift()&lt;/code&gt;：头部删除/添加。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;array_reverse()&lt;/code&gt;：反转。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;in_array()&lt;/code&gt;：判断值是否存在。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;array_keys()&lt;/code&gt; / &lt;code&gt;array_values()&lt;/code&gt;：获取所有键/所有值。&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python 小知识</title><link>/p/python-%E5%B0%8F%E7%9F%A5%E8%AF%86/</link><pubDate>Wed, 31 Aug 2022 00:00:00 +0000</pubDate><guid>/p/python-%E5%B0%8F%E7%9F%A5%E8%AF%86/</guid><description>&lt;h2 id="1-python-程序的扩展名与提示符"&gt;1. Python 程序的扩展名与提示符
&lt;/h2&gt;&lt;h3 id="扩展名"&gt;扩展名
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;扩展名：.py , .pyc , .pyo , .pyd 。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;.py 是源文件，.pyc 是源文件编译后的文件，.pyo 是源文件优化编译后的文件，.pyd 是其他语言写的 Python 库。
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;知道 .py 和 .pyc 应该就够了。
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="提示符"&gt;提示符
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;gt;&amp;gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;请记住三个 &lt;code&gt;&amp;gt;&lt;/code&gt; 号。&lt;/p&gt;
&lt;h2 id="2-关于-python-在变量声明创建释放等内存管理与其他语言的差别"&gt;2. 关于 Python 在变量声明、创建、释放等内存管理与其他语言的差别
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;变量声明与创建&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;变量无需事先声明&lt;/li&gt;
&lt;li&gt;变量无需指定类型&lt;/li&gt;
&lt;li&gt;程序员不用关心内存管理&lt;/li&gt;
&lt;li&gt;变量名会被“回收”&lt;/li&gt;
&lt;li&gt;&lt;code&gt;del&lt;/code&gt; 语句能够直接释放资源&lt;/li&gt;
&lt;li&gt;大多数编译型语言，变量在使用前必须先声明，但在 Python 中变量在第一次被赋值时自动声明。和其他大多数语言一样，变量只有被创建和赋值后才能被使用。&lt;/li&gt;
&lt;li&gt;变量一旦被赋值，就可以通过变量名来访问。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;内存管理（不确定）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在 Python 中，一个对象一旦被创建，它在内存中的大小就是不变的。&lt;/li&gt;
&lt;li&gt;引用计数 + 垃圾回收机制。&lt;/li&gt;
&lt;li&gt;参考：&lt;a class="link" href="https://blog.csdn.net/qq_52077701/article/details/124101021" target="_blank" rel="noopener"
 &gt;Python 内存管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.csdn.net/weixin_34098209/article/details/113388489" target="_blank" rel="noopener"
 &gt;Java 和 Python 内存管理机制区别&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-python-语言命名规则"&gt;3. Python 语言命名规则
&lt;/h2&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;模块（软件包名）&lt;/strong&gt;&lt;br&gt;
模块尽量使用小写命名，首字母保持小写，尽量不要用下划线（除非多个单词且数量不多的情况）。&lt;br&gt;
例如：&lt;code&gt;import thisname&lt;/code&gt;、&lt;code&gt;import this_name&lt;/code&gt;&lt;br&gt;
不规范：&lt;code&gt;import Thisname&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;类名&lt;/strong&gt;&lt;br&gt;
类名使用驼峰（CamelCase）命名风格，首字母大写，私有类用一个下划线开头。&lt;br&gt;
例如：&lt;code&gt;class Add():&lt;/code&gt;、&lt;code&gt;class AddNum():&lt;/code&gt;、&lt;code&gt;class _Private():&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;函数&lt;/strong&gt;&lt;br&gt;
函数名一律小写，如有多个单词，用下划线隔开。&lt;br&gt;
例如：&lt;code&gt;def run():&lt;/code&gt;、&lt;code&gt;def add_num():&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;变量名&lt;/strong&gt;&lt;br&gt;
变量名尽量小写，如有多个单词，用下划线隔开。不能使用关键字（Python 本身已经使用的字）或保留字。&lt;br&gt;
例如：&lt;code&gt;number = 1&lt;/code&gt;、&lt;code&gt;school_name = &amp;quot;px&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;常量&lt;/strong&gt;&lt;br&gt;
常量使用以下划线分隔的大写命名。&lt;br&gt;
例如：&lt;code&gt;MAX_NUM = 100&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="4-python-的多行注释方式"&gt;4. Python 的多行注释方式
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 三个单引号 或 三个双引号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;这是多行注释
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;这也是多行注释
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="5-浮点数的科学计数法表示"&gt;5. 浮点数的科学计数法表示
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;使用字母 &lt;code&gt;e&lt;/code&gt; 或 &lt;code&gt;E&lt;/code&gt; 作为幂的符号，以 10 为基数。&lt;br&gt;
例如：&lt;code&gt;4.3e-3&lt;/code&gt; 即 4.3*10^{-3}，值为 0.0043；&lt;code&gt;9.6E3&lt;/code&gt; 即 9600。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="6-pow-函数"&gt;6. &lt;code&gt;pow()&lt;/code&gt; 函数
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;pow&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 返回 x 的 y 次方&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;示例：&lt;br&gt;
&lt;code&gt;pow(3, 2)&lt;/code&gt; → 9&lt;br&gt;
&lt;code&gt;pow(10, 3)&lt;/code&gt; → 1000&lt;/p&gt;
&lt;h2 id="7-round-函数"&gt;7. &lt;code&gt;round()&lt;/code&gt; 函数
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 返回浮点数 x 的四舍五入值，y 为要保留的小数位数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;示例：&lt;br&gt;
&lt;code&gt;round(30.12345)&lt;/code&gt; → 30&lt;br&gt;
&lt;code&gt;round(-100.123)&lt;/code&gt; → -100&lt;br&gt;
&lt;code&gt;round(60.12345, 2)&lt;/code&gt; → 60.12&lt;br&gt;
&lt;code&gt;round(100.0002, 3)&lt;/code&gt; → 100.0&lt;/p&gt;
&lt;h2 id="8-字符串切片操作如-s3-3"&gt;8. 字符串切片操作（如 &lt;code&gt;s[3:-3]&lt;/code&gt;）
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;hello the world&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="c1"&gt;# 取 str 中从 x 开始到 y 的字符，x 从 0 开始，y 为负数时从末尾倒数（-1 表示最后一个字符）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;示例：&lt;br&gt;
&lt;code&gt;str[0:2]&lt;/code&gt; → &lt;code&gt;&amp;quot;he&amp;quot;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;str[:3]&lt;/code&gt; → &lt;code&gt;&amp;quot;hel&amp;quot;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;str[1:]&lt;/code&gt; → &lt;code&gt;&amp;quot;ello the world&amp;quot;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;str[0:-1]&lt;/code&gt; → &lt;code&gt;&amp;quot;hello the worl&amp;quot;&lt;/code&gt;
&lt;code&gt;str[:-6]&lt;/code&gt; → &lt;code&gt;&amp;quot;hello the&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;h2 id="9-python-代码块以缩进区分"&gt;9. Python 代码块以缩进区分
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add&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="cl"&gt; &lt;span class="c1"&gt;# 这是函数体内&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;pass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 这是函数体外&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="10-lambda-函数参数函数体和返回值"&gt;10. Lambda 函数：参数、函数体和返回值
&lt;/h2&gt;&lt;p&gt;当我们想要使用一个简单定义的、或者只需要调用一两次的函数时，取名比较麻烦，使用 &lt;strong&gt;&lt;code&gt;lambda&lt;/code&gt;&lt;/strong&gt; 匿名函数可以省去这一步骤。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# x 是传入的参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;lambda&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 相当于&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;a&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&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="cl"&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="11-print-格式化-格式化或-format-格式化两种方式"&gt;11. &lt;code&gt;print&lt;/code&gt; 格式化：&lt;code&gt;%&lt;/code&gt; 格式化或 &lt;code&gt;format&lt;/code&gt; 格式化两种方式
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://blog.csdn.net/weixin_68418329/article/details/124907430" target="_blank" rel="noopener"
 &gt;Python 格式化输出的三种方式&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="-格式化"&gt;&lt;code&gt;%&lt;/code&gt; 格式化
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;符号&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%c&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化字符及其 ASCII 码&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%s&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化字符串&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%d&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化整数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%o&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化八进制数（不能带小数点）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%x&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化十六进制数（不能带小数点）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%f&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;格式化浮点数，可控制小数点后位数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;%e&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;将数字转化成科学计数法形式&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;lucy&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my name is &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s2"&gt;, i am &lt;/span&gt;&lt;span class="si"&gt;%d&lt;/span&gt;&lt;span class="s2"&gt; years old&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="format-格式化"&gt;&lt;code&gt;format&lt;/code&gt; 格式化
&lt;/h3&gt;&lt;p&gt;模板：&lt;code&gt;print('xxx{}x{}x'.format(x,y))&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;{}&lt;/code&gt; 中常用方法：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;模板&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:a&amp;lt;3}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;用 &lt;code&gt;a&lt;/code&gt; 填充长度为 3，内容靠左（&lt;code&gt;&amp;lt;&lt;/code&gt; 左对齐，&lt;code&gt;^&lt;/code&gt; 居中，&lt;code&gt;&amp;gt;&lt;/code&gt; 右对齐）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:f}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;转换为浮点数（默认保留 6 位小数）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:.a}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;控制浮点数保留 &lt;code&gt;a&lt;/code&gt; 位小数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:+}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;显示正负号&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:e}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;科学计数法&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:%}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;转换为百分数&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{:b}&lt;/code&gt; &lt;code&gt;{:d}&lt;/code&gt; &lt;code&gt;{:o}&lt;/code&gt; &lt;code&gt;{:x}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;二进制、十进制、八进制、十六进制&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;lucy&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;age&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;my name is &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt;, i am &lt;/span&gt;&lt;span class="si"&gt;{}&lt;/span&gt;&lt;span class="s2"&gt; years old&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;age&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="12-ipoinput-processing-output模式包含哪些部分"&gt;12. IPO（Input Processing Output）模式包含哪些部分
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="http://www.360doc.com/content/20/0825/17/44186562_932155341.shtml" target="_blank" rel="noopener"
 &gt;Python 第二课：IPO 模式&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;I（Input，输入）&lt;/strong&gt;：程序的输入（文件输入、网络输入、用户手工输入、随机数据输入、程序内部参数输入等）。例如从键盘接收两个数 &lt;code&gt;a&lt;/code&gt; 和 &lt;code&gt;b&lt;/code&gt;，这个过程就是输入。由于 &lt;code&gt;input&lt;/code&gt; 一般接受字符串类型，所以需要使用 &lt;code&gt;eval&lt;/code&gt; 函数去掉字符串两边的引号，使其变为整数类型。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;P（Process，处理）&lt;/strong&gt;：算法，程序的主要逻辑。程序对输入进行处理产生结果，处理方法也叫算法。这是程序的灵魂。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;O（Output，输出）&lt;/strong&gt;：程序的输出（屏幕显示输出、文件输出、网络输出、操作系统内部变量输出等）。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="13-复数realimag-各代表哪部分"&gt;13. 复数：&lt;code&gt;real&lt;/code&gt;、&lt;code&gt;imag&lt;/code&gt; 各代表哪部分
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;复数由 &lt;strong&gt;实部（real）&lt;/strong&gt; 和 &lt;strong&gt;虚部（imag）&lt;/strong&gt; 构成，形式为 &lt;code&gt;x + yj&lt;/code&gt;，其中 &lt;code&gt;j&lt;/code&gt; 或 &lt;code&gt;J&lt;/code&gt; 表示虚部后缀。&lt;/li&gt;
&lt;li&gt;具体格式：&lt;code&gt;a + bj&lt;/code&gt;，&lt;code&gt;a&lt;/code&gt; 为实部（real），&lt;code&gt;b&lt;/code&gt; 为虚部（imag）。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="n"&gt;j&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# &amp;lt;class &amp;#39;complex&amp;#39;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# (5+7j)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a1&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;a2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# (-4+19j) &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 乘法计算过程：(3+2j)*(2+5j) = 6 +15j +4j -10 = -4 +19j&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="14-字符串比较规则"&gt;14. 字符串比较规则
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 字符串比较操作：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 运算符：&amp;gt;, &amp;gt;=, &amp;lt;, &amp;lt;=, ==, !=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 比较规则：首先比较两个字符串中的第一个字符，如果相等则继续比较下一个字符，直到不等时，其比较结果就是两个字符串的比较结果，后续字符不再比较。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 比较原理：比较字符的 ordinal value（原始值），内置函数 ord() 获取 ASCII 码，chr() 则相反。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;apple&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;app&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;apple&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;banana&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# False（&amp;#39;a&amp;#39; 的 ASCII 97 &amp;lt; &amp;#39;b&amp;#39; 的 98）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;ord&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 97 98&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;97&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;chr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;98&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# a b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="is-与--的区别"&gt;&lt;code&gt;is&lt;/code&gt; 与 &lt;code&gt;==&lt;/code&gt; 的区别
&lt;/h3&gt;&lt;p&gt;参考：&lt;a class="link" href="https://blog.csdn.net/V_pythons/article/details/125185217" target="_blank" rel="noopener"
 &gt;Python 中 is 和 == 的区别&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;==&lt;/code&gt; 比较的是 &lt;strong&gt;值（value）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;is&lt;/code&gt; 比较的是 &lt;strong&gt;内存地址（id）&lt;/strong&gt;。&lt;/li&gt;
&lt;li&gt;只有数值型和字符串型，且在通用对象池中的情况下，&lt;code&gt;a is b&lt;/code&gt; 才为 &lt;code&gt;True&lt;/code&gt;；否则对于 &lt;code&gt;int&lt;/code&gt;、&lt;code&gt;str&lt;/code&gt;、&lt;code&gt;tuple&lt;/code&gt;、&lt;code&gt;list&lt;/code&gt;、&lt;code&gt;dict&lt;/code&gt;、&lt;code&gt;set&lt;/code&gt; 等，&lt;code&gt;a is b&lt;/code&gt; 通常为 &lt;code&gt;False&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# False&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 不同地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;3&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;is&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# True&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="c1"&gt;# 相同地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="15-while-循环的使用"&gt;15. &lt;code&gt;while&lt;/code&gt; 循环的使用
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://blog.csdn.net/weixin_48728769/article/details/123708644" target="_blank" rel="noopener"
 &gt;Python 中 while 循环讲解【详细】&lt;/a&gt; 和 &lt;a class="link" href="https://blog.csdn.net/qdPython/article/details/124045455" target="_blank" rel="noopener"
 &gt;Python 教程：while 循环用法讲解&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;基本形式&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&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="cl"&gt; &lt;span class="n"&gt;执行语句&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;求和示例&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;100&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="cl"&gt; &lt;span class="nb"&gt;sum&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 5050（1 加到 100）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;while&lt;/code&gt; 与 &lt;code&gt;else&lt;/code&gt; 搭配&lt;/strong&gt;：当 &lt;code&gt;while&lt;/code&gt; 判断条件为 &lt;code&gt;False&lt;/code&gt; 时执行 &lt;code&gt;else&lt;/code&gt;。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;3&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;n&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="cl"&gt; &lt;span class="n"&gt;n&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;else&amp;#34;&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="cl"&gt;&lt;span class="c1"&gt;# 输出：0 1 2 else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="16-递归调用的终止条件"&gt;16. 递归调用的终止条件
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://zhuanlan.zhihu.com/p/357312132" target="_blank" rel="noopener"
 &gt;Python 之函数的递归调用 - 知乎&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;递归函数停止的条件一般定义在递归函数内部，在递归调用前进行条件判断，根据结果选择继续调用自身还是 &lt;code&gt;return&lt;/code&gt; 返回。常见停止条件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;判断递归次数是否达到某一限定值。&lt;/li&gt;
&lt;li&gt;判断运算结果是否达到某个范围等，根据设计目的选择。&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;附：Python 递归超过一定次数后会抛出异常（报错，终止）。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="17-文件的读写尤其是-csv-文件的读写"&gt;17. 文件的读写，尤其是 CSV 文件的读写
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://www.runoob.com/python/python-func-open.html" target="_blank" rel="noopener"
 &gt;Python open() 函数&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;普通文件读写&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方法一&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;D://123.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;w&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;123&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 方法二（推荐，自动关闭）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;D://123.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;w&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&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="cl"&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;123&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;CSV 文件&lt;/strong&gt;：CSV（Comma-Separated Values）是一种逗号分隔值格式的纯文本文件，用于存储数据。每条记录由换行符分隔，字段间用逗号或其他字符分隔。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;id,name,age
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0,张三,19
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;1,李四,20
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;img alt="CSV 示例" class="gallery-image" data-flex-basis="254px" data-flex-grow="105" height="717" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/python-%E5%B0%8F%E7%9F%A5%E8%AF%86/image-20220828112017382.png" width="759"&gt;&lt;/p&gt;
&lt;h2 id="18-request-请求失败的常用做法"&gt;18. Request 请求失败的常用做法
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;修改请求头中的 &lt;strong&gt;User-Agent&lt;/strong&gt;（客户端软件类型）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;默认请求头&lt;/strong&gt;（容易被识别为爬虫）：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GET / HTTP/1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host: www.qq.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User-Agent: python-requests/2.25.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept-Encoding: gzip, deflate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept: */*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection: close
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;修改 User-Agent 为浏览器标识&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;requests&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;http://www.qq.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;heads&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="cl"&gt; &lt;span class="s2"&gt;&amp;#34;User-Agent&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;&lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;heads&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;修改后的请求头：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;GET / HTTP/1.1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Host: www.qq.com
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;User-Agent: Mozilla/5.0 (...)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept-Encoding: gzip, deflate
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Accept: */*
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Connection: close
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="19-集合的操作-"&gt;19. 集合的操作：&lt;code&gt;|&lt;/code&gt;、&lt;code&gt;-&lt;/code&gt;、&lt;code&gt;&amp;amp;&lt;/code&gt;、&lt;code&gt;^&lt;/code&gt;
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;集合是无序且无索引的，用花括号 &lt;code&gt;{}&lt;/code&gt; 表示。&lt;/li&gt;
&lt;li&gt;集合一旦创建，不能更改元素，但可以添加或删除。&lt;/li&gt;
&lt;li&gt;集合中不允许有重复元素。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;abracadabra&amp;#39;&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="cl"&gt;&lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;alacazam&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# {&amp;#39;a&amp;#39;, &amp;#39;r&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;d&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# {&amp;#39;a&amp;#39;, &amp;#39;l&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;z&amp;#39;, &amp;#39;m&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 在 a 但不在 b 中：{&amp;#39;r&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;b&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 并集：{&amp;#39;a&amp;#39;, &amp;#39;c&amp;#39;, &amp;#39;r&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;m&amp;#39;, &amp;#39;z&amp;#39;, &amp;#39;l&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 交集：{&amp;#39;a&amp;#39;, &amp;#39;c&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;^&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 对称差集（不同时包含）：{&amp;#39;r&amp;#39;, &amp;#39;d&amp;#39;, &amp;#39;b&amp;#39;, &amp;#39;m&amp;#39;, &amp;#39;z&amp;#39;, &amp;#39;l&amp;#39;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="20-循环保留字break-与-continue-的差别和作用"&gt;20. 循环保留字：&lt;code&gt;break&lt;/code&gt; 与 &lt;code&gt;continue&lt;/code&gt; 的差别和作用
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;break&lt;/code&gt;&lt;/strong&gt;：跳出循环，执行循环之后的语句。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;continue&lt;/code&gt;&lt;/strong&gt;：终止本次循环，执行下一次循环。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="break-示例"&gt;&lt;code&gt;break&lt;/code&gt; 示例
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&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="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&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="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&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="cl"&gt; &lt;span class="k"&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;123&amp;#34;&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="cl"&gt;&lt;span class="c1"&gt;# 当 a == b 时，break 终止内层 for 循环，继续外层下一次迭代&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="continue-示例"&gt;&lt;code&gt;continue&lt;/code&gt; 示例
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&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="cl"&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nb"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;5&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="cl"&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="n"&gt;b&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&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="cl"&gt; &lt;span class="k"&gt;continue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;123&amp;#34;&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="cl"&gt;&lt;span class="c1"&gt;# 当 a == b 时，continue 跳过本次内层循环的后续代码，继续内层下一次迭代&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="21-伪随机数"&gt;21. 伪随机数
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;计算机生成的随机数都是伪随机数。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;random&lt;/code&gt; 模块提供随机数生成功能，可设置随机数种子 &lt;code&gt;seed()&lt;/code&gt; 保证每次运行结果一致。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;random&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;randomness&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="cl"&gt; &lt;span class="n"&gt;rum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rum&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;randomness&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# 每次运行结果可能不同&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;random_seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1&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="cl"&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;seed&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="cl"&gt; &lt;span class="n"&gt;rum&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;100&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;rum&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;random_seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;random_seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 31&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;random_seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 8（相同种子结果相同）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;random_seed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 31&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="22-python-根据命名空间寻找变量的过程"&gt;22. Python 根据命名空间寻找变量的过程
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;查找顺序&lt;/strong&gt;：局部命名空间 → 全局命名空间 → 内置命名空间&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;命名空间&lt;/strong&gt;：从名称（变量名）到对象的映射，大部分通过 Python 字典实现。不同命名空间中的同名标识符不会冲突。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;作用&lt;/strong&gt;：避免命名冲突。&lt;/li&gt;
&lt;li&gt;参考：&lt;a class="link" href="https://blog.csdn.net/sinat_38068807/article/details/85792274" target="_blank" rel="noopener"
 &gt;Python 命名空间的加载与查找顺序&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="23-字典的创建和使用"&gt;23. 字典的创建和使用
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://blog.csdn.net/weixin_65049289/article/details/125535881" target="_blank" rel="noopener"
 &gt;Python 字典（创建方式、常用操作方式）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;字典通过键值对 &lt;code&gt;key: value&lt;/code&gt; 存储数据：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;key&lt;/code&gt; 在同一个字典内不可重复&lt;/li&gt;
&lt;li&gt;&lt;code&gt;value&lt;/code&gt; 可以重复&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;创建方法&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 花括号手动创建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dic&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="cl"&gt; &lt;span class="s2"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;张三&amp;#34;&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="cl"&gt; &lt;span class="s2"&gt;&amp;#34;age&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;18&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="cl"&gt; &lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;123&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 dict() 函数创建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;value1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;key2&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;value2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;常用操作&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 获取 key 对应的 value，不存在则返回 None&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;备用&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="c1"&gt;# 不存在则返回 &amp;#34;备用&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# 返回所有 key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dic&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;values&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# 返回所有 value&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="24-用户输入函数"&gt;24. 用户输入函数
&lt;/h2&gt;&lt;p&gt;参考：&lt;a class="link" href="https://zhuanlan.zhihu.com/p/109922370" target="_blank" rel="noopener"
 &gt;Python 之 input() 函数 - 知乎&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;请输入: &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="25-爬取指定-html-标签下的内容"&gt;25. 爬取指定 HTML 标签下的内容
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;re&lt;/code&gt;&lt;/strong&gt;（正则表达式）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;bs4&lt;/code&gt;（BeautifulSoup4）&lt;/strong&gt;（老师讲的）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;xpath&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.csdn.net/fenglepeng/article/details/112765561" target="_blank" rel="noopener"
 &gt;Python 第三方模块之 beautifulsoup (bs4)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.bilibili.com/video/BV1ZT4y1d7JM" target="_blank" rel="noopener"
 &gt;Bilibili 爬虫教学 P28-P32&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Nessus 破解版插件下载</title><link>/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/</link><pubDate>Mon, 29 Aug 2022 00:00:00 +0000</pubDate><guid>/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/</guid><description>&lt;img src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/%E5%B0%81%E9%9D%A2.jpg" alt="Featured image of post Nessus 破解版插件下载" /&gt;&lt;h1 id="nessus-破解版插件下载--202201111911-nessus-plugin-pro"&gt;Nessus 破解版插件下载 | 202201111911 nessus plugin pro
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;来源于：&lt;a class="link" href="https://www.ddosi.org/nessus-plugin-pro-3/" target="_blank" rel="noopener"
 &gt;Nessus破解版插件下载&lt;/a&gt;（需要梯子）&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;本次更新插件版本为 &lt;strong&gt;all-2.0_202201111911.tar.gz&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;先说一下 Nessus 10.0.2 的破解方法，部分人说换到 Nessus 10.0.2 会出各种问题。&lt;/p&gt;
&lt;h2 id="nessus-1002-破解方法以-kali-linux-为例"&gt;Nessus 10.0.2 破解方法（以 Kali Linux 为例）
&lt;/h2&gt;&lt;h3 id="准备工作"&gt;准备工作
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;卸载旧版本 Nessus&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;apt remove nessus
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;重启 Kali Linux&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;reboot
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;删除残留文件&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm -rf /opt/nessus/var/nessus
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="-下载安装包"&gt;① 下载安装包
&lt;/h3&gt;&lt;p&gt;Nessus 安装包现已更新至 10.0.2 版本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Linux 安装包下载地址&lt;/strong&gt;：&lt;a class="link" href="https://yzzpan.com/#sharefile=7xWYy1kF_23874" target="_blank" rel="noopener"
 &gt;Nessus-10.0.2-debian6_amd64.deb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;也可以自己到官网下载适合自己系统的版本：&lt;a class="link" href="https://www.tenable.com/downloads/nessus?loginAttempted=true" target="_blank" rel="noopener"
 &gt;Tenable Nessus 下载页&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;可点击图片跳转原图链接&lt;br&gt;
&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2022/01/135956.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="下载页面截图" class="gallery-image" data-flex-basis="376px" data-flex-grow="156" height="1004" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/135956.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/135956_hu_11389799f337459.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/135956.webp 1574w" width="1574"&gt;&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h3 id="-安装方法"&gt;② 安装方法
&lt;/h3&gt;&lt;p&gt;使用如下命令进行安装：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;dpkg -i Nessus-10.0.2-debian6_amd64.deb
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2022/01/140138.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="安装示例1" class="gallery-image" data-flex-basis="384px" data-flex-grow="160" height="411" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/140138.webp" width="659"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/11/163635.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="修改时区示例" class="gallery-image" data-flex-basis="487px" data-flex-grow="203" height="358" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/163635.webp" width="727"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;（此处用的是 10.0.1 的图，本质是一样的）&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="-启动-nessus"&gt;③ 启动 Nessus
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start nessusd &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl --no-pager status nessusd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="-访问-nessus-并进行配置"&gt;④ 访问 Nessus 并进行配置
&lt;/h3&gt;&lt;h4 id="1-浏览器打开如下任意一个网址"&gt;[1] 浏览器打开如下任意一个网址：
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;https://127.0.0.1:8834/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://ddosi:8834/&lt;/code&gt;（将 &lt;code&gt;ddosi&lt;/code&gt; 替换成你的 Kali 主机名）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;https://localhost:8834/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/1-34.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="Nessus 初始化界面" class="gallery-image" data-flex-basis="507px" data-flex-grow="211" height="821" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/1-34.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/1-34_hu_6d8e799f044daf9.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/1-34_hu_15bd2493e8a982c.webp 1600w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/1-34.webp 1736w" width="1736"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="2-选择最后一个--managed-scanner"&gt;[2] 选择最后一个 —— &lt;strong&gt;Managed Scanner&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/2-34.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="选择 Managed Scanner" class="gallery-image" data-flex-basis="484px" data-flex-grow="202" height="636" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/2-34.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/2-34_hu_f9e80213f72d70a9.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/2-34.webp 1285w" width="1285"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="3-选择-tenablesc"&gt;[3] 选择 &lt;strong&gt;Tenable.sc&lt;/strong&gt;
&lt;/h4&gt;&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/3-30.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="选择 Tenable.sc" class="gallery-image" data-flex-basis="501px" data-flex-grow="208" height="674" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/3-30.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/3-30_hu_bb89c55f93e3c2e3.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/3-30.webp 1408w" width="1408"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id="4-设置-nessus-账号密码"&gt;[4] 设置 Nessus 账号密码
&lt;/h4&gt;&lt;p&gt;例如：&lt;br&gt;
用户名：&lt;code&gt;root&lt;/code&gt;&lt;br&gt;
密码：&lt;code&gt;www.ddosi.org&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/4-26.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="设置账号密码" class="gallery-image" data-flex-basis="469px" data-flex-grow="195" height="671" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/4-26.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/4-26_hu_397edcdec1ade3c1.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/4-26.webp 1313w" width="1313"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装完成后界面如下（尚未激活，只能看到设置按钮，无扫描按钮）：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/5-22.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="未激活界面" class="gallery-image" data-flex-basis="475px" data-flex-grow="198" height="661" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/5-22.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/5-22_hu_594b76c734e24efc.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/5-22.webp 1309w" width="1309"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;（此处使用的是 8.15 版本的图，本质是一样的）&lt;/em&gt;&lt;/p&gt;
&lt;h3 id="-更新插件"&gt;⑤ 更新插件
&lt;/h3&gt;&lt;h4 id="插件下载"&gt;插件下载
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;云中转网盘&lt;/strong&gt;：&lt;a class="link" href="https://yzzpan.com/#sharefile=fCSsVfsp_26946" target="_blank" rel="noopener"
 &gt;https://yzzpan.com/#sharefile=fCSsVfsp_26946&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;解压密码&lt;/strong&gt;：&lt;code&gt;www.ddosi.org&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

 &lt;blockquote&gt;
 &lt;p&gt;不会解压的请自行搜索往期文章。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h4 id="更新插件命令"&gt;更新插件命令
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/opt/nessus/sbin/nessuscli update all-2.0_202201111911.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;更新过程请耐心等待。&lt;/p&gt;
&lt;h3 id="-修改-plugin_feed_infoinc-文件"&gt;⑥ 修改 &lt;code&gt;plugin_feed_info.inc&lt;/code&gt; 文件
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;打开目录 &lt;code&gt;/opt/nessus/var/nessus/&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;找到文件 &lt;code&gt;plugin_feed_info.inc&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改 &lt;code&gt;plugin_feed_info.inc&lt;/code&gt; 为以下内容并保存：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PLUGIN_SET&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;202201111911&amp;#34;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PLUGIN_FEED&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;ProfessionalFeed (Direct)&amp;#34;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;PLUGIN_FEED_TRANSPORT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;&amp;#34;Tenable Network Security Lightning&amp;#34;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;复制已修改过的 &lt;code&gt;plugin_feed_info.inc&lt;/code&gt; 文件到 &lt;code&gt;/opt/nessus/var/nessus/plugins/&lt;/code&gt; 目录下&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果没有 &lt;code&gt;plugins&lt;/code&gt; 目录，则手动创建一个。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2021/10/10-12.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="复制文件示例" class="gallery-image" data-flex-basis="782px" data-flex-grow="326" height="431" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/10-12.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/10-12_hu_572e1f5a676c133f.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/10-12.webp 1406w" width="1406"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="-重启-nessus"&gt;⑦ 重启 Nessus
&lt;/h3&gt;&lt;p&gt;先停止服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/systemctl stop nessusd.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;再启动服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/bin/systemctl start nessusd.service
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;打开 Nessus 网页，等待配置完成。&lt;/p&gt;
&lt;p&gt;至此破解完成。&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2022/01/143753.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="破解成功界面" class="gallery-image" data-flex-basis="618px" data-flex-grow="257" height="593" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143753.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143753_hu_f8fe3e9f315a11a6.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143753.webp 1528w" width="1528"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="插件数量总数变化"&gt;插件数量总数变化
&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;AIX Local Security Checks 	11140
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Amazon Linux Local Security Checks 	2082
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Backdoors 	121
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Brute force attacks 	26
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CentOS Local Security Checks 	3942
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CGI abuses 	4607
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CGI abuses : XSS 	690
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;CISCO 	2025
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Databases 	772
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Debian Local Security Checks 	7829
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Default Unix Accounts 	171
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Denial of Service 	110
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;DNS 	210
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;F5 Networks Local Security Checks 	1086
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Fedora Local Security Checks 	16421
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Firewalls 	314
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FreeBSD Local Security Checks 	4865
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;FTP 	259
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gain a shell remotely 	282
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;General 	315
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Gentoo Local Security Checks 	3157
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HP-UX Local Security Checks 	1983
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Huawei Local Security Checks 	6108
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Junos Local Security Checks 	433
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;MacOS X Local Security Checks 	1830
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Mandriva Local Security Checks 	3641
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Misc. 	2526
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Netware 	14
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;NewStart CGSL Local Security Checks 	1099
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Oracle Linux Local Security Checks 	4302
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;OracleVM Local Security Checks 	571
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Palo Alto Local Security Checks 	150
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Peer-To-Peer File Sharing 	102
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;PhotonOS Local Security Checks 	1895
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Policy Compliance 	60
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Red Hat Local Security Checks 	8416
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;RPC 	39
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SCADA 	361
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Scientific Linux Local Security Checks 	3191
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Service detection 	529
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Settings 	112
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Slackware Local Security Checks 	1259
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SMTP problems 	150
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SNMP 	33
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Solaris Local Security Checks 	3760
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;SuSE Local Security Checks 	18505
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Ubuntu Local Security Checks 	5769
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Virtuozzo Local Security Checks 	341
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;VMware ESX Local Security Checks 	141
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Web Servers 	1445
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windows 	5363
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windows : Microsoft Bulletins 	2442
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Windows : User management 	29
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="测试截图"&gt;测试截图
&lt;/h2&gt;&lt;p&gt;可正常使用扫描漏洞：&lt;/p&gt;
&lt;p&gt;&lt;a class="link" href="https://www.ddosi.org/wp-content/uploads/2022/01/143935.webp" target="_blank" rel="noopener"
 &gt;&lt;img alt="扫描测试" class="gallery-image" data-flex-basis="521px" data-flex-grow="217" height="690" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143935.webp" srcset="/p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143935_hu_55e68da5131e81aa.webp 800w, /p/nessus-%E7%A0%B4%E8%A7%A3%E7%89%88%E6%8F%92%E4%BB%B6%E4%B8%8B%E8%BD%BD/143935.webp 1498w" width="1498"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="注意事项"&gt;注意事项
&lt;/h2&gt;

&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;提示&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;p&gt;每次重启后需要重新启动 Nessus 服务，使用如下命令即可：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo systemctl start nessusd &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; systemctl --no-pager status nessusd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;有任何其他问题，可留言或发邮件给我：&lt;a class="link" href="mailto:cpu@usa.com" &gt;cpu@usa.com&lt;/a&gt;&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;&lt;strong&gt;建议&lt;/strong&gt;：Nessus 在 Linux 中的扫描速度比在 Windows 中快很多，因此推荐使用 Linux 进行安装。&lt;br&gt;
Windows 用户可参考这篇文章：&lt;a class="link" href="https://www.ddosi.org/nessus/" target="_blank" rel="noopener"
 &gt;Nessus Pro 8.13.1 破解版 + 插件 + 激活方法&lt;/a&gt;&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;工具仅可作为有授权的渗透测试使用，切勿用于违法犯罪。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;插件以后会视情况更新。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;strong&gt;转载请注明出处及链接&lt;/strong&gt;&lt;br&gt;
&lt;a class="link" href="https://www.ddosi.org/tag/%e6%bc%8f%e6%b4%9e%e6%89%ab%e6%8f%8f%e5%99%a8/" target="_blank" rel="noopener"
 &gt;漏洞扫描器&lt;/a&gt; | &lt;a class="link" href="https://www.ddosi.org/tag/%e9%bb%91%e5%ae%a2%e5%b7%a5%e5%85%b7/" target="_blank" rel="noopener"
 &gt;黑客工具&lt;/a&gt; | &lt;a class="link" href="https://www.ddosi.org/tag/%e9%bb%91%e5%ae%a2%e8%bd%af%e4%bb%b6/" target="_blank" rel="noopener"
 &gt;黑客软件&lt;/a&gt;&lt;/p&gt;</description></item><item><title>Python 爬虫与正则表达式</title><link>/p/python-%E7%88%AC%E8%99%AB%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/</link><pubDate>Fri, 08 Jul 2022 00:00:00 +0000</pubDate><guid>/p/python-%E7%88%AC%E8%99%AB%E4%B8%8E%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/</guid><description>&lt;h1 id="python-爬虫与正则表达式"&gt;Python 爬虫与正则表达式
&lt;/h1&gt;&lt;h2 id="正则表达式基础"&gt;正则表达式基础
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.runoob.com/regexp/regexp-syntax.html" target="_blank" rel="noopener"
 &gt;正则表达式 – 语法 | 菜鸟教程&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="常用字符说明"&gt;常用字符说明
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;字符&lt;/th&gt;
					&lt;th style="text-align: left"&gt;描述&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;[ABC]&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配字符串中所有的 A、B、C 字母&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;[^ABC]&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配字符串中所有的&lt;strong&gt;非&lt;/strong&gt; A、B、C 字母&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;[A-Z]&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;表示一个区间，匹配所有大写字母；&lt;code&gt;[a-z]&lt;/code&gt; 表示所有小写字母&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;.&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配除换行符（&lt;code&gt;\n&lt;/code&gt;、&lt;code&gt;\r&lt;/code&gt;）之外的任何单个字符，等价于 &lt;code&gt;[^\n\r]&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;\s&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配任何空白字符（空格、制表符、换页符等）；&lt;code&gt;\S&lt;/code&gt; 匹配任何非空白字符&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;^&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配输入字符串的开始位置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;$&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配输入字符串的结尾位置&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;?&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配前面的子表达式零次或一次，或指明非贪婪限定符&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;*&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配前面的子表达式&lt;strong&gt;零次或多次&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;+&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配前面的子表达式&lt;strong&gt;一次或多次&lt;/strong&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;{n,m}&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;m 和 n 均为非负整数，且 n ≤ m。最少匹配 n 次，最多匹配 m 次。例如 &lt;code&gt;&amp;quot;o{1,3}&amp;quot;&lt;/code&gt; 将匹配 &lt;code&gt;&amp;quot;fooooood&amp;quot;&lt;/code&gt; 中的前三个 o。&lt;code&gt;&amp;quot;o{0,1}&amp;quot;&lt;/code&gt; 等价于 &lt;code&gt;&amp;quot;o?&amp;quot;&lt;/code&gt;。注意逗号和两数之间不能有空格&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;( )&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;标记一个子表达式的开始和结束位置，子表达式可以获取供以后使用（如 &lt;code&gt;(?P&amp;lt;函数名&amp;gt;匹配正则)&lt;/code&gt;）&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;strong&gt;贪婪与非贪婪模式&lt;/strong&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;在正则表达式中，&lt;code&gt;*&lt;/code&gt;、&lt;code&gt;+&lt;/code&gt;、&lt;code&gt;?&lt;/code&gt; 默认是贪婪的，会尽可能多地匹配内容。例如 &lt;code&gt;&amp;quot;&amp;lt;.*&amp;gt;&amp;quot;&lt;/code&gt; 中的 &lt;code&gt;*&lt;/code&gt; 会匹配到字符串最后的 &lt;code&gt;&amp;gt;&lt;/code&gt;。若要使用非贪婪模式，在限定符后加 &lt;code&gt;?&lt;/code&gt;，如 &lt;code&gt;&amp;quot;&amp;lt;.*?&amp;gt;&amp;quot;&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="python-正则表达式"&gt;Python 正则表达式
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://www.runoob.com/python/python-reg-expressions.html" target="_blank" rel="noopener"
 &gt;Python 正则表达式 | 菜鸟教程&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="常用函数"&gt;常用函数
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;re&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="k"&gt;match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&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="cl"&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&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="cl"&gt;&lt;span class="c1"&gt;# 匹配成功时返回一个匹配对象，否则返回 None。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 可以使用 group(num) 或 groups() 获取匹配表达式。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;re.match&lt;/code&gt; 与 &lt;code&gt;re.search&lt;/code&gt; 的区别&lt;/strong&gt;：&lt;br&gt;
&lt;code&gt;re.match&lt;/code&gt; 只匹配字符串的开始位置，如果开始位置不符合正则表达式，则匹配失败返回 &lt;code&gt;None&lt;/code&gt;；而 &lt;code&gt;re.search&lt;/code&gt; 匹配整个字符串，直到找到第一个匹配。&lt;/p&gt;
&lt;h4 id="参数说明"&gt;参数说明
&lt;/h4&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;参数&lt;/th&gt;
					&lt;th style="text-align: left"&gt;描述&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;pattern&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;匹配的正则表达式&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;要匹配的字符串&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;flags&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;标志位，用于控制匹配方式（如是否区分大小写、多行匹配等）&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4 id="flags-修饰符"&gt;flags 修饰符
&lt;/h4&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;修饰符&lt;/th&gt;
					&lt;th style="text-align: left"&gt;描述&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.I&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;使匹配对大小写不敏感&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.L&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;做本地化识别（locale-aware）匹配&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.M&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;多行匹配，影响 &lt;code&gt;^&lt;/code&gt; 和 &lt;code&gt;$&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.S&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;使 &lt;code&gt;.&lt;/code&gt; 匹配包括换行符在内的所有字符&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.U&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;根据 Unicode 字符集解析字符，影响 &lt;code&gt;\w&lt;/code&gt;、&lt;code&gt;\W&lt;/code&gt;、&lt;code&gt;\b&lt;/code&gt;、&lt;code&gt;\B&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;re.X&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;允许更灵活的格式，使正则表达式更易于理解&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="recompile-函数"&gt;&lt;code&gt;re.compile&lt;/code&gt; 函数
&lt;/h3&gt;&lt;p&gt;&lt;code&gt;compile&lt;/code&gt; 函数用于编译正则表达式，生成一个正则表达式（Pattern）对象，供 &lt;code&gt;match()&lt;/code&gt; 和 &lt;code&gt;search()&lt;/code&gt; 使用。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;[,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pattern&lt;/code&gt;：字符串形式的正则表达式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flags&lt;/code&gt;：可选，匹配模式（如忽略大小写、多行模式等）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="resub-函数"&gt;&lt;code&gt;re.sub&lt;/code&gt; 函数
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;re&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sub&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pattern&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;repl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;count&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;flags&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;pattern&lt;/code&gt;：正则中的模式字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;repl&lt;/code&gt;：替换的字符串，也可为一个函数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;string&lt;/code&gt;：要被查找替换的原始字符串&lt;/li&gt;
&lt;li&gt;&lt;code&gt;count&lt;/code&gt;：模式匹配后替换的最大次数，默认 0 表示替换所有匹配&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>Linux 下的 Hadoop 配置</title><link>/p/linux-%E4%B8%8B%E7%9A%84-hadoop-%E9%85%8D%E7%BD%AE/</link><pubDate>Mon, 09 May 2022 00:00:00 +0000</pubDate><guid>/p/linux-%E4%B8%8B%E7%9A%84-hadoop-%E9%85%8D%E7%BD%AE/</guid><description>&lt;img src="/p/linux-%E4%B8%8B%E7%9A%84-hadoop-%E9%85%8D%E7%BD%AE/%E5%B0%81%E9%9D%A2.jpg" alt="Featured image of post Linux 下的 Hadoop 配置" /&gt;&lt;h1 id="1-基本配置"&gt;1. 基本配置
&lt;/h1&gt;
 &lt;blockquote&gt;
 &lt;p&gt;一切操作都是基于 &lt;strong&gt;root&lt;/strong&gt; 用户下。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;h2 id="一需要下载的工具"&gt;一、需要下载的工具
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;net-tools&lt;/strong&gt;（获取 IP 的工具）&lt;br&gt;
&lt;code&gt;yum -y install net-tools&lt;/code&gt;（需要配置网络后）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;openssh-server&lt;/strong&gt;（免密登录所需）&lt;br&gt;
&lt;code&gt;yum -y install openssh-server&lt;/code&gt;（需要配置网络后）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;jdk&lt;/strong&gt;（Java 环境）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://www.oracle.com/java/technologies/downloads/" target="_blank" rel="noopener"
 &gt;Java Downloads | Oracle&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="http://bugmenot.com/view/oracle.com" target="_blank" rel="noopener"
 &gt;Oracle 账号密码（临时）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下载的包大致为 &lt;code&gt;jdk-8u333-linux-x64.tar.gz&lt;/code&gt;，具体版本根据自己的需求选择&lt;/li&gt;
&lt;li&gt;网上下载后解压&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;hadoop&lt;/strong&gt;（集群环境）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://hadoop.apache.org/releases.html" target="_blank" rel="noopener"
 &gt;Apache Hadoop Releases&lt;/a&gt; 下载 Binary download&lt;/li&gt;
&lt;li&gt;或 &lt;a class="link" href="https://dlcdn.apache.org/hadoop/common/" target="_blank" rel="noopener"
 &gt;Index of /hadoop/common&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;下载的包大致为 &lt;code&gt;hadoop-3.3.1.tar.gz&lt;/code&gt;，具体版本自选&lt;/li&gt;
&lt;li&gt;网上下载后解压&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="二需要更改的配置"&gt;二、需要更改的配置
&lt;/h2&gt;&lt;h3 id="连接网络"&gt;连接网络
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;如果是最小化安装，一开始没有 IP。&lt;br&gt;
&lt;code&gt;ip addr&lt;/code&gt;（查看网卡名称，如 &lt;code&gt;ens33&lt;/code&gt;）&lt;br&gt;
进入 &lt;code&gt;/etc/sysconfig/network-scripts/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;vi ifcfg-ens33&lt;/code&gt;（编辑你的网卡信息）&lt;br&gt;
将 &lt;code&gt;ONBOOT=no&lt;/code&gt; 改为 &lt;code&gt;ONBOOT=yes&lt;/code&gt;（启用网卡开机自启）&lt;br&gt;
&lt;code&gt;ifup ens33&lt;/code&gt;（因为之前网卡没自启，启用网卡）&lt;br&gt;
&lt;code&gt;systemctl restart network&lt;/code&gt;（重启网络，也可 &lt;code&gt;service network restart&lt;/code&gt;）&lt;br&gt;
尝试 ping 外网：&lt;code&gt;ping www.baidu.com&lt;/code&gt; 看是否成功。&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;虚拟机内 ping 不通的排查&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;ol&gt;
&lt;li&gt;&lt;code&gt;ping 127.0.0.1&lt;/code&gt; 不通 → 网卡问题&lt;/li&gt;
&lt;li&gt;检查网卡设置是否正确&lt;/li&gt;
&lt;li&gt;桥接网络静态 IP 可能有问题；NAT 模式检查主机的 VMware NAT Service / VMware DHCP Server 服务是否开启&lt;/li&gt;
&lt;li&gt;如果是复制的虚拟机，记得修改 MAC 地址：&lt;code&gt;ip addr&lt;/code&gt; 查看，先在虚拟机设置中刷新 MAC，再修改 &lt;code&gt;HWADDR=&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UUID&lt;/code&gt; 是否要改？可用 &lt;code&gt;uuidgen ens33&lt;/code&gt; 生成新的 UUID。&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="关闭防火墙"&gt;关闭防火墙
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl stop firewalld &lt;span class="c1"&gt;# 关闭防火墙&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl disable firewalld &lt;span class="c1"&gt;# 禁用防火墙开机自启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 关闭 SELinux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/selinux/config &lt;span class="c1"&gt;# 将 SELINUX=enforcing 改为 SELINUX=disabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="免密登录"&gt;免密登录
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh localhost &lt;span class="c1"&gt;# 生成 .ssh 目录（记得退出）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-keygen -t rsa &lt;span class="c1"&gt;# 生成 RSA 公私钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ssh-copy-id hostname@ip &lt;span class="c1"&gt;# 将公钥发送给要免密登录的主机（包括自己 localhost）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="配置-java-环境变量"&gt;配置 JAVA 环境变量
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;（全部用户）在 &lt;code&gt;/etc/profile.d/&lt;/code&gt; 中创建一个 &lt;code&gt;.sh&lt;/code&gt; 文件（例如 &lt;code&gt;java_env.sh&lt;/code&gt;）。&lt;code&gt;/etc/profile&lt;/code&gt; 会自动遍历该目录下所有 &lt;code&gt;.sh&lt;/code&gt; 文件。&lt;/li&gt;
&lt;li&gt;（单个用户，推荐）在 &lt;code&gt;~/.bashrc&lt;/code&gt; 中添加环境变量。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# JAVA_HOME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/software/jdk1.8.0 &lt;span class="c1"&gt;# 你的 JDK 路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$JAVA_HOME&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;之后执行 &lt;code&gt;source java_env.sh&lt;/code&gt; 或 &lt;code&gt;source ~/.bashrc&lt;/code&gt;，再运行 &lt;code&gt;java -version&lt;/code&gt; 测试是否成功。&lt;/p&gt;
&lt;h3 id="配置-hadoop-环境变量"&gt;配置 hadoop 环境变量
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# HADOOP_HOME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HADOOP_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/opt/software/hadoop &lt;span class="c1"&gt;# 你的 Hadoop 路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;:&lt;span class="nv"&gt;$HADOOP_HOME&lt;/span&gt;/sbin
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;同样添加到 &lt;code&gt;hadoop_env.sh&lt;/code&gt; 或 &lt;code&gt;~/.bashrc&lt;/code&gt;，&lt;code&gt;source&lt;/code&gt; 后运行 &lt;code&gt;hadoop&lt;/code&gt; 查看是否有显示。&lt;/p&gt;
&lt;h2 id="三可选的配置更改"&gt;三、可选的配置更改
&lt;/h2&gt;&lt;h3 id="静态-ip"&gt;静态 IP
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/sysconfig/network-scripts/ifcfg-ens33 &lt;span class="c1"&gt;# 最后为你的网卡名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;修改内容：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-ini" data-lang="ini"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;BOOTPROTO&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;static # 改为 static&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;IPADDR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;192.168.37.101 # 你要的 IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;NETMASK&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;255.255.255.0 # 子网掩码，也可用 PREFIX=24&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;GATEWAY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;192.168.37.2 # 网关（VMware 虚拟网络编辑器 → VMnet8 查看）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="na"&gt;DNS1&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;192.168.37.2 # 与网关相同&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h3 id="yum-换源"&gt;yum 换源
&lt;/h3&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 备份默认源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 下载阿里云源（CentOS 7 示例）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 清除缓存并生成新缓存&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum clean all
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum makecache
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum update
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h1 id="2-hadoop-运行"&gt;2. Hadoop 运行
&lt;/h1&gt;&lt;h2 id="1-本地模式"&gt;1. 本地模式
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;单机运行，一般只演示官方案例。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;不配置文件&lt;/strong&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="2-伪分布模式"&gt;2. 伪分布模式
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;也是单机运行，但具备 Hadoop 集群的所有功能，一台机器模拟分布式环境。一般用于测试，实际项目中不用。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="需要"&gt;需要
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;SSH 免密登录&lt;/li&gt;
&lt;li&gt;修改配置文件 &lt;code&gt;core-site.xml&lt;/code&gt;、&lt;code&gt;hdfs-site.xml&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;NameNode 格式化&lt;/li&gt;
&lt;li&gt;明确启动用户，修改 &lt;code&gt;hadoop-env.sh&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;若包含 YARN，还需修改 &lt;code&gt;yarn-site.xml&lt;/code&gt;、&lt;code&gt;mapred-site.xml&lt;/code&gt; 和 &lt;code&gt;yarn-env.sh&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;注意&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;ul&gt;
&lt;li&gt;若运行实例出现 &lt;code&gt;code 143&lt;/code&gt;，可能为内存不足。&lt;/li&gt;
&lt;li&gt;一旦重新启动 YARN，之前运行过的程序运行情况将无法查看（输出结果还在）。配置历史服务器可保留，需修改 &lt;code&gt;mapred-site.xml&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id="配置文件"&gt;配置文件
&lt;/h3&gt;&lt;h4 id="core-sitexml"&gt;core-site.xml
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 指定 NameNode 的地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://master:8020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 指定 hadoop 数据的存储目录 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.tmp.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/opt/module/hadoop-3.1.3/data&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 配置 HDFS 网页登录使用的静态用户为 root --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.http.staticuser.user&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;root&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="hdfs-sitexml"&gt;hdfs-site.xml
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- NameNode web 端访问地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.http-address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:9870&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 文件数据副本数 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.replication&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="namenode-格式化"&gt;NameNode 格式化
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hdfs namenode -format
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 若不是第一次格式化，要先将 /.../hadoop/ 下的 data 和 logs 删除，再格式化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 别忘了先 stop-all.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="明确启动用户hdfs"&gt;明确启动用户（HDFS）
&lt;/h4&gt;&lt;p&gt;在 &lt;code&gt;hadoop-env.sh&lt;/code&gt; 末尾添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_NAMENODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_DATANODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_SECONDARYNAMENODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="yarn-sitexml"&gt;yarn-site.xml
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 指定 mapreduce 走 shuffle --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.aux-services&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;mapreduce_shuffle&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 指定 ResourceManager 的地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.resourcemanager.hostname&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 环境变量的继承 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.env-whitelist&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="mapred-sitexml包含历史服务器配置"&gt;mapred-site.xml（包含历史服务器配置）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 指定 MapReduce 程序运行在 Yarn 上 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.framework.name&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;yarn&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 历史服务器端地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:10020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 历史服务器 web 端地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.webapp.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:19888&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="启动历史服务器"&gt;启动历史服务器
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mapred --daemon start historyserver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="明确启动用户yarn"&gt;明确启动用户（YARN）
&lt;/h4&gt;&lt;p&gt;在 &lt;code&gt;yarn-env.sh&lt;/code&gt; 末尾添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;YARN_RESOURCEMANAGER_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;YARN_NODEMANAGER_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;hr&gt;
&lt;h2 id="3-完全分布模式"&gt;3. 完全分布模式
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;节点&lt;/th&gt;
					&lt;th&gt;HDFS 角色&lt;/th&gt;
					&lt;th&gt;YARN 角色&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;master&lt;/td&gt;
					&lt;td&gt;NameNode, DataNode&lt;/td&gt;
					&lt;td&gt;NodeManager&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;slave1&lt;/td&gt;
					&lt;td&gt;DataNode&lt;/td&gt;
					&lt;td&gt;ResourceManager, NodeManager&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;slave2&lt;/td&gt;
					&lt;td&gt;SecondaryNameNode, DataNode&lt;/td&gt;
					&lt;td&gt;NodeManager&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="需要-1"&gt;需要
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;修改主机名&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;配置 IP 映射&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;修改配置文件&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;core-site.xml&lt;/li&gt;
&lt;li&gt;hdfs-site.xml&lt;/li&gt;
&lt;li&gt;yarn-site.xml&lt;/li&gt;
&lt;li&gt;mapred-site.xml&lt;/li&gt;
&lt;li&gt;workers&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;指定进程用户&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;互相免密登录&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 rsync/scp 分发配置&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;启动集群（格式化 NameNode → 启动 HDFS → 启动 YARN → 启动历史服务器）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;启动集群效果&lt;/li&gt;
&lt;li&gt;master
&lt;ul&gt;
&lt;li&gt;jps&lt;/li&gt;
&lt;li&gt;NodeManager&lt;/li&gt;
&lt;li&gt;DataNode&lt;/li&gt;
&lt;li&gt;NameNode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;slave1
&lt;ul&gt;
&lt;li&gt;jps&lt;/li&gt;
&lt;li&gt;ResourceManager&lt;/li&gt;
&lt;li&gt;NodeManager&lt;/li&gt;
&lt;li&gt;DataNode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;slave2
&lt;ul&gt;
&lt;li&gt;jps&lt;/li&gt;
&lt;li&gt;SecondaryNameNode&lt;/li&gt;
&lt;li&gt;NodeManager&lt;/li&gt;
&lt;li&gt;DataNode&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Web 端
&lt;ul&gt;
&lt;li&gt;HDFS master 主机 IP:9870&lt;/li&gt;
&lt;li&gt;YARN slave1 主机 IP:8088&lt;/li&gt;
&lt;li&gt;历史服务 master 主机 IP:19888&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;时间同步（NTP）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="配置文件-1"&gt;配置文件
&lt;/h3&gt;&lt;h4 id="修改主机名"&gt;修改主机名
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/hostname
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 分别改为 master, slave1, slave2（方便区分即可）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="配置-ip-映射"&gt;配置 IP 映射
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /etc/hosts
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 需要在每台主机的 hosts 中添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 添加以下内容（IP 换成你的实际地址）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;192.168.37.101 master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;192.168.37.102 slave1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;192.168.37.103 slave2
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 重启使配置生效（reboot）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="修改配置文件"&gt;修改配置文件
&lt;/h4&gt;&lt;p&gt;若已配置伪分布，请删除 &lt;code&gt;/.../hadoop&lt;/code&gt; 下的 &lt;code&gt;data&lt;/code&gt;、&lt;code&gt;input&lt;/code&gt;、&lt;code&gt;logs&lt;/code&gt;、&lt;code&gt;output&lt;/code&gt; 或重新解压 Hadoop。&lt;/p&gt;
&lt;h5 id="core-sitexml-1"&gt;core-site.xml
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 指定 NameNode 的地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;fs.defaultFS&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;hdfs://master:8020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 指定 hadoop 数据的存储目录 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.tmp.dir&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;/.../hadoop/data&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 配置 HDFS 网页登录使用的静态用户为 root --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;hadoop.http.staticuser.user&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;root&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="hdfs-sitexml-1"&gt;hdfs-site.xml
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- NameNode web 端访问地址--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.http-address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:9870&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- SecondaryNameNode web 端访问地址--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.namenode.secondary.http-address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;slave2:9868&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 文件数据副本数 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;dfs.replication&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;3&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="yarn-sitexml-1"&gt;yarn-site.xml
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 指定 mapreduce 走 shuffle --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.aux-services&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;mapreduce_shuffle&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 指定 ResourceManager 的地址--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.resourcemanager.hostname&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;slave1&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 环境变量的继承 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.nodemanager.env-whitelist&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c"&gt;&amp;lt;!-- 开启日志聚集功能 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.log-aggregation-enable&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;true&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 设置日志聚集服务器地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.log.server.url&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;http://master:19888/jobhistory/logs&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 设置日志保留时间为 7 天 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;yarn.log-aggregation.retain-seconds&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;604800&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 与伪分布式相比添加了一个日志聚焦，程序运行完成时，都会产生日志，日志聚焦就是 把日志信息上传到 HDFS 文件系统上，方便查看程序运行详情，方便排错和开发调试。 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="mapred-sitexml"&gt;mapred-site.xml
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-xml" data-lang="xml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 指定 MapReduce 程序运行在 Yarn 上 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.framework.name&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;yarn&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 历史服务器端地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:10020&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- 历史服务器 web 端地址 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;name&amp;gt;&lt;/span&gt;mapreduce.jobhistory.webapp.address&lt;span class="nt"&gt;&amp;lt;/name&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;value&amp;gt;&lt;/span&gt;master:19888&lt;span class="nt"&gt;&amp;lt;/value&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;&amp;lt;/configuration&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="workers-文件"&gt;workers 文件
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;vi /.../hadoop/etc/hadoop/workers
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 注意：文件中每行末尾不能有空格，不允许有空行。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# localhost 可保留可以删除（建议删除）。添加下列主机名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slave1
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;slave2
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="指定进程用户"&gt;指定进程用户
&lt;/h5&gt;&lt;p&gt;在 &lt;code&gt;hadoop-env.sh&lt;/code&gt; 末尾添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_NAMENODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_DATANODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;HDFS_SECONDARYNAMENODE_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在 &lt;code&gt;yarn-env.sh&lt;/code&gt; 末尾添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;YARN_RESOURCEMANAGER_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;export&lt;/span&gt; &lt;span class="nv"&gt;YARN_NODEMANAGER_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;root
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="互相免密登录"&gt;互相免密登录
&lt;/h4&gt;&lt;p&gt;参考伪分布式部分，确保 master、slave1、slave2 之间均能免密 SSH 登录。&lt;/p&gt;
&lt;h4 id="远程同步配置使用-scp"&gt;远程同步配置（使用 scp）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 附：目前是在 root 环境下进行安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# scp -r(传输文件夹) 文件夹路径 用户@其他主机的ip:要传到的路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将已经修改好的配置文件传给其他主机，减少工作量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp -r /.../hadoop/etc/hadoop root@slave1:/.../hadoop/etc
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 传输环境配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;scp -r /etc/profile.d root@slave1:/etc/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="启动集群"&gt;启动集群
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# # 若 /.../hadoop 下有 date 和 logs 先删除（说明之前格式化过）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 格式化 NameNode（只在 master 执行一次）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;hdfs namenode -format
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动 HDFS（在 master 执行），具体根据配置文件来&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;start-dfs.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 在配置了 ResourceManager 的节点（slave1）上启动 Yarn&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 具体根据配置文件来&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 若碰到提示 known hosts 请检查 ssh 免密登录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;start-yarn.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 启动历史服务器（在 master 执行），具体根据配置文件来&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;mapred --daemon start historyserver
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="启动后进程检查jps"&gt;启动后进程检查（&lt;code&gt;jps&lt;/code&gt;）
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;master&lt;/strong&gt;：&lt;code&gt;NodeManager&lt;/code&gt;、&lt;code&gt;DataNode&lt;/code&gt;、&lt;code&gt;NameNode&lt;/code&gt;、&lt;code&gt;JobHistoryServer&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;slave1&lt;/strong&gt;：&lt;code&gt;ResourceManager&lt;/code&gt;、&lt;code&gt;NodeManager&lt;/code&gt;、&lt;code&gt;DataNode&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;slave2&lt;/strong&gt;：&lt;code&gt;SecondaryNameNode&lt;/code&gt;、&lt;code&gt;NodeManager&lt;/code&gt;、&lt;code&gt;DataNode&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="web-端访问地址"&gt;Web 端访问地址
&lt;/h4&gt;&lt;ul&gt;
&lt;li&gt;HDFS：&lt;code&gt;http://master:9870&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;YARN：&lt;code&gt;http://slave1:8088&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;历史服务器：&lt;code&gt;http://master:19888&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="时间同步ntp"&gt;时间同步（NTP）
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 所有节点安装 ntp&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;yum -y install ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 设置时间为亚洲上海&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;timedatectl set-timezone Asia/Shanghai
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;主节点（master）配置 &lt;code&gt;/etc/ntp.conf&lt;/code&gt;&lt;/strong&gt; 添加：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 添加以下内容
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 允许 192.168.37.x 这一网段，即与主机同一网段的机器同步该主机的时间
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;restrict 192.168.37.0 mask 255.255.255.0 nomodify notrap
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 该主机使用的时间服务器为阿里提供的公网 NTP 服务器(可不用)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server ntp1.aliyun.com iburst
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#如果集群是在一个封闭的局域网内，可以屏蔽掉默认的server:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#server 0.centos.pool.ntp.org iburst
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#server 1.centos.pool.ntp.org iburst
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#server 2.centos.pool.ntp.org iburst
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;#server 3.centos.pool.ntp.org iburst
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;启动主节点 NTP 服务：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl start ntpd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl &lt;span class="nb"&gt;enable&lt;/span&gt; ntpd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 查看 ntp 的状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl status ntpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;其他节点同步&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;方案一:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 其他从节点停止并禁用 ntp 服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl stop ntpd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;systemctl disable ntpd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 同步主节点时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ntpdate master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;方案二:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 将本地的硬件时间也作为同步的时间源之一&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;master&lt;span class="o"&gt;(&lt;/span&gt;主节点&lt;span class="o"&gt;)&lt;/span&gt;配置：server 127.127.1.0
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;master&lt;span class="o"&gt;(&lt;/span&gt;主节点&lt;span class="o"&gt;)&lt;/span&gt;配置：fudge 127.127.1.0 stratum &lt;span class="m"&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 删除或注释以下配置项&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#server 0.centos.pool.ntp.org iburst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#server 1.centos.pool.ntp.org iburst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#server 2.centos.pool.ntp.org iburst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#server 3.centos.pool.ntp.org iburst&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server master
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ntpdate master &lt;span class="c1"&gt;#同步时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;service ntpd start &lt;span class="c1"&gt;#启动 ntpd 时间服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="查看与时间同步服务器的时间偏差"&gt;查看与时间同步服务器的时间偏差
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ntpdc -c loopinfo
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# offset: 0.001014 s #时间偏差极小，即同步了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# frequency: 29.720 ppm&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# poll adjust: 30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# watchdog timer: 929 s&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 或&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ntpdate master &lt;span class="c1"&gt;# 同步时间时会显示时间偏差&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h5 id="设置定时任务可设置定时任务"&gt;设置定时任务可设置定时任务：
&lt;/h5&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 每天 00:00 同步一次(master 不行的话直接写 IP)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;00&lt;/span&gt; &lt;span class="m"&gt;00&lt;/span&gt; * * * /usr/sbin/ntpdate master
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;* * * * *
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;- - - - -
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| | | | |
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| | | | +----- 星期中星期几 (0 - 6) (星期天为0)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| | | +---------- 月份 (1 - 12) 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| | +--------------- 一个月中的第几天 (1 - 31)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;| +-------------------- 小时 (0 - 23)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;+------------------------- 分钟 (0 - 59)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="4-hadoop-常见问题汇总"&gt;4. Hadoop 常见问题汇总
&lt;/h2&gt;
 &lt;blockquote&gt;
 &lt;p&gt;原文档此处未展开，保留标题。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;hr&gt;
&lt;h1 id="3-hive-及数据可视化"&gt;3. Hive 及数据可视化
&lt;/h1&gt;&lt;h2 id="一需要的安装包"&gt;一、需要的安装包
&lt;/h2&gt;&lt;h3 id="docker-容器简化软件安装部署"&gt;Docker 容器（简化软件安装部署）
&lt;/h3&gt;&lt;p&gt;Docker 可以帮助开发人员快速构建轻量级和可移植的软件容器，简化应用程序开发、测试和部署等环节。它提供轻量级执行环境，共享操作系统内核但彼此独立运行。&lt;/p&gt;
&lt;h3 id="二不使用-docker-容器"&gt;二、不使用 Docker 容器
&lt;/h3&gt;
 &lt;blockquote&gt;
 &lt;p&gt;原文档至此结束。&lt;/p&gt;

 &lt;/blockquote&gt;</description></item><item><title>Python pexpect 库的使用</title><link>/p/python-pexpect-%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8/</link><pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate><guid>/p/python-pexpect-%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8/</guid><description>&lt;h1 id="一python-pexpect-库的使用"&gt;一、Python pexpect 库的使用
&lt;/h1&gt;&lt;p&gt;在终端中许多命令都有与用户交互的场景，例如切换用户时需要手动输入密码，安装应用有时要输入默认配置等。这对 shell 自动化脚本十分不便。&lt;code&gt;expect&lt;/code&gt; 命令的出现解决了上述问题。下面简单演示 shell 中使用 &lt;code&gt;expect&lt;/code&gt; 命令自动输入密码切换用户并用切换后的用户执行命令的流程。&lt;/p&gt;
&lt;h2 id="原版-shell-执行-expect-命令演示"&gt;原版 shell 执行 expect 命令演示
&lt;/h2&gt;&lt;p&gt;在终端按以下步骤执行（其中 &lt;code&gt;123&lt;/code&gt; 是 root 用户的密码），可以登录到 root 用户的终端。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;user@host:~$ expect
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect1.1&amp;gt; &lt;span class="nb"&gt;set&lt;/span&gt; timeout &lt;span class="m"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect1.2&amp;gt; spawn su
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spawn su
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;3712&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect1.3&amp;gt; expect &lt;span class="s2"&gt;&amp;#34;Password&amp;#34;&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;密码&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Password: expect1.4&amp;gt; send &lt;span class="s2"&gt;&amp;#34;123\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect1.5&amp;gt; interact
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;root@host:/home/user# 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这样就进入了 root 用户的终端。这时或许会有人说，写这么多，还不如直接执行 &lt;code&gt;su&lt;/code&gt; 命令。事实上，真正的 &lt;code&gt;expect&lt;/code&gt; 指令不会像这样直接在终端运行，而是作为脚本来运行。下面使用 Python 的 &lt;code&gt;os&lt;/code&gt; 库中的 &lt;code&gt;system&lt;/code&gt; 函数模拟在终端输入命令，以脚本的方式运行，感受 &lt;code&gt;expect&lt;/code&gt; 的强大。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;system&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;shell_command&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# expect 脚本如下&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;#!/usr/bin/expect
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;set timeout 5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;spawn su
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;expect {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;Password&amp;#34; {send &amp;#34;123&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;r&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;密码&amp;#34; {send &amp;#34;123&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;r&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;send &amp;#34;whoami &amp;gt; whoami.txt&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;r&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;send &amp;#34;exit&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;r&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;expect eof
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# print(script)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 先清理先前测试残留的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;shell_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rm -f whoami.txt&amp;#34;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 用 echo 的方式创建 expect 脚本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;shell_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo &amp;#39;&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;script&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#39; &amp;gt; /tmp/shell_expect_su_script.sh&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;shell_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;chmod +x /tmp/shell_expect_su_script.sh&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;shell_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;/tmp/shell_expect_su_script.sh&amp;#34;&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;cat whoami.txt = &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;end&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;shell_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cat whoami.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spawn su
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Password:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;]0;root@Master: /home/hadoop[01;32mroot@Master[00m:[01;34m/home/hadoop[00m# whoami &amp;gt; whoami.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;]0;root@Master: /home/hadoop[01;32mroot@Master[00m:[01;34m/home/hadoop[00m# exit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;exit
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;cat whoami.txt = root
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;在上面的例子中，无需手动输入 root 用户的密码，即可登录进 root 用户的终端，并将自己的名称（&lt;code&gt;root&lt;/code&gt;）写入文件 &lt;code&gt;whoami.txt&lt;/code&gt; 中。由此看来，有了 &lt;code&gt;expect&lt;/code&gt; 命令，使全自动化脚本成为了可能。&lt;/p&gt;
&lt;h2 id="python-自动化脚本-pexpect-库演示"&gt;Python 自动化脚本 pexpect 库演示
&lt;/h2&gt;&lt;p&gt;在 Python 中，提供了 &lt;code&gt;pexpect&lt;/code&gt; 库，可以十分方便地使用 Python 代码实现 &lt;code&gt;expect&lt;/code&gt; 命令的功能。下面演示使用 &lt;code&gt;pexpect&lt;/code&gt; 切换到 root 用户并在 &lt;code&gt;text.txt&lt;/code&gt; 中写入一些数据，最后用 &lt;code&gt;os&lt;/code&gt; 库的 &lt;code&gt;system&lt;/code&gt; 函数执行 &lt;code&gt;cat&lt;/code&gt; 命令读取 &lt;code&gt;text.txt&lt;/code&gt; 文件内容验证执行结果。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;pexpect&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 先清理先前残留下的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;rm -f text.txt&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ls -l | grep &amp;#39;text.txt&amp;#39;&amp;#34;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pexpect&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;spawn&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;su&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;timeout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;expect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Password&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;123&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;echo export PATH=/home/hadoop &amp;gt; text.txt&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sendline&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;EOF&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;close&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ls -l text.txt&amp;#34;&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="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;cat text.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;-rw-r--r-- 1 root root 25 Mar 10 23:30 text.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;export PATH=/home/hadoop
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;0
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可见，使用 Python 代码可以更加方便地实现 &lt;code&gt;expect&lt;/code&gt; 的功能。&lt;/p&gt;
&lt;h2 id="expect-脚本讲解"&gt;expect 脚本讲解
&lt;/h2&gt;&lt;p&gt;现在，讲解一下上述例子中 &lt;code&gt;expect&lt;/code&gt; 脚本中的内容。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/usr/bin/expect # 这条语句告诉操作系统用来解释脚本的程序的位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;set&lt;/span&gt; timeout &lt;span class="m"&gt;5&lt;/span&gt; &lt;span class="c1"&gt;# 设置超时时间，单位是秒。超过这个时长，就认为执行失败并退出。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 例如在这里，如果密码 &amp;#39;123&amp;#39; 是错误的，那么等待 5 秒后无法登录进去就会退出。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;spawn su &lt;span class="c1"&gt;# spawn 是 expect 的内部指令，后面接要在 shell 执行的命令，&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 这样 expect 会开启一个新的进程来执行这个命令并监听它。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="c1"&gt;# expect 的中文是 &amp;#39;期待&amp;#39; 的意思，顾名思义，expect 会期待出现指定的字符串。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;Password&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;send &lt;span class="s2"&gt;&amp;#34;123\r&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# 双引号（必须写双引号，不能是单引号）中是 expect 指令等待 spawn 生成的程序&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# （这里是 su）出现的字符串。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 这里当 su 命令执行后出现 &amp;#34;Password&amp;#34; 时，就发送 send 后面的字符串 &amp;#34;123\r&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 给 su 命令。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 注意：123 后面的 \r 不能少，它表示我们输入 123 后按下的回车键。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s2"&gt;&amp;#34;密码&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;send &lt;span class="s2"&gt;&amp;#34;123\r&amp;#34;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt; &lt;span class="c1"&gt;# 与上面一样，只不过这里 expect 期待的是 &amp;#34;密码&amp;#34; 而不是 &amp;#34;Password&amp;#34;。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;send &lt;span class="s2"&gt;&amp;#34;whoami &amp;gt; whoami.txt\r&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 此时不出意外的话已经进入 root 的终端了，这里直接发送终端命令即可执行，同样注意 \r 不能少。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;send &lt;span class="s2"&gt;&amp;#34;exit\r&amp;#34;&lt;/span&gt; &lt;span class="c1"&gt;# 发送命令 exit 退出 root 的终端。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;expect eof &lt;span class="c1"&gt;# 结束整个 expect 命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="参考链接"&gt;参考链接
&lt;/h2&gt;&lt;ul&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.csdn.net/zhuying_linux/article/details/6902135" target="_blank" rel="noopener"
 &gt;shell expect的简单用法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.cnblogs.com/saneri/p/10819348.html" target="_blank" rel="noopener"
 &gt;Linux expect 介绍和用法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.csdn.net/pcn01/article/details/104993742/" target="_blank" rel="noopener"
 &gt;python之pexpect模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://blog.csdn.net/jackalfly/article/details/7571616" target="_blank" rel="noopener"
 &gt;#!/bin/bash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a class="link" href="https://www.runoob.com/regexp/regexp-tutorial.html" target="_blank" rel="noopener"
 &gt;正则表达式 – 教程 | 菜鸟教程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Python os 模块</title><link>/p/python-os-%E6%A8%A1%E5%9D%97/</link><pubDate>Sun, 13 Mar 2022 00:00:00 +0000</pubDate><guid>/p/python-os-%E6%A8%A1%E5%9D%97/</guid><description>&lt;h1 id="os-模块"&gt;OS 模块
&lt;/h1&gt;&lt;p&gt;&lt;code&gt;os&lt;/code&gt; 模块是一个功能强大的模块，主要提供操作系统相关功能接口，例如：文件目录操作、进程相关操作、执行系统命令、解析环境变量等。&lt;/p&gt;
&lt;p&gt;使用 &lt;code&gt;os&lt;/code&gt; 模块，我们首先要导入：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;下面我们对这些功能逐一介绍。&lt;/p&gt;
&lt;h2 id="1-目录相关操作"&gt;1. 目录相关操作
&lt;/h2&gt;&lt;p&gt;目录相关常用操作如下表：&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;方法&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.getcwd()&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取当前脚本工作的目录路径&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.getcwdb()&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;同上，返回 byte 对象&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.chdir(path)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;修改当前目录为 &lt;code&gt;path&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.mkdir(path, mode=0o777, *, dir_fd=None)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;创建目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.makedirs(name, mode=0o777, exist_ok=False)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;创建多层目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.rmdir(path, *, dir_fd=None)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;删除目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.removedirs(name)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;删除多级目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.listdir(path='.')&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;返回指定目录下所有文件&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;scandir(path='.')&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;返回迭代器，内容为指定目录下所有文件目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.chmod(path, mode, *, dir_fd=None, follow_symlinks=True)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;修改路径权限&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.rename(src, dst, ...)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;修改文件名&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;相关操作示例&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 开发环境 Ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 获取当前目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;dirname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;test&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;pwd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getcwd&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;当前工作目录:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pwd&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/hyg/tmp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 获取指定文件夹下所有文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;listf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt; files: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;listf&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 切换当前工作目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;&lt;span class="c1"&gt;# 查看当前路径&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;切换工作目录:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getcwd&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 当前目录下创建目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dirname&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="cl"&gt;&lt;span class="c1"&gt;# 显示当前目录下文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt; files: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;./&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 删除目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rmdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dirname&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 切回当前目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pwd&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="cl"&gt;&lt;span class="c1"&gt;# 显示当前目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;当前工作目录:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;pwd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;输出结果&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;当前工作目录: /home/hyg/tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/hyg/tmp files: [&amp;#39;1.jpg&amp;#39;, &amp;#39;2.jpg&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;切换工作目录: /home/hyg/tmp
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/hyg/tmp files: [&amp;#39;test&amp;#39;, &amp;#39;1.jpg&amp;#39;, &amp;#39;2.jpg&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;当前工作目录: /home/hyg/tmp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="2-ospath-相关方法"&gt;2. os.path 相关方法
&lt;/h2&gt;&lt;p&gt;这些方法包括目录判断、路径获取、路径拼接、文件信息获取等。&lt;/p&gt;
&lt;h3 id="21-文件判断"&gt;2.1 文件判断
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;方法&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.isdir(s)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;判断是否为目录，如果是目录返回 &lt;code&gt;True&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.isfile(s)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;判断是否为文件，如果是文件返回 &lt;code&gt;True&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.exists(path)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;判断文件或目录是否存在，存在返回 &lt;code&gt;True&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="22-文件路径获取"&gt;2.2 文件路径获取
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;方法&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.dirname(path)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;返回目录所在路径&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.split(p)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;目录切分，返回元组 &lt;code&gt;(head, tail)&lt;/code&gt;&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.basename(p)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;返回最后一级目录&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.join(a, *p)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;目录拼接&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.abspath(path)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件绝对路径&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;注意 &lt;code&gt;basename&lt;/code&gt; 和 &lt;code&gt;split&lt;/code&gt; 的区别，来看两个例子：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;split :&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;, result:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&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="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;basename:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;, result:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test/1.txt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;&lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;1.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;输出结果&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;split :/home/linux/test/1.txt, result:(&amp;#39;/home/linux/test&amp;#39;, &amp;#39;1.txt&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;basename:/home/linux/test/1.txt, result:1.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;split :/home/linux/test/, result:(&amp;#39;/home/linux/test&amp;#39;, &amp;#39;&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;basename:/home/linux/test/, result:
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;split :1.txt, result:(&amp;#39;&amp;#39;, &amp;#39;1.txt&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;basename:1.txt, result:1.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;注意路径及输出格式。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;关于目录拼接&lt;/strong&gt;：很多代码实现如下面这种方式：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.txt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/linux/test/1.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;这种方式存在的问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;跨平台问题：Linux 与 Windows 下目录表达方式不一样。&lt;/li&gt;
&lt;li&gt;路径拼接时，目录之间分隔符有严格限制，容易出错。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;推荐使用 &lt;code&gt;os.path.join&lt;/code&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test/&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.txt&amp;#39;&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fpath&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fpath&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.txt&amp;#39;&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fpath&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;输出结果：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/linux/test/1.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/linux/test/1.txt
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;code&gt;path&lt;/code&gt; 最后有无反斜杠，&lt;code&gt;join&lt;/code&gt; 都可以正确处理，但字符串拼接方式则不行。&lt;/p&gt;
&lt;h3 id="23-获取文件信息"&gt;2.3 获取文件信息
&lt;/h3&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;方法&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.stat(path, *, dir_fd=None, follow_symlinks=True)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件或目录信息&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.getatime(filename)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件最后访问时间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.getctime(filename)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件最后改变时间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.getmtime(filename)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件最后修改时间&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.path.getsize(filename)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取文件大小&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;getctime&lt;/code&gt; 与 &lt;code&gt;getmtime&lt;/code&gt; 的区别&lt;/strong&gt;：&lt;br&gt;
两者都是获取文件最后修改时间，但区别在于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;文件内容修改：对两个方法获取的时间都有影响。&lt;/li&gt;
&lt;li&gt;文件权限、用户修改：只对 &lt;code&gt;getctime&lt;/code&gt; 获取的时间有影响。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用 Python 代码验证：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;os&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test/1.txt&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 获取文件修改时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ctime:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getctime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mtime:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getmtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 修改文件权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chmod&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mo"&gt;0o777&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 再次获取文件修改时间&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ctime:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getctime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;mtime:&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getmtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 获取文件大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getsize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;输出结果&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ctime: 1554518401.870203 mtime: 1554518401.870203
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;ctime: 1554518438.9467654 mtime: 1554518401.870203
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;5
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="3-其他一些方法"&gt;3. 其他一些方法
&lt;/h2&gt;&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th style="text-align: left"&gt;方法&lt;/th&gt;
					&lt;th style="text-align: left"&gt;说明&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.system(command)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;执行命令&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os._exit(status)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;退出当前进程，需要添加退出状态&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.getenv(key, default=None)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;获取指定环境变量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.putenv(name, value, /)&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;设置指定环境变量&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td style="text-align: left"&gt;&lt;code&gt;os.environ&lt;/code&gt;&lt;/td&gt;
					&lt;td style="text-align: left"&gt;环境变量获取与设置&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;code&gt;os._exit&lt;/code&gt; 可以直接让当前运行程序退出，并能够添加退出状态。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;system&lt;/code&gt; 的使用示例&lt;/strong&gt;：在指定目录创建文件（Linux 下创建文件的 shell 命令：&lt;code&gt;touch fname&lt;/code&gt;）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;span class="lnt"&gt;8
&lt;/span&gt;&lt;span class="lnt"&gt;9
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/home/linux/test/tmp&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;fname&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;1.txt&amp;#39;&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;fname&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 创建文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/usr/bin/touch &lt;/span&gt;&lt;span class="si"&gt;%s&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;fname&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;输出结果&lt;/strong&gt;：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;/home/linux/test/tmp/1.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;[&amp;#39;1.txt&amp;#39;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;strong&gt;环境变量设置&lt;/strong&gt;：有两种方式获取环境变量：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;os.getenv&lt;/code&gt;：根据环境变量名称直接获取，如果没有获取到则返回 &lt;code&gt;None&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;os.environ&lt;/code&gt;：获取系统所有环境变量，可以使用字典方式去获取和设置环境变量。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对应设置环境变量，&lt;code&gt;os.putenv&lt;/code&gt; 对于某些平台可能不支持，可以使用 &lt;code&gt;os.environ&lt;/code&gt; 设置。&lt;/p&gt;
&lt;p&gt;下面我们来具体操作：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;HOME=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;HOME&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 设置环境变量（部分平台可能不支持）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;putenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;testval&amp;#39;&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="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 使用 environ&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;environ[HOME]=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;HOME&amp;#39;&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="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# 设置环境变量 Test（推荐）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;testval&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test=&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以看到，在 Ubuntu 中使用 &lt;code&gt;putenv&lt;/code&gt; 不生效，我们可以使用 &lt;code&gt;os.environ&lt;/code&gt; 替换。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;os&lt;/code&gt; 模块还有很多其他常用方法与属性，遇到问题可以查阅&lt;a class="link" href="https://docs.python.org/3/library/os.html" target="_blank" rel="noopener"
 &gt;官方文档&lt;/a&gt;。&lt;/p&gt;</description></item><item><title>BT种子下载网站推荐</title><link>/p/bt%E7%A7%8D%E5%AD%90%E4%B8%8B%E8%BD%BD%E7%BD%91%E7%AB%99%E6%8E%A8%E8%8D%90/</link><pubDate>Sun, 12 Dec 2021 00:00:00 +0000</pubDate><guid>/p/bt%E7%A7%8D%E5%AD%90%E4%B8%8B%E8%BD%BD%E7%BD%91%E7%AB%99%E6%8E%A8%E8%8D%90/</guid><description>&lt;h1 id="2021年21个最好用的种子下载网站"&gt;2021年21个最好用的种子下载网站
&lt;/h1&gt;&lt;p&gt;目前稳定的种子下载网站并不多，为此我们根据种子文件的可用性、安全性以及包含种子文件数量等进行评估，列举了目前最好用的种子下载网站。&lt;/p&gt;
&lt;p&gt;有些网站还有惊喜哦。&lt;/p&gt;
&lt;h2 id="国外"&gt;国外
&lt;/h2&gt;&lt;h3 id="1-yts"&gt;1. &lt;a class="link" href="https://yts.mx/" target="_blank" rel="noopener"
 &gt;YTS&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2010&lt;/li&gt;
&lt;li&gt;地区：新西兰&lt;/li&gt;
&lt;li&gt;每月用户：1.85亿&lt;/li&gt;
&lt;li&gt;全球排名：181&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;YTS是目前排名第一的种子下载网站，它提供的种子文件数量最全并且非常安全，YTS是由已经停止运行的YIFY发展而来。在2015年，美国电影协会要求关闭该网站。&lt;/p&gt;
&lt;p&gt;YTS的内容库非常丰富并且电影质量都很高，目前正在不断增加电影库，用户也在逐渐增多。&lt;/p&gt;
&lt;p&gt;不管是经典的老电影还是新发行的电影，在YTS中都可以找到，YTS的网站设计也非常简洁，使你可以轻松找到你喜欢的电影。&lt;/p&gt;
&lt;p&gt;YTS收录了从经典电影到新发行电影的大量电影列表。它具有易于浏览的友好用户界面，是寻找电影Torrent的用户的首选之地。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="2-海盗湾the-pirate-bay"&gt;2. &lt;a class="link" href="https://thepiratebay.org/" target="_blank" rel="noopener"
 &gt;海盗湾(The Pirate Bay)&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2003&lt;/li&gt;
&lt;li&gt;地区：瑞典&lt;/li&gt;
&lt;li&gt;每月用户：10607万&lt;/li&gt;
&lt;li&gt;全球排名：208&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;海盗湾已经运营超过15年，是目前运营时间最长，知名度最高的种子下载网站之一。但由于监管机构和政府的审查，海盗湾经历了多次域名变更。&lt;/p&gt;
&lt;p&gt;海盗湾又简称为TPB，内容包含音频，视频，电子书，软件，游戏和成人内容等多种类型，其中种子文件数量超过300万个。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="3-1337x"&gt;3. &lt;a class="link" href="https://1337x.to/" target="_blank" rel="noopener"
 &gt;1337x&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2007&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：9596万&lt;/li&gt;
&lt;li&gt;全球排名：253&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;1337x也是非常受欢迎的种子下载网站。虽然在许多国家遭到运营商的封锁，但是1337x已经稳定运营了许多年，是一个非常稳定可靠的种子下载网站。&lt;/p&gt;
&lt;p&gt;1337x提供的种子文件和磁力链接包括电影，电视节目，游戏，音乐，软件和纪录片等多种类型。&lt;/p&gt;
&lt;p&gt;虽然谷歌搜索结果中屏蔽了1337x，并且1337x也被爆出了一些安全问题，但是依然吸引了许多忠实用户。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="4-rutracker"&gt;4. &lt;a class="link" href="https://rutracker.org/" target="_blank" rel="noopener"
 &gt;Rutracker&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2004&lt;/li&gt;
&lt;li&gt;地区：俄罗斯&lt;/li&gt;
&lt;li&gt;每月用户：8573万&lt;/li&gt;
&lt;li&gt;全球排名：255&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RuTracker也是一个深受用户喜爱的种子下载网站，但在该网站所在的国家俄罗斯却不太知名。&lt;/p&gt;
&lt;p&gt;RuTracker网站语言为俄语，种子文件包括音乐、电影以及有声读物等多种类型，在2015的时候，俄罗斯屏蔽了RuTracker。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="5-rarbg"&gt;5. &lt;a class="link" href="https://rarbg.to/" target="_blank" rel="noopener"
 &gt;Rarbg&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2008&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：9035万&lt;/li&gt;
&lt;li&gt;全球排名：346&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RARBG已经运营超过11年，网站服务器位于保加利亚。&lt;/p&gt;
&lt;p&gt;RARBG的种子文件和磁力链接都非常齐全，并且包含大量的高清视频，内容包括音乐，预告片，电影，电视节目和成人内容等，每月有超过9000万用户访问该网站。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="6-nyaa"&gt;6. &lt;a class="link" href="https://nyaa.si/" target="_blank" rel="noopener"
 &gt;Nyaa&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2005&lt;/li&gt;
&lt;li&gt;地区：日本&lt;/li&gt;
&lt;li&gt;每月用户：69万&lt;/li&gt;
&lt;li&gt;全球排名：493&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NYAA是从已经停止运营的NYAA发展而来，是非常流行的动漫种子下载网站。&lt;/p&gt;
&lt;p&gt;该网站收到了许多动漫爱好者的喜爱，网站内容大多数是日语，也有部分英语，种子文件包含漫画，日本动漫，电影和游戏等。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="7-eztv"&gt;7. &lt;a class="link" href="https://eztv.io/" target="_blank" rel="noopener"
 &gt;Eztv&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2005&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：4225万&lt;/li&gt;
&lt;li&gt;全球排名：896&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;EZTV成立于2005年，由一家电视流量发行商运营，该网站拥有非常丰富的种子文件库。&lt;/p&gt;
&lt;p&gt;虽然该网站经历很多变故，并且具有许多安全问题，但是依然有很多忠实用户在使用该网站，来搜索自己喜爱的Torrent。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="8-torrent9"&gt;8. &lt;a class="link" href="https://www.torrent9.ac/" target="_blank" rel="noopener"
 &gt;Torrent9&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2018&lt;/li&gt;
&lt;li&gt;地区：法国&lt;/li&gt;
&lt;li&gt;每月用户：2395万&lt;/li&gt;
&lt;li&gt;全球排名：943&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Torrent9位于法国，该网站为用户提供了电影，电视节目，音频内容和软件等种子文件。&lt;/p&gt;
&lt;p&gt;Torrent9的网站界面对用户非常友好，使用起来非常简单方便，用户可以更轻易的区分Torrent的真假。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="9-limetorrents"&gt;9. &lt;a class="link" href="https://www.limetorrents.info/" target="_blank" rel="noopener"
 &gt;Limetorrents&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2009&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：2425万&lt;/li&gt;
&lt;li&gt;全球排名：1341&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LimeTorrents是一个种子搜索引擎，拥有非常高的访问量，拥有超过1000万的种子文件。&lt;/p&gt;
&lt;p&gt;LimeTorrents的种子文件类型包括电影和电视节目到游戏和动漫，该网站提供了一个最新种子页面，展示了最新上传的100个种子文件。&lt;/p&gt;
&lt;p&gt;该网站在种子网站中的名声比较好，并且在严格的监管下保持稳定运营。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="10-zooqle"&gt;10. &lt;a class="link" href="https://zooqle.com/" target="_blank" rel="noopener"
 &gt;Zooqle&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2013&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：1452万&lt;/li&gt;
&lt;li&gt;全球排名：2078&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Zooqle成立时间不长，拥有丰富的电影，电视剧集和节目种子文件库。&lt;/p&gt;
&lt;p&gt;搜索结果经过验证，可以通过类别，语言，大小和时间进行筛选，电影目录是从TMDb收集而来。Zooqle目前的数据库中包含了超过400万个种子文件，并且提供了简单的界面，用户可以轻松下载。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="11-newkatcr"&gt;11. &lt;a class="link" href="https://newkatcr.co/" target="_blank" rel="noopener"
 &gt;Newkatcr&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2016&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：1473万&lt;/li&gt;
&lt;li&gt;全球排名：2385&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Newkatcr位于美国，是一家比较年轻的种子下载网站，从之前的旧网站kat发展而来。&lt;/p&gt;
&lt;p&gt;你可以根据电影，电视节目，动漫，游戏，应用程序，书籍和音乐查找你想要的种子文件，每个种子文件都详细列出了文件大小、发行时间等参数，为用户提供了简易的操作界面。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="12-torrentdownloads"&gt;12. &lt;a class="link" href="https://www.torrentdownloads.me/" target="_blank" rel="noopener"
 &gt;Torrentdownloads&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2007&lt;/li&gt;
&lt;li&gt;地区：英国&lt;/li&gt;
&lt;li&gt;每月用户：1354万&lt;/li&gt;
&lt;li&gt;全球排名：2943&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Torrentdownloads成立于2007年，是一个运营时间比较长的种子搜索引擎，拥有超过1600万个种子文件，是目前世界上最大的Torrent数据库之一。&lt;/p&gt;
&lt;p&gt;前几年出现了安全问题，在Chrome和Firefox浏览器上不能正常访问，造成了该网站的访问量下降，但随着时间的推移，越来越多的用户正在使用该网站。&lt;/p&gt;
&lt;p&gt;Torrentdownloads提供的种子文件非常丰富，并且允许用户对种子文件进行评分，帮助用户区分种子文件的真假。&lt;/p&gt;
&lt;p&gt;该网站展示了每个种子文件的详细信息，其中包括上载者名称，日期，大小和链接等。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="13-magnetdl"&gt;13. &lt;a class="link" href="https://www.magnetdl.com/" target="_blank" rel="noopener"
 &gt;Magnetdl&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2012&lt;/li&gt;
&lt;li&gt;地区：英国/捷克&lt;/li&gt;
&lt;li&gt;每月用户：956万&lt;/li&gt;
&lt;li&gt;全球排名：3588&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MagnetDL拥有丰富的磁力链数据库，磁力链通过一种流行并且高效的P2P文件共享传输。&lt;/p&gt;
&lt;p&gt;简单的来说，磁力链不需要提供大量服务器供用户下载，而是通过密码哈希来标识文件，任何人都可以发布磁力链文件。&lt;/p&gt;
&lt;p&gt;在通过从MagnetDL下载磁力链之前，你需要先在电脑上安装BitTorrent客户端，该网站建议使用uTorrent。&lt;/p&gt;
&lt;p&gt;MagnetDL为用户提供了简洁的界面，并且提供了直接下载磁力链和在线观看的功能。&lt;/p&gt;
&lt;p&gt;磁铁链接的详细信息展示了大小，上载日期，上传者的名称等相关信息。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="14-torlock"&gt;14. &lt;a class="link" href="https://www.torlock.com/" target="_blank" rel="noopener"
 &gt;Torlock&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2010&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：789万&lt;/li&gt;
&lt;li&gt;全球排名：5806&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Torlock是一个种子文件搜索引擎和下载网站，索引内容包括电影，电视节目和连续剧。该网站具有丰富的种子数据库，并且用户界面简洁。&lt;/p&gt;
&lt;p&gt;如果用户在Torlock数据库中找到一个虚假连接，可以获得1美元的奖励，这保证了Torlock提供的种子文件真实可靠。&lt;/p&gt;
&lt;p&gt;Torlock数据库中拥有超过500万个经过审核的种子文件，每月拥有超过789万用户访问该网站。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="15-pcgamestorrents"&gt;15. &lt;a class="link" href="https://pcgamestorrents.com/" target="_blank" rel="noopener"
 &gt;Pcgamestorrents&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2018&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：1055万&lt;/li&gt;
&lt;li&gt;全球排名：6018&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pcgamestorrents的种子文件主要以游戏为主，涵盖了动作游戏，成人，策略，动漫以及VR游戏等分类，如果你是游戏玩家，可以参考最好用的游戏VPN。&lt;/p&gt;
&lt;p&gt;Pcgamestorrents是一个专业的torrent索引器，具有按类型分类的海量游戏数据库，包括动作游戏，成人，策略，动漫甚至VR游戏。如果您是游戏玩家，并且喜欢下载Torrent，请查看我们最好的VPN游戏指南。&lt;/p&gt;
&lt;p&gt;不过由于网页具有许多弹窗广告，这些广告甚至不能被广告拦截器屏蔽，因此使得用户体验很差，导致访问量逐渐下降。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="16-arenabg"&gt;16. &lt;a class="link" href="https://arenabg.com/" target="_blank" rel="noopener"
 &gt;Arenabg&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2007&lt;/li&gt;
&lt;li&gt;地区：保加利亚&lt;/li&gt;
&lt;li&gt;每月用户：628万&lt;/li&gt;
&lt;li&gt;全球排名：8070&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ArenaBG位于保加利亚，是非常知名的种子下载网站，该网站与Zamunda的门户网站在欧洲都拥有非常多的用户。&lt;/p&gt;
&lt;p&gt;ArenaBG网站支持保加利亚语或英语显示，如果想要在线观看视频，可以在官网下载浏览器扩展程序进行安装。&lt;/p&gt;
&lt;p&gt;该网站曾经被黑客入侵，并窃取了用户的IP地址和数据，在访问网站之前，请先下载安装一款安全快速的VPN。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="17-torrentgalaxy"&gt;17. &lt;a class="link" href="https://torrentgalaxy.to/" target="_blank" rel="noopener"
 &gt;Torrentgalaxy&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2018&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：516万&lt;/li&gt;
&lt;li&gt;全球排名：8527&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;TorrentGalaxy是比较年轻的种子下载网站，并且深受用户喜爱，目前每月有超过5百万的活跃用户。&lt;/p&gt;
&lt;p&gt;相比其他竞争对手，TorrentGalaxy提供了更加便捷的视频播放功能，并且保持高质量的种子下载。&lt;/p&gt;
&lt;p&gt;TorrentGalaxy首页展示了一些精选内容，种子详情页面包含了文件大小、语言、哈希信息以及上传者等详细信息，用户也可以对其进行评论。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="18-ettvdl"&gt;18. &lt;a class="link" href="https://www.ettvdl.com/" target="_blank" rel="noopener"
 &gt;Ettvdl&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2017&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：800万&lt;/li&gt;
&lt;li&gt;全球排名：8666&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ETTV具有非常丰富的种子文件，内容主要以电视连续剧和电视节目为主。开通此网站的会员之后，页面不会显示广告，浏览体验会更好。&lt;/p&gt;
&lt;p&gt;ETTV提供的高级订阅计划是每月6美元，长时间订阅可以获得更优惠的价格。ETTV的种子数据库还包含一些书籍，动漫和音乐，可以通过高级搜索查找结果。&lt;/p&gt;
&lt;p&gt;该网站运营时间比较短，所以相对其他竞争者而言，种子文件要少一些。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="19-torrentfunk"&gt;19. &lt;a class="link" href="https://torrentfunk.com" target="_blank" rel="noopener"
 &gt;Torrentfunk&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;成立年份：2010&lt;/li&gt;
&lt;li&gt;地区：美国&lt;/li&gt;
&lt;li&gt;每月用户：267万&lt;/li&gt;
&lt;li&gt;全球排名：13715&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Torrentfunk成立于2010年，是一个知名度非常高的种子下载网站，拥有的种子文件包括电影，视频，软件和电子书。&lt;/p&gt;
&lt;p&gt;Torrentfunk是一个受欢迎的洪流网站，具有有趣的状态验证指示器。网站运营商采取了各种措施来揭露虚假的Torrent和误导性标题，并通过每个种子文件的专用评论栏来吸引社区参与。&lt;/p&gt;
&lt;p&gt;目前Torrentfunk的访问量正在下降，可能受到了监管机构的审查。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="国内"&gt;国内
&lt;/h2&gt;&lt;h3 id="20-bt天堂"&gt;20. &lt;a class="link" href="https://www.jsr9.com/" target="_blank" rel="noopener"
 &gt;BT天堂&lt;/a&gt;
&lt;/h3&gt;&lt;h3 id="21-高清mp4"&gt;21. &lt;a class="link" href="https://mp4fan.org/" target="_blank" rel="noopener"
 &gt;高清MP4&lt;/a&gt;
&lt;/h3&gt;&lt;h2 id="使用注意"&gt;使用注意
&lt;/h2&gt;

&lt;div class="notice warning"&gt;
 &lt;div class="notice-title"&gt;法律提示&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;p&gt;使用BitTorrent协议用于文件共享本身是合法行为，但是发布者可能未经允许发布了受到版权保护的文件，这点仍然备受争议。&lt;/p&gt;
&lt;p&gt;在有些国家，用户在计算机上安装BitTorrent应用程序，或者下载种子文件，都可能会遭受刑事指控，这可能会给你带来不必要的麻烦。&lt;/p&gt;
&lt;p&gt;版权方可能会要求ISP运营商提供下载种子文件的历史记录，如果你通过VPN连接访问种子下载网站可以避免这些问题。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id="bittorrent协议简介"&gt;BitTorrent协议简介
&lt;/h2&gt;&lt;p&gt;BitTorrent是一种点对点的文件共享协议，可以通过网络发送和接受文件。&lt;/p&gt;
&lt;p&gt;BitTorrent是由布法罗大学的一名学生Bram Cohen开发的，现在已经是传输音频文件，电影，电视节目和视频剪辑最常用的协议之一。&lt;/p&gt;
&lt;p&gt;目前，BitTorrent拥有超过1亿用户，比观看Netflix和观看Hulu的用户的总和还要多。&lt;/p&gt;
&lt;h2 id="bittorrent的工作原理"&gt;BitTorrent的工作原理
&lt;/h2&gt;&lt;p&gt;需要在计算机上安装BitTorrent客户端，才能使用BitTorrent协议进行P2P共享传输文件。&lt;/p&gt;
&lt;p&gt;BitTorrent应用程序从多个其他对等计算机上下载文件，然后编译成一个完成的文件，而不是从服务器上下载。&lt;/p&gt;
&lt;p&gt;通过这种文件共享方式，用户可以从他人的电脑上下载文件，可能通过自己的电脑为他人服务（注意：在电脑上使用VPN连接确保安全）。&lt;/p&gt;
&lt;p&gt;使用这种协议可以降低网络拥塞，避免流量过于集中在骨干网络中。&lt;/p&gt;
&lt;p&gt;在使用BitTorrent协议传输内容的时候，追踪器可以找到对等计算机上的可用资源，并且将下载的文件片段进行重组。&lt;/p&gt;
&lt;h2 id="常见问题"&gt;常见问题
&lt;/h2&gt;

&lt;div class="notice info"&gt;
 &lt;div class="notice-title"&gt;FAQ&lt;/div&gt;
 &lt;div class="notice-content"&gt;&lt;p&gt;&lt;strong&gt;💡 种子网站安全吗？&lt;/strong&gt;&lt;br&gt;
这并不是绝对的，错误的使用方式，可能会不安全。由于种子网站上的文件是由其他用户上传的，其中可能会包含病毒文件。因此，在浏览种子网站或者打开种子文件之前，请安装必要的杀毒软件。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;💡 可以不使用VPN下载种子吗？&lt;/strong&gt;&lt;br&gt;
在下载一些受到版权保护的种子文件时，可能会有法律风险，使用VPN可以避免留下下载记录，但是我们不建议你下载非法内容，很多用户使用VPN来保证数据和隐私安全。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;💡 可以使用免费VPN下载种子吗？&lt;/strong&gt;&lt;br&gt;
免费VPN会限制用户的速度和使用流量，在下载文件时会非常缓慢。并且免费VPN具有很多安全问题，可能会收集用户数据，然后出售给第三方获利。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;💡 下载或上传Torrent合法吗？&lt;/strong&gt;&lt;br&gt;
如果共享的文件不是受到版权保护的文件，那么是合法的，否则可能会非法的，这要依据你所在的国家/地区而定。&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>