<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>技术札记 on 七三的小站</title>
        <link>https://www.bg7pbp.com/categories/%E6%8A%80%E6%9C%AF%E6%9C%AD%E8%AE%B0/</link>
        <description>Recent content in 技术札记 on 七三的小站</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>WangYan</copyright>
        <lastBuildDate>Mon, 15 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://www.bg7pbp.com/categories/%E6%8A%80%E6%9C%AF%E6%9C%AD%E8%AE%B0/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>Nginx 从源码安装与配置</title>
        <link>https://www.bg7pbp.com/p/nginx-install-source/</link>
        <pubDate>Mon, 15 Jun 2026 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-install-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87&#34;&gt;一、环境准备&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E4%B8%8B%E8%BD%BD%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;1.1. 下载软件包&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#openssl&#34;&gt;&lt;code&gt;OpenSSL&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#pcre2&#34;&gt;&lt;code&gt;Pcre2&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#fancyindex&#34;&gt;&lt;code&gt;FancyIndex&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#njs&#34;&gt;&lt;code&gt;NJS&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#geoip2&#34;&gt;&lt;code&gt;GeoIP2&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#nginx&#34;&gt;&lt;code&gt;Nginx&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E6%96%B0%E5%A2%9E%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84-%E5%8F%AF%E9%80%89&#34;&gt;1.2. 新增用户和组 (可选)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;二、编译安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7&#34;&gt;2.1. 安装编译工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85%E6%89%A9%E5%B1%95%E5%B7%A5%E5%85%B7&#34;&gt;2.2. 安装扩展工具&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85-maxminddb&#34;&gt;安装 MaxmindDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85-perl-%E5%8F%AF%E9%80%89&#34;&gt;安装 Perl (可选)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;2.3. 编译安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25-%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F&#34;&gt;2.5. 设置环境变量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE&#34;&gt;三、配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95&#34;&gt;3.1. 配置文件目录&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%93%E5%AD%98%E7%9B%AE%E5%BD%95&#34;&gt;缓存目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%97%A5%E5%BF%97%E7%9B%AE%E5%BD%95&#34;&gt;日志目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95&#34;&gt;配置文件目录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8&#34;&gt;3.2. 开机自启动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E9%98%B2%E7%81%AB%E5%A2%99%E8%AE%BE%E7%BD%AE&#34;&gt;3.3. 防火墙设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一环境准备&#34;&gt;一、环境准备&lt;/h2&gt;
&lt;h3 id=&#34;11-下载软件包&#34;&gt;1.1. 下载软件包&lt;/h3&gt;
&lt;h4 id=&#34;openssl&#34;&gt;&lt;code&gt;OpenSSL&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/openssl/openssl/releases/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/openssl/openssl/releases/download/openssl-4.0.1/openssl-4.0.1.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -zxf openssl-4.0.1.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;pcre2&#34;&gt;&lt;code&gt;Pcre2&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/PhilipHazel/pcre2/releases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c https://github.com/PhilipHazel/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -zxf pcre2-10.47.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;fancyindex&#34;&gt;&lt;code&gt;FancyIndex&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/aperezdc/ngx-fancyindex/releases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c https://github.com/aperezdc/ngx-fancyindex/releases/download/v0.6.0/ngx-fancyindex-0.6.0.tar.xz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xz -d ngx-fancyindex-0.6.0.tar.xz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -xf ngx-fancyindex-0.6.0.tar -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;njs&#34;&gt;&lt;code&gt;NJS&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/nginx/njs/tags&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/nginx/njs/archive/refs/tags/0.9.9.tar.gz -O njs-0.9.9.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -zxf njs-0.9.9.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;geoip2&#34;&gt;&lt;code&gt;GeoIP2&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/leev/ngx_http_geoip2_module/releases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c https://github.com/leev/ngx_http_geoip2_module/archive/refs/tags/3.4.tar.gz -O ngx_http_geoip2_module-3.4.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -zxf ngx_http_geoip2_module-3.4.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;nginx&#34;&gt;&lt;code&gt;Nginx&lt;/code&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://nginx.org/en/download.html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c http://nginx.org/download/nginx-1.30.2.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -zxf nginx-1.30.2.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-新增用户和组-可选&#34;&gt;1.2. 新增用户和组 (可选)&lt;/h3&gt;
&lt;p&gt;本文使用自带的 &lt;code&gt;www-data&lt;/code&gt; 用户和组&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --shell /bin/bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --gecos &lt;span class=&#34;s1&#34;&gt;&amp;#39;Nginx web server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --group &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --disabled-password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --home /var/www &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd --system nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --shell /bin/bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --comment &lt;span class=&#34;s1&#34;&gt;&amp;#39;Nginx web server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --gid nginx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --home-dir /home/nginx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --create-home &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编译安装&#34;&gt;二、编译安装&lt;/h2&gt;
&lt;h3 id=&#34;21-安装编译工具&#34;&gt;2.1. 安装编译工具&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt -y install build-essential libzip-dev libxml2-dev libxslt-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo yum -y groupinstall &amp;#39;Development Tools&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y gcc gcc-c++ zlib-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装扩展工具&#34;&gt;2.2. 安装扩展工具&lt;/h3&gt;
&lt;h4 id=&#34;安装-maxminddb&#34;&gt;安装 MaxmindDB&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/maxmind/libmaxminddb/releases&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo yum install libmaxminddb libmaxminddb-devel -y&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install libmaxminddb-dev mmdb-bin -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/P3TERX/GeoLite.mmdb&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /usr/share/geoip/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 国内&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/share/geoip &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/geoip/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;GeoLite2-ASN.mmdb,GeoLite2-City.mmdb,GeoLite2-Country.mmdb&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 国外&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/share/geoip &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://git.io/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;GeoLite2-ASN.mmdb,GeoLite2-City.mmdb,GeoLite2-Country.mmdb&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmdblookup --file /usr/share/geoip/GeoLite2-Country.mmdb --ip 43.138.171.130 country names en
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mmdblookup --file /usr/share/geoip/GeoLite2-City.mmdb --ip 43.138.171.130 city names en&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;安装-perl-可选&#34;&gt;安装 Perl (可选)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://www.cpan.org/src/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c https://code.wangyan.cloud//wangyan/packages/releases/download/perl/perl-5.42.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -c https://www.cpan.org/src/5.0/perl-5.42.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf perl-5.42.1.tar.gz -C /usr/local/src &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/src/perl-5.41.5 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./Configure -des -Dprefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/perl &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;perl -v&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-编译安装&#34;&gt;2.3. 编译安装&lt;/h3&gt;
&lt;p&gt;注意修改 &lt;code&gt;openssl&lt;/code&gt; 、&lt;code&gt;pcre&lt;/code&gt; 、&lt;code&gt;ngx-fancyindex&lt;/code&gt; 、&lt;code&gt;ngx_http_geoip2_module&lt;/code&gt; 版本号。&lt;/p&gt;
&lt;p&gt;部分组件不需要，可以删减。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/src/nginx-1.30.2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./configure &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-stream &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_ssl_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_v2_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_realip_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_sub_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_gzip_static_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-http_stub_status_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/openssl-4.0.1 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --with-pcre&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/pcre2-10.47 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --http-client-body-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/client_body &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --http-proxy-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/proxy &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --http-fastcgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/fastcgi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --http-uwsgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/uwsgi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --http-scgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/scgi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --add-dynamic-module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/ngx-fancyindex-0.6.0 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --add-dynamic-module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/ngx_http_geoip2_module-3.4 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --add-dynamic-module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/src/njs-0.9.9/nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/nginx/conf/ /etc/nginx &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/nginx/sbin/nginx  /usr/bin/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv -f /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;25-设置环境变量&#34;&gt;2.5. 设置环境变量&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/nginx/sbin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; PATH&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三配置&#34;&gt;三、配置&lt;/h2&gt;
&lt;h3 id=&#34;31-配置文件目录&#34;&gt;3.1. 配置文件目录&lt;/h3&gt;
&lt;h4 id=&#34;缓存目录&#34;&gt;缓存目录&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /usr/local/nginx/temp/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;client_body,proxy,fastcgi,uwsgi,scgi&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R www-data:www-data /usr/local/nginx/temp/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;日志目录&#34;&gt;日志目录&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /var/log/nginx &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;711&lt;/span&gt; /var/log/nginx &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R www-data:www-data /var/log/nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;配置文件目录&#34;&gt;配置文件目录&lt;/h4&gt;
&lt;p&gt;复制配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/nginx &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp -r resources/conf/* /usr/local/nginx/conf/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp -r resources/geoip /usr/share/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R www-data:www-data /usr/share/geoip&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下载配置文件（可选）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /usr/local/nginx/conf/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;conf.d,custom-config,error-pages,modules-available,modules-enabled,rewrite-rules,sites-available,sites-enabled,ssl-certs&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/conf.d &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/conf.d/default_server.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/custom-config &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/custom-config/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;fancyindex.conf,general.conf,geoip.conf,ips.conf,php_fastcgi.conf,reverse-proxy.conf,security.conf&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/error-pages &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/error-pages/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;400.html,403.html,404.html,500.html,502.html&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/modules-available &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/modules-available/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;ngx_http_fancyindex.conf,ngx_http_geoip2_module.conf,ngx_http_js.conf,ngx_stream_geoip2.conf,ngx_stream_js.conf&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/rewrite-rules &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/rewrite-rules/wordpress.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/sites-available &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/sites-available/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;example.com.conf,proxy.example.com.conf&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo wget -c --no-check-certificate -P /usr/local/nginx/conf/ssl-certs &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;     https://code.wangyan.cloud//wangyan/nginx/raw/branch/main/resources/conf/ssl-certs/dhparam.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置目录权限&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown 0:0 /usr/local/nginx/conf -R &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /usr/local/nginx/conf -type f -exec sudo chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;find /usr/local/nginx/conf -type d -exec sudo chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;证书特殊权限&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;777&lt;/span&gt; /usr/local/nginx/conf/ssl-certs &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod o+t /usr/local/nginx/conf/ssl-certs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-开机自启动&#34;&gt;3.2. 开机自启动&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/lib/systemd/system/nginx.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx - high performance web server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://nginx.org/en/docs/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network.target remote-fs.target nss-lookup.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;forking
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PIDFile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/run/nginx.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStartPre&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecReload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin/kill -s HUP &lt;span class=&#34;nv&#34;&gt;$MAINPID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin/kill -s QUIT &lt;span class=&#34;nv&#34;&gt;$MAINPID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PrivateTmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;multi-user.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/lib/systemd/system/nginx.service &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now nginx.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-防火墙设置&#34;&gt;3.3. 防火墙设置&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Fedora/RHEL/CentOS:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now firewalld.service 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Ubuntu/Debian:&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install ufw&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/ufw/applications.d/ufw-mysqlserver&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;MySQL&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MySQL database server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MySQL database server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ports&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3306/tcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw allow &lt;span class=&#34;s1&#34;&gt;&amp;#39;WWW Full&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw allow &lt;span class=&#34;s1&#34;&gt;&amp;#39;OpenSSH&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw allow &lt;span class=&#34;s1&#34;&gt;&amp;#39;MySQL&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw status verbose
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw delete allow 80/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw status numbered
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ufw delete &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Nginx 配置 SSL 可信证书</title>
        <link>https://www.bg7pbp.com/p/nginx-ssl-trusted-certificate/</link>
        <pubDate>Thu, 15 Jan 2026 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-ssl-trusted-certificate/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E4%BD%BF%E7%94%A8-acmesh-%E7%AD%BE%E5%8F%91-zerossl-%E8%AF%81%E4%B9%A6&#34;&gt;1. 使用 acme.sh 签发 ZeroSSL 证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;1.1. 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85-acmesh&#34;&gt;1.2. 安装 acme.sh&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#121-%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85&#34;&gt;1.2.1. 一键安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#122-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AE%89%E8%A3%85%E5%8F%AF%E9%80%89&#34;&gt;1.2.2. 自定义安装（可选）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E7%AD%BE%E5%8F%91%E8%AF%81%E4%B9%A6dns-%E6%A8%A1%E5%BC%8F&#34;&gt;1.3. 签发证书（DNS 模式）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#131-%E6%B3%A8%E5%86%8C-zerossl&#34;&gt;1.3.1. 注册 ZeroSSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#132-%E5%AF%BC%E5%85%A5%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E5%95%86-key&#34;&gt;1.3.2. 导入域名注册商 KEY&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#133-%E7%AD%BE%E5%8F%91-ecc-%E8%AF%81%E4%B9%A6&#34;&gt;1.3.3. 签发 ECC 证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#134-%E6%92%A4%E9%94%80--%E5%88%A0%E9%99%A4&#34;&gt;1.3.4. 撤销 &amp;amp;&amp;amp; 删除&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E4%BA%8Cnginx-ssl-%E9%85%8D%E7%BD%AE&#34;&gt;2. 二、Nginx SSL 配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E7%94%9F%E6%88%90-dhparam&#34;&gt;2.1. 生成 dhparam&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-使用-acmesh-签发-zerossl-证书&#34;&gt;1. 使用 &lt;a href=&#34;http://acme.sh&#34;&gt;acme.sh&lt;/a&gt; 签发 ZeroSSL 证书&lt;/h2&gt;
&lt;h3 id=&#34;11-安装依赖&#34;&gt;1.1. 安装依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install cron socat -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install nc socat -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装-acmesh&#34;&gt;1.2. 安装 &lt;a href=&#34;http://acme.sh&#34;&gt;acme.sh&lt;/a&gt;&lt;/h3&gt;
&lt;h4 id=&#34;121-一键安装&#34;&gt;1.2.1. 一键安装&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/acmesh-official/acme.sh/wiki/说明&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://get.acme.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh -s &lt;span class=&#34;nv&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;service@wangyan.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;122-自定义安装可选&#34;&gt;1.2.2. 自定义安装（可选）&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/Neilpang/acme.sh.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; acme.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./acme.sh --install  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--home /usr/local/acmesh &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--config-home /usr/local/acmesh/data &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--cert-home  /usr/local/acmesh/data &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--accountemail  &lt;span class=&#34;s2&#34;&gt;&amp;#34;service@wangyan.org&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-签发证书dns-模式&#34;&gt;1.3. 签发证书（DNS 模式）&lt;/h3&gt;
&lt;h4 id=&#34;131-注册-zerossl&#34;&gt;1.3.1. 注册 ZeroSSL&lt;/h4&gt;
&lt;p&gt;获取 &lt;code&gt;eab-kid&lt;/code&gt; 和 &lt;code&gt;eab-hmac-key&lt;/code&gt;替换 &lt;code&gt;xxxx&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;acme.sh --register-account --server zerossl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --eab-kid xxxx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --eab-hmac-key xxxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;132-导入域名注册商-key&#34;&gt;1.3.2. 导入域名注册商 KEY&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/acmesh-official/acme.sh/tree/master/dnsapi&#34;&gt;dnsapi&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/acmesh-official/acme.sh/wiki/DNS-alias-mode&#34;&gt;##acmesh-official / ##acme.sh&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Cloudflare&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CF_Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CF_Email&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DNSPod&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DP_Id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;DP_Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# West&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;WEST_Username&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;WEST_Key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;133-签发-ecc-证书&#34;&gt;1.3.3. 签发 ECC 证书&lt;/h4&gt;
&lt;p&gt;注意修改 &lt;code&gt;dns_west_cn&lt;/code&gt; 为 &lt;code&gt;dns_cf&lt;/code&gt; 或者其他 &lt;code&gt;dns_dp&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;acme.sh --register-account --server zerossl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --eab-kid xxx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --eab-hmac-key xxxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;acme.sh --server zerossl --issue --force &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan.cloud/&amp;#39;&lt;/span&gt; -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.wangyan.cloud/&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --dns dns_cf --keylength ec-256
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s wangyan.cloud/_ecc /usr/local/nginx/conf/ssl-certs/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;134-撤销--删除&#34;&gt;1.3.4. 撤销 &amp;amp;&amp;amp; 删除&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;acme.sh --revoke -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan.cloud/&amp;#39;&lt;/span&gt; -d &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.wangyan.cloud/&amp;#39;&lt;/span&gt; --ecc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;acme.sh --list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-二nginx-ssl-配置&#34;&gt;2. 二、Nginx SSL 配置&lt;/h2&gt;
&lt;h3 id=&#34;21-生成-dhparam&#34;&gt;2.1. 生成 dhparam&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;777&lt;/span&gt; /usr/local/nginx/conf/ssl-certs &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod o+t /usr/local/nginx/conf/ssl-certs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo openssl dhparam -out /etc/nginx/ssl-certs/dhparam.pem &lt;span class=&#34;m&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo curl https://ssl-config.mozilla.org/ffdhe2048.txt &amp;gt; /etc/nginx/ssl-certs/dhparam.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署6：安装 Ollama 模型推理引擎</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-ollama/</link>
        <pubDate>Sat, 30 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-ollama/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%AE%89%E8%A3%85&#34;&gt;1. 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E9%85%8D%E7%BD%AE&#34;&gt;2. 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E8%87%AA%E5%90%AF%E5%8A%A8&#34;&gt;3. 自启动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E5%8D%B8%E8%BD%BD&#34;&gt;4. 卸载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5-%E5%AF%BC%E5%85%A5gguf%E6%A8%A1%E5%9E%8B&#34;&gt;5. 导入GGUF模型&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E5%88%9B%E5%BB%BA-modelfile-%E6%96%87%E4%BB%B6&#34;&gt;5.1. 创建 Modelfile 文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52-%E5%88%9B%E5%BB%BA%E8%BF%90%E8%A1%8C%E6%A8%A1%E5%9E%8B&#34;&gt;5.2. 创建、运行模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Xinference 多运用与企业级部署，而 Ollama 则简化本地部署与交互，提供开箱即用的命令行工具和轻量级 API，支持快速模型加载和交互式调试。&lt;/p&gt;
&lt;h2 id=&#34;1-安装&#34;&gt;1. 安装&lt;/h2&gt;
&lt;p&gt;在线安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://ollama.com/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;离线安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar -C /usr -xzf ollama-linux-amd64.tgz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;权限设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -a -G ollama &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;whoami&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-配置&#34;&gt;2. 配置&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ollama/ollama/blob/main/docs/faq.md&#34;&gt;https://github.com/ollama/ollama/blob/main/docs/faq.md&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/systemd/system/ollama.service.d/override.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl edit ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OLLAMA_HOST=172.17.0.1:8888&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OLLAMA_KEEP_ALIVE=1h&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OLLAMA_MAX_LOADED_MODELS=2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;OLLAMA_NUM_PARALLEL=3&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;默认位置： &lt;code&gt;/usr/share/ollama/.ollama/models&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;**特别注意：**修改了默认主机后，运行ollama命令需要增加加前缀 &lt;code&gt;OLLAMA_HOST=172.17.0.1:8888 &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;例如：&lt;code&gt;OLLAMA_HOST=172.17.0.1:8888 ollama  ps&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;3-自启动&#34;&gt;3. 自启动&lt;/h2&gt;
&lt;p&gt;sudo vim /etc/systemd/system/ollama.service&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Ollama Service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network-online.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/ollama serve
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;RestartSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;PATH=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;default.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now ollama&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-卸载&#34;&gt;4. 卸载&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl stop ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl disable ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm /etc/systemd/system/ollama.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;which ollama&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -r /usr/share/ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo userdel ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupdel ollama
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm -rf /usr/local/lib/ollama&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;5-导入gguf模型&#34;&gt;5. 导入GGUF模型&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/ollama/ollama/blob/main/docs/import.md&#34;&gt;https://github.com/ollama/ollama/blob/main/docs/import.md&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zhuanlan.zhihu.com/p/21162949288&#34;&gt;https://zhuanlan.zhihu.com/p/21162949288&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;51-创建-modelfile-文件&#34;&gt;5.1. 创建 Modelfile 文件&lt;/h3&gt;
&lt;p&gt;vim DeepSeek-R1-Distill-Qwen-7B-GGUF/Modelfile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FROM DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;TEMPLATE &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&amp;#34;{{- if .System }}{{ .System }}{{ end }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- range &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;, &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; := .Messages }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; := eq (len (slice &lt;/span&gt;$&lt;span class=&#34;s2&#34;&gt;.Messages &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)) 1}}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- if eq .Role &amp;#34;&lt;/span&gt;user&lt;span class=&#34;s2&#34;&gt;&amp;#34; }}&amp;lt;｜User｜&amp;gt;{{ .Content }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- else if eq .Role &amp;#34;&lt;/span&gt;assistant&lt;span class=&#34;s2&#34;&gt;&amp;#34; }}&amp;lt;｜Assistant｜&amp;gt;{{ .Content }}{{- if not &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; }}&amp;lt;｜end▁of▁sentence｜&amp;gt;{{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- if and &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; (ne .Role &amp;#34;&lt;/span&gt;assistant&lt;span class=&#34;s2&#34;&gt;&amp;#34;) }}&amp;lt;｜Assistant｜&amp;gt;{{- end }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;{{- end }}&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PARAMETER stop &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;｜begin▁of▁sentence｜&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PARAMETER stop &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;｜end▁of▁sentence｜&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PARAMETER stop &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;｜User｜&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PARAMETER stop &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;｜Assistant｜&amp;gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52-创建运行模型&#34;&gt;5.2. 创建、运行模型&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#ollama create &amp;lt;model_name&amp;gt; -f &amp;lt;path_to_Modelfile&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama create deepseek-r1-7b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama run deepseek-r1-7b
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ollama ps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署5：安装 xinference 模型推理平台</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-xinference/</link>
        <pubDate>Fri, 29 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-xinference/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%AE%89%E8%A3%85-xinference&#34;&gt;1. 安装 xinference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E6%9F%A5%E8%AF%A2%E6%A8%A1%E5%9E%8B%E6%8E%A8%E7%90%86%E5%BC%95%E6%93%8E&#34;&gt;2. 查询模型推理引擎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E5%90%AF%E5%8A%A8%E5%92%8C%E5%81%9C%E6%AD%A2%E6%A8%A1%E5%9E%8B&#34;&gt;3. 启动和停止模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9E%8B&#34;&gt;4. 管理模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Xinference 是一款开源模型推理平台，支持多种推理引擎（如 Transformers、vLLM 和 GGML），它提供多种灵活的 API 和接口，除了支持 LLM，它还可以部署 Embedding 和 ReRank 模型，这在企业级 RAG 构建中非常关键。Xinference 还支持分布式多机部署，能够在多个设备或机器间高效分配模型推理任务，满足多模型和高可用的部署需要。&lt;/p&gt;
&lt;h2 id=&#34;1-安装-xinference&#34;&gt;1. 安装 xinference&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html&#34;&gt;https://inference.readthedocs.io/zh-cn/latest/getting_started/installation.html&lt;/a&gt;&lt;br&gt;
&lt;a href=&#34;https://inference.readthedocs.io/zh-cn/latest/user_guide/client_api.html&#34;&gt;https://inference.readthedocs.io/zh-cn/latest/user_guide/client_api.html&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# uv 虚拟环境 （官方推荐3.10环境）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#pip install Cython&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#uv pip install &amp;#34;xinference[all]&amp;#34; --no-build-isolation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#sudo apt-get install python3.12-dev libfst-dev&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv xinference --python 3.10 --seed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; xinference/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install &lt;span class=&#34;s2&#34;&gt;&amp;#34;xinference[all]&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-查询模型推理引擎&#34;&gt;2. 查询模型推理引擎&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 启动 xinference 本地服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;XINFERENCE_MODEL_SRC&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;modelscope xinference-local --host 0.0.0.0 --port &lt;span class=&#34;m&#34;&gt;9997&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查询LLM模型支持的所有的推理引擎&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference engine -e http://0.0.0.0:9997 --model-name deepseek-r1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 进一步查询vllm引擎所支持的参数组合&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference engine -e http://0.0.0.0:9997 --model-name deepseek-r1 --model-engine vllm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 进一步查询ggufv2格式所支持的参数组合&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference engine -e http://0.0.0.0:9997 --model-name deepseek-r1 -f ggufv2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-启动和停止模型&#34;&gt;3. 启动和停止模型&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference launch --model-name &amp;lt;MODEL_NAME&amp;gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--model-engine &amp;lt;MODEL_ENGINE&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--model-type &amp;lt;MODEL_TYPE&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--model-uid &amp;lt;MODEL_UID&amp;gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;--endpoint &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://&amp;lt;XINFERENCE_HOST&amp;gt;:&amp;lt;XINFERENCE_PORT&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;示例：deepseek-r1&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference launch --model-name deepseek-r1-distill-qwen &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --model-engine llama.cpp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --model-type LLM &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --model-uid deepseek/deepseek-r1-distill-qwen &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --endpoint &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://0.0.0.0:9997&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --model-format ggufv2 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --size-in-billions &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --quantization Q4_K_M &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --n-gpu auto &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --replica &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --n-worker &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --model-path DeepSeek-R1-Distill-Qwen-7B-Q4_K_M.gguf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                  --n_ctx &lt;span class=&#34;m&#34;&gt;10240&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;示例：whisper-large-v3-turbo&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference launch --model-name whisper-large-v3-turbo --model-type audio&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-管理模型&#34;&gt;4. 管理模型&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 列出 Xinference 中所有可以启动的、某种类型的模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# type: LLM / embedding / image /audio / rerank video&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference registrations --model-type LLM --endpoint &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://0.0.0.0:9997&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 列出所有在运行的模型&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 释放模型资源&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;xinference terminate --model-uid &lt;span class=&#34;s2&#34;&gt;&amp;#34;qwen2.5-instruct&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署4：Transformers 模型量化</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-transformers-quantization/</link>
        <pubDate>Thu, 28 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-transformers-quantization/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E4%B8%8B%E8%BD%BD-transformers-%E6%A8%A1%E5%9E%8B&#34;&gt;1. 下载 Transformers 模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-transformers-%E6%A8%A1%E5%9E%8B%E8%BD%AC-gguf-%E6%A0%BC%E5%BC%8F&#34;&gt;2. Transformers 模型转 GGUF 格式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-gguf-%E6%A8%A1%E5%9E%8B%E9%87%8F%E5%8C%96&#34;&gt;3. GGUF 模型量化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E8%BF%90%E8%A1%8C-gguf-%E6%A8%A1%E5%9E%8B&#34;&gt;4. 运行 GGUF 模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;大语言模型（Large Language Model，LLM），可以通过量化（Quantization）操作来节约内存/显存的使用，并且降低了通讯开销，进而达到加速模型推理的效果。比如将权重（weight）为浮点数模型 FP32 转换为定点数模型 INT8。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;低精度模型：表示模型权重数值格式为 FP16（半精度浮点）或者 INT8（8位的定点整数）。&lt;/li&gt;
&lt;li&gt;常规精度模型：表示模型权重数值格式为、 FP32（32位浮点，单精度）。&lt;/li&gt;
&lt;li&gt;混合精度（Mixed precision）：表示模型中同时使用 FP32 和 FP16 的权重数值格式。 FP16 减少了一半的内存大小，但有些参数或操作符必须采用 FP32 格式才能保持准确度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-下载-transformers-模型&#34;&gt;1. 下载 Transformers 模型&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-transformers-模型转-gguf-格式&#34;&gt;2. Transformers 模型转 GGUF 格式&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/llama.cpp/convert_hf_to_gguf.py DeepSeek-R1-Distill-Qwen-14B --outfile DeepSeek-R1-Distill-Qwen-14B-GGUF/DeepSeek-R1-Distill-Qwen-14B-F16.gguf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--outtype f32&lt;/code&gt; 参数可以指定量化精度&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;3-gguf-模型量化&#34;&gt;3. GGUF 模型量化&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 评估量化效果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-quantize-stats -m DeepSeek-R1-Distill-Qwen-7B-F16.gguf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Q 代表量化。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 5 表示量化过程中使用的位数。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# K 表示在量化中使用 k 均值聚类。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# M 表示量化后的模型大小。S = 小，M = 中，L = 大。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-quantize DeepSeek-R1-Distill-Qwen-7B-F16.gguf DeepSeek-R1-Distill-Qwen-7B-Q5_K_M.gguf Q5_K_M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 14B&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-quantize DeepSeek-R1-Distill-Qwen-14B-F16.gguf DeepSeek-R1-Distill-Qwen-14B-Q4_K_M.gguf Q4_K_M&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;q4_0：这是最初的量化方案，使用 4 位精度。&lt;/li&gt;
&lt;li&gt;q4_1 和 q4_k_m、q4_k_s：这些提供了不同程度的准确性和推理速度，适合需要平衡资源使用的场景。&lt;/li&gt;
&lt;li&gt;q5_0、q5_1、q5_k_m、q5_k_s：这些版本在保证更高准确度的同时，会使用更多的资源并且推理速度较慢。&lt;/li&gt;
&lt;li&gt;q6_k 和 q8_0：这些提供了最高的精度，但是因为高资源消耗和慢速度，可能不适合所有用户。&lt;/li&gt;
&lt;li&gt;fp16 和 f32: 不量化，保留原始精度。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;4-运行-gguf-模型&#34;&gt;4. 运行 GGUF 模型&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-cli -m DeepSeek-R1-Distill-Qwen-7B-Q5_K_M.gguf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;llama-cli -m DeepSeek-R1-Distill-Qwen-7B-Q5_K_M.gguf--port &lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署3：安装本地模型推理引擎</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-transformers-engine/</link>
        <pubDate>Wed, 27 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-transformers-engine/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%AE%89%E8%A3%85-transformers-%E5%BC%95%E6%93%8E&#34;&gt;3.1. 安装 Transformers 引擎&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#311-pytorch-%E5%92%8C-transformers-%E5%85%B3%E7%B3%BB&#34;&gt;3.1.1. PyTorch 和 Transformers 关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#312-%E4%BD%BF%E7%94%A8-pip-%E5%AE%89%E8%A3%85-pytorch&#34;&gt;3.1.2. 使用 pip 安装 pytorch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#313-%E4%BD%BF%E7%94%A8-conda-%E5%AE%89%E8%A3%85-pytorch%E4%B8%8D%E6%8E%A8%E8%8D%90&#34;&gt;3.1.3. 使用 conda 安装 pytorch（不推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#314-%E9%AA%8C%E8%AF%81-torchcuda-%E7%89%88%E6%9C%AC&#34;&gt;3.1.4. 验证 Torch/CUDA 版本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%AE%89%E8%A3%85-llamacpp-%E5%BC%95%E6%93%8E&#34;&gt;3.2. 安装 llama.cpp 引擎&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#321-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;3.2.1. 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#322-%E5%AF%BC%E5%85%A5-cuda-%E7%8E%AF%E5%A2%83&#34;&gt;3.2.2. 导入 CUDA 环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#323-%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91-llamacpp&#34;&gt;3.2.3. 源码编译 llama.cpp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#324-llamacpp-%E5%91%BD%E4%BB%A4%E8%A1%A5%E5%85%A8&#34;&gt;3.2.4. llama.cpp 命令补全&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%AE%89%E8%A3%85-vllm-%E5%BC%95%E6%93%8E&#34;&gt;3.3. 安装 vLLM 引擎&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;31-安装-transformers-引擎&#34;&gt;3.1. 安装 Transformers 引擎&lt;/h2&gt;
&lt;h3 id=&#34;311-pytorch-和-transformers-关系&#34;&gt;3.1.1. PyTorch 和 Transformers 关系&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://pytorch.org&#34;&gt;PyTorch&lt;/a&gt; 是由 Facebook 开发的机器学习框架，基于 Torch 库，底层由 C++ 实现，提供了丰富的工具和API，使得构建和训练神经网络变得更加简单和高效。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://www.tensorflow.org&#34;&gt;TensorFlow&lt;/a&gt; 是由 Google 开发的机器学习框架，具有静态计算图和高度优化的执行引擎，使其适用于大规模的分布式训练和部署。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/huggingface/transformers&#34;&gt;Transformers&lt;/a&gt; 库是由 &lt;a href=&#34;https://huggingface.co/models&#34;&gt;Hugging Face&lt;/a&gt; 开发的，它建立在 PyTorch 和 TensorFlow 之上，支持几乎有所的最新模型。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;312-使用-pip-安装-pytorch&#34;&gt;3.1.2. 使用 pip 安装 pytorch&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：当前 pytorch 稳定版(2.8.0) 只支持到 &lt;code&gt;CUDA 12.9&lt;/code&gt;，&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://pytorch.org/get-started/locally&#34;&gt;https://pytorch.org/get-started/locally&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最新稳定版：&lt;code&gt;ptorch-2.8.0/cuda-12.9&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# conda 虚拟环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name pytorch280_cu129 &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate pytorch280_cu129
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu129
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# uv 虚拟环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv pytorch280_cu129 --python 3.12 --seed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; pytorch280_cu129/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install torch torchvision --index-url https://download.pytorch.org/whl/cu129&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;313-使用-conda-安装-pytorch不推荐&#34;&gt;3.1.3. 使用 conda 安装 pytorch（不推荐）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://pytorch.org/get-started/previous-versions/&#34;&gt;https://pytorch.org/get-started/previous-versions/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CUDA 12.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install &lt;span class=&#34;nv&#34;&gt;pytorch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;2.5.1 &lt;span class=&#34;nv&#34;&gt;torchvision&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;0.20.1 &lt;span class=&#34;nv&#34;&gt;torchaudio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;2.5.1 pytorch-cuda&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;12.4 -c pytorch -c nvidia
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CPU Only&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install &lt;span class=&#34;nv&#34;&gt;pytorch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;2.5.1 &lt;span class=&#34;nv&#34;&gt;torchvision&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;0.20.1 &lt;span class=&#34;nv&#34;&gt;torchaudio&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;2.5.1 cpuonly -c pytorch&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;314-验证-torchcuda-版本&#34;&gt;3.1.4. 验证 Torch/CUDA 版本&lt;/h3&gt;
&lt;p&gt;python ~/torch-test.py&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;python&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;torch&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 显示当前torch版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;__version__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查CUDA是否可用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cuda&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;is_available&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 显示当前CUDA版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;print&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;torch&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;cuda&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;32-安装-llamacpp-引擎&#34;&gt;3.2. 安装 llama.cpp 引擎&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ggml-org/llama.cpp&#34;&gt;llama.cpp&lt;/a&gt; 是一个用纯C/C++编写的开源大语言模型推理库,旨在实现高性能、跨平台的LLM推理。如果资源有限，可以优先使用 llama.cpp 引擎，因为他提供了更多的量化选项。&lt;/p&gt;
&lt;h3 id=&#34;321-安装依赖&#34;&gt;3.2.1. 安装依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# conda 虚拟环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name llama_cpp &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.12
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate llama_cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -r requirements.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# uv 虚拟环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注意目前只支持到 python 3.12&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv llama_cpp --python 3.12 --seed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; llama_cpp/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://ghfast.top/https://github.com/ggml-org/llama.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; llama.cpp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install &lt;span class=&#34;nv&#34;&gt;numpy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;1.26.4 huggingface-hub&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;0.23.2 &lt;span class=&#34;nv&#34;&gt;matplotlib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;3.10.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install -r requirements.txt --prerelease&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;allow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;322-导入-cuda-环境&#34;&gt;3.2.2. 导入 CUDA 环境&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ~/.cuda.env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# set cuda environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;CUDA_HOME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/cuda
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$LD_LIBRARY_PATH&lt;/span&gt;:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:&lt;span class=&#34;nv&#34;&gt;$CUDA_HOME&lt;/span&gt;/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# import cuda environment&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.cuda.env&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;323-源码编译-llamacpp&#34;&gt;3.2.3. 源码编译 llama.cpp&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md&#34;&gt;https://github.com/ggml-org/llama.cpp/blob/master/docs/build.md&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装编译工具&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt -y install build-essential g++ cmake libcurl4-openssl-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CUDA Build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake -B build -DGGML_CUDA&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake --build build --config Release -- -j &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CPU Build&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake -B build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake --build build --config Release -- -j &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;324-llamacpp-命令补全&#34;&gt;3.2.4. llama.cpp 命令补全&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/llama.cpp/build/bin/llama-cli --completion-bash &amp;gt; ~/.llama-completion.bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vim ~/.profile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# set llama PATH if it exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/llama.cpp/build/bin&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;/llama.cpp/build/bin:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# llama completion&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; ~/.llama-completion.bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;33-安装-vllm-引擎&#34;&gt;3.3. 安装 vLLM 引擎&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/vllm-project/vllm&#34;&gt;vLLM&lt;/a&gt; 专为高效服务大型语言模型（LLM）而设计，通过有效管理注意力键和值来改善内存管理，吞吐量能够达到 Transformers 的 24 倍，因此 vLLM 适合在生产环境中使用，应对高并发的用户访问。&lt;/p&gt;
&lt;p&gt;由于 vLLM 编译了许多 CUDA 内核，导致与有 CUDA 和 PyTorch 出现很多兼容问题，因此官方建议在全新环境中部署。&lt;/p&gt;
&lt;p&gt;详细安装方法见官方文档： &lt;a href=&#34;https://docs.vllm.ai/en/latest/getting_started/installation/gpu/index.html&#34;&gt;https://docs.vllm.ai/en/latest/getting_started/installation/gpu/index.html&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv vllm --python 3.12 --seed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; vllm/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv pip install vllm &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;需要注意的是，vllm 默认安装的是 cu124 版本，请确保与系统的一致。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署2：安装 Python 环境</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-python-conda/</link>
        <pubDate>Tue, 26 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-python-conda/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E4%BD%BF%E7%94%A8-conda-%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83&#34;&gt;1. 使用 Conda 虚拟环境&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85-anaconda&#34;&gt;1.1. 安装 Anaconda&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E8%A7%A3%E5%86%B3-glibcxx-not-found-%E9%97%AE%E9%A2%98&#34;&gt;1.2. 解决 GLIBCXX not found 问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%B8%B8%E7%94%A8-conda-%E5%91%BD%E4%BB%A4&#34;&gt;1.3. 常用 conda 命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-conda-%E5%92%8C-pip-%E5%8C%BA%E5%88%AB&#34;&gt;1.4. conda 和 pip 区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E9%80%9A%E8%BF%87-conda-%E5%AE%89%E8%A3%85&#34;&gt;1.5. 通过 conda 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#16-%E9%80%9A%E8%BF%87-pip-%E5%AE%89%E8%A3%85%E5%8C%85&#34;&gt;1.6. 通过 pip 安装包&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E4%BD%BF%E7%94%A8-uv-%E8%99%9A%E6%8B%9F%E7%8E%AF%E5%A2%83&#34;&gt;2. 使用 uv 虚拟环境&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85-uv&#34;&gt;2.1. 安装 uv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E9%95%9C%E5%83%8F%E8%AE%BE%E7%BD%AE&#34;&gt;2.2. 镜像设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&#34;&gt;2.3. 常用命令&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-使用-conda-虚拟环境&#34;&gt;1. 使用 Conda 虚拟环境&lt;/h2&gt;
&lt;h3 id=&#34;11-安装-anaconda&#34;&gt;1.1. 安装 Anaconda&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.anaconda.com/anaconda/install/&#34;&gt;https://docs.anaconda.com/anaconda/install/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -O https://repo.anaconda.com/archive/Anaconda3-2025.06-0-Linux-x86_64.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bash ~/Anaconda3-2025.06-0-Linux-x86_64.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置默认是否进入base环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda config --set auto_activate_base True
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda config --set auto_activate_base False
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 手动初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; &amp;lt;PATH_TO_CONDA&amp;gt;/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda init --all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 更新Conda环境&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda update --all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-解决-glibcxx-not-found-问题&#34;&gt;1.2. 解决 GLIBCXX not found 问题&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看系统 libstdcxx 版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;strings /usr/lib/x86_64-linux-gnu/libstdc++.so.6 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep GLIBCXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查询 conda libstdcxx 版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/anaconda3/envs/xinference/lib/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;strings libstdc++.so.6&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep GLIBCXX
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 升级 conda libstdcxx 版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install conda-forge::libstdcxx-ng --update-deps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install conda-forge::libgcc-ng --update-deps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 或者做软链接&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm libstdc++.so.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 libstdc++.so.6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-常用-conda-命令&#34;&gt;1.3. 常用 conda 命令&lt;/h3&gt;
&lt;p&gt;conda 会检查当前环境安装的 Python 版本，并仅安装与该 Python 版本兼容的包。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda env list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 搜索&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda search &amp;lt;PACKAGE&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda search &amp;lt;CHANNEL&amp;gt;::&amp;lt;PACKAGE&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda search python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 新建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name &amp;lt;ENVIRONMENT&amp;gt; &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;lt;VERSION&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name python311 &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;3.11
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name pytorch251_cu126 --clone python311
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda create --name xinference --clone pytorch251_cu126
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 激活、退出、删除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda activate xinference
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda deactivate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda env remove --name xinference
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 导出、导入&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda env &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; --name pytorch251 &amp;gt; pytorch251.yml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda env create -f pytorch251.yml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-conda-和-pip-区别&#34;&gt;1.4. conda 和 pip 区别&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;conda 可以管理非python包，pip只能管理python包。&lt;/li&gt;
&lt;li&gt;conda 可以用来创建虚拟环境，pip不能，需要依赖virtualenv之类的包。&lt;/li&gt;
&lt;li&gt;conda 安装的包是编译好的二进制文件，pip安装的包是wheel或源码，需要解禁依赖问题。&lt;/li&gt;
&lt;li&gt;conda 安装的包会统一下载到当前虚拟环境对应的目录下，下载一次多次安装，pip是直接下载到对应环境中。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;15-通过-conda-安装&#34;&gt;1.5. 通过 conda 安装&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.anaconda.com/working-with-conda/packages/install-packages/&#34;&gt;https://docs.anaconda.com/working-with-conda/packages/install-packages/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 全局代理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ~/.condarc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_servers:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    http: http://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    https: http://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install &amp;lt;PACKAGE&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install &amp;lt;PACKAGE&amp;gt; --name &amp;lt;ENVIRONMENT&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install &amp;lt;PACKAGE_PATH/PACKAGE&amp;gt;.conda
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;conda install conda-forge::transformers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;16-通过-pip-安装包&#34;&gt;1.6. 通过 pip 安装包&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.anaconda.com/working-with-conda/packages/pip-install/&#34;&gt;https://docs.anaconda.com/working-with-conda/packages/pip-install/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 全局代理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; global.proxy http://127.0.0.1:7890
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装包&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install &amp;lt;PACKAGE&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-使用-uv-虚拟环境&#34;&gt;2. 使用 uv 虚拟环境&lt;/h2&gt;
&lt;h3 id=&#34;21-安装-uv&#34;&gt;2.1. 安装 uv&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.astral.sh/uv/getting-started/installation/&#34;&gt;https://docs.astral.sh/uv/getting-started/installation/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -LsSf https://astral.sh/uv/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$HOME&lt;/span&gt;/.local/bin/env
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Shell 自动补全&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eval &amp;#34;$(uv generate-shell-completion bash)&amp;#34;&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装 python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv python list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv python install 3.13&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-镜像设置&#34;&gt;2.2. 镜像设置&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.astral.sh/uv/reference/settings&#34;&gt;https://docs.astral.sh/uv/reference/settings&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;vim ~/.config/uv/uv.toml&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt;index&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;url&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-常用命令&#34;&gt;2.3. 常用命令&lt;/h3&gt;
&lt;p&gt;默认缓存目录：&lt;code&gt;$HOME/.cache/uv&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;安装包： &lt;a href=&#34;https://docs.astral.sh/uv/pip/packages&#34;&gt;https://docs.astral.sh/uv/pip/packages&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置代理&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HTTPS_PROXY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.60.181:7890
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HTTP_PROXY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://192.168.60.181:7890
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;UV_HTTP_TIMEOUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 新建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uv venv pytorch --python 3.12 --seed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; pytorch/bin/activate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 退出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deactivate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>LLM 本地化部署1：安装 CUDA 环境</title>
        <link>https://www.bg7pbp.com/p/llm-deploy-cuda/</link>
        <pubDate>Mon, 25 Aug 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/llm-deploy-cuda/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%AE%89%E8%A3%85-cuda-toolkit&#34;&gt;1. 安装 CUDA Toolkit&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E6%A3%80%E6%9F%A5-cuda-%E6%94%AF%E6%8C%81&#34;&gt;1.1. 检查 CUDA 支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%9C%A8%E7%BA%BF%E5%AE%89%E8%A3%85%E6%96%B0%E7%89%88%E6%9C%AC&#34;&gt;1.2. 在线安装（新版本）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85%E6%97%A7%E7%89%88%E6%9C%AC&#34;&gt;1.3. 离线安装（旧版本）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#131-%E4%B8%8B%E8%BD%BD%E5%AE%89%E8%A3%85%E5%8C%85&#34;&gt;1.3.1. 下载安装包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#132-%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE&#34;&gt;1.3.2. 环境设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#133-%E6%A3%80%E6%9F%A5%E5%8D%B8%E8%BD%BD&#34;&gt;1.3.3. 检查卸载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E5%AE%89%E8%A3%85-container-toolkit&#34;&gt;2. 安装 Container Toolkit&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85-docker&#34;&gt;2.1. 安装 Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85-container-toolkit&#34;&gt;2.2. 安装 container-toolkit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E9%85%8D%E7%BD%AE-docker-%E8%BF%90%E8%A1%8C%E6%97%B6&#34;&gt;2.3. 配置 Docker 运行时&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-安装-cuda-toolkit&#34;&gt;1. 安装 CUDA Toolkit&lt;/h2&gt;
&lt;h3 id=&#34;11-检查-cuda-支持&#34;&gt;1.1. 检查 CUDA 支持&lt;/h3&gt;
&lt;p&gt;首先，确保你的 GPU 支持 CUDA&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.nvidia.com/cuda-gpus&#34;&gt;https://developer.nvidia.com/cuda-gpus&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;12-在线安装新版本&#34;&gt;1.2. 在线安装（新版本）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.nvidia.com/cuda-downloads&#34;&gt;https://developer.nvidia.com/cuda-downloads&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# cu13.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2404/x86_64/cuda-keyring_1.1-1_all.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dpkg -i cuda-keyring_1.1-1_all.deb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get -y install cuda-toolkit-13-0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install -y cuda-drivers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;注：最新版 cu13 存在非常非常多的兼容问题，大量第三方框架没有适配，不推荐安装。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;13-离线安装旧版本&#34;&gt;1.3. 离线安装（旧版本）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://developer.nvidia.com/cuda-toolkit-archive&#34;&gt;https://developer.nvidia.com/cuda-toolkit-archive&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;131-下载安装包&#34;&gt;1.3.1. 下载安装包&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# cuda 12.9 (ubuntu24.04)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# pytorch 最新稳定版适配到 cu129&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://pytorch.org/get-started/locally/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh cuda_12.9.1_575.57.08_linux.run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# cuda 12.4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# cu124 兼容性最好，但只能在 ubuntu22.4 中安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://developer.download.nvidia.com/compute/cuda/12.4.1/local_installers/cuda_12.4.1_550.54.15_linux.run
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh cuda_12.4.1_550.54.15_linux.run&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;注：若第一次安装失败，需重启后再安装。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;132-环境设置&#34;&gt;1.3.2. 环境设置&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo vim /etc/profile&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/cuda-12.9/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; PATH&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;133-检查卸载&#34;&gt;1.3.3. 检查卸载&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvidia-smi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cuda-uninstaller
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nvidia-uninstall&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-安装-container-toolkit&#34;&gt;2. 安装 Container Toolkit&lt;/h2&gt;
&lt;p&gt;NVIDIA Container Toolkit 是一组库和实用程序，使用户能够构建和运行 GPU 加速的容器。它目前包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;NVIDIA Container Runtime (&lt;code&gt;nvidia-container-runtime&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NVIDIA Container Toolkit CLI (&lt;code&gt;nvidia-ctk&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NVIDIA CDI Hooks (&lt;code&gt;nvidia-cdi-hook&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NVIDIA Container Runtime Hook (&lt;code&gt;nvidia-container-runtime-hook&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NVIDIA Container CLI (&lt;code&gt;nvidia-container-cli&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;NVIDIA Container Library (&lt;code&gt;libnvidia-container1&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;21-安装-docker&#34;&gt;2.1. 安装 Docker&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/engine/install/ubuntu/&#34;&gt;https://docs.docker.com/engine/install/ubuntu/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://code.wangyan.cloud/wangyan/docker-compose/raw/branch/main/shell-script/docker-setup-ubuntu-aliyun.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装-container-toolkit&#34;&gt;2.2. 安装 container-toolkit&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html&#34;&gt;https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install -y nvidia-container-toolkit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-配置-docker-运行时&#34;&gt;2.3. 配置 Docker 运行时&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo nvidia-ctk runtime configure --runtime&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;docker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>PHP 8 从源码安装与配置</title>
        <link>https://www.bg7pbp.com/p/php8-install-source/</link>
        <pubDate>Wed, 16 Jul 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php8-install-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E4%B8%80%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;1. 一、安装依赖&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7%E5%8F%8A%E4%BE%9D%E8%B5%96&#34;&gt;1.1. 安装编译工具及依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85-libiconv&#34;&gt;1.2. 安装 libiconv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%AE%89%E8%A3%85-libzip%E5%B7%B2%E8%BF%87%E6%97%B6%E9%80%89%E5%81%9A&#34;&gt;1.3. 安装 libzip（已过时，选做）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#131-%E9%80%9A%E8%BF%87-rpm-%E5%AE%89%E8%A3%85&#34;&gt;1.3.1. 通过 RPM 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#132-%E6%89%8B%E5%8A%A8%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;1.3.2. 手动编译安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E5%AE%89%E8%A3%85-imap%E5%B7%B2%E8%BF%87%E6%97%B6%E9%80%89%E5%81%9A&#34;&gt;1.4. 安装 imap（已过时，选做）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E5%85%B6%E4%BB%96-%E5%B7%B2%E8%BF%87%E6%97%B6%E9%80%89%E5%81%9A&#34;&gt;1.5. 其他 （已过时，选做）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E4%BA%8C%E5%AE%89%E8%A3%85-php&#34;&gt;2. 二、安装 PHP&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E4%B8%8B%E8%BD%BD%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;2.1. 下载软件包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E6%96%B0%E5%A2%9E%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84-%E9%80%89%E5%81%9A&#34;&gt;2.2. 新增用户和组 (选做)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;2.3. 编译安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E4%B8%89php-%E9%85%8D%E7%BD%AE&#34;&gt;3. 三、php 配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-php-fpmconf-%E8%AE%BE%E7%BD%AE&#34;&gt;3.1. php-fpm.conf 设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-wwwconf-%E8%AE%BE%E7%BD%AE&#34;&gt;3.2. www.conf 设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-phpini-%E8%AE%BE%E7%BD%AE&#34;&gt;3.3. php.ini 设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8&#34;&gt;3.4. 开机自启动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F&#34;&gt;3.5. 配置环境变量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E5%9B%9B%E5%AE%89%E8%A3%85-php-%E6%89%A9%E5%B1%95&#34;&gt;4. 四、安装 PHP 扩展&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-phpredis&#34;&gt;4.1. PHPRedis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-imagemagick&#34;&gt;4.2. ImageMagick&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-phpini%E6%B7%BB-%E5%8A%A0%E6%89%A9%E5%B1%95&#34;&gt;4.3. php.ini添 加扩展&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5-%E4%BA%94%E5%AE%89%E8%A3%85-composer&#34;&gt;5. 五、安装 Composer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-一安装依赖&#34;&gt;1. 一、安装依赖&lt;/h2&gt;
&lt;h3 id=&#34;11-安装编译工具及依赖&#34;&gt;1.1. 安装编译工具及依赖&lt;/h3&gt;
&lt;p&gt;CentOS Stream 8/9&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#sudo yum groupinstall &amp;#39;Development Tools&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    gcc gcc-c++ autoconf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    systemd-devel openssl-devel libcurl-devel &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    oniguruma-devel zlib-devel &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    libwebp-devel libjpeg-turbo-devel freetype-devel libpng-devel &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    libxml2-devel libxslt-devel &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    libsq3-devel libzip-devel file-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Debian/Ubuntu&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install -y pkg-config gcc autoconf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	libsystemd-dev libssl-dev libcurl4-openssl-dev &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	libonig-dev libzip-dev libsqlite3-dev &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	libwebp-dev libjpeg-dev libfreetype6-dev libpng-dev &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	libxml2-dev  libxslt-dev libgmp-dev libsodium-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装-libiconv&#34;&gt;1.2. 安装 libiconv&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.18.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libiconv-1.18.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libiconv-1.18 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/lib/libiconv.so.2.7.0 /usr/lib64/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-安装-libzip已过时选做&#34;&gt;1.3. 安装 libzip（已过时，选做）&lt;/h3&gt;
&lt;h4 id=&#34;131-通过-rpm-安装&#34;&gt;1.3.1. 通过 RPM 安装&lt;/h4&gt;
&lt;p&gt;&lt;a href=&#34;https://pkgs.org/download/libzip&#34;&gt;https://pkgs.org/download/libzip&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum remove -y libzip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh http://rpms.remirepo.net/enterprise/7/remi/x86_64//libzip-last-1.1.3-1.el7.remi.x86_64.rpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh http://rpms.remirepo.net/enterprise/7/remi/x86_64//libzip-last-devel-1.1.3-1.el7.remi.x86_64.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;132-手动编译安装&#34;&gt;1.3.2. 手动编译安装&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;安装 cmake&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://cmake.org/files/v3.26/cmake-3.26.1-linux-x86_64.sh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x cmake-3.26.1-linux-x86_64.sh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./cmake-3.26.1-linux-x86_64.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv cmake-3.26.1-linux-x86_64 /usr/local/cmake
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/cmake/bin/cmake /usr/local/bin/cmake&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;编译安装 libzip&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://libzip.org/download/libzip-1.10.0.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libzip-1.10.0.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libzip-1.10.0 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; build &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cmake .. &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;更新 lib&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/lib64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;/usr/local/lib
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;/usr/lib
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;/usr/lib64&amp;#39;&lt;/span&gt;&amp;gt;&amp;gt;/etc/ld.so.conf.d/local.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-安装-imap已过时选做&#34;&gt;1.4. 安装 imap（已过时，选做）&lt;/h3&gt;
&lt;p&gt;centOS7 已经没有了 &lt;code&gt;libc-client&lt;/code&gt;，需要编译安装&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注：epel 源可以找到 libc-client-devel uw-imap-devel uw-imap-static uw-imap-utils，但直接安装还是会出现一些问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编译安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf imap-2007f.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; imap-2007f
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make lr5 &lt;span class=&#34;nv&#34;&gt;PASSWDTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;std &lt;span class=&#34;nv&#34;&gt;SSLTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;unix.nopwd &lt;span class=&#34;nv&#34;&gt;EXTRACFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-fPIC &lt;span class=&#34;nv&#34;&gt;IP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/local/imap-2007f/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;include,lib,c-client&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.h /usr/local/imap-2007f/include/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.c /usr/local/imap-2007f/lib/  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.c /usr/local/imap-2007f/c-client/  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/c-client.a /usr/local/imap-2007f/c-client/libc-client.a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;备注：在 64 位下编译时 make 参数需要带 EXTRACFLAGS=-fPIC ，在 32 位下则不需要。&lt;/p&gt;
&lt;h3 id=&#34;15-其他-已过时选做&#34;&gt;1.5. 其他 （已过时，选做）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y libicu-devel libmcrypt-devel pam-devel bison bison-devel re2c&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;libmcrypt-devel&lt;/code&gt; 需要使用 epel 源&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnf config-manager --set-enabled powertools
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnf install epel-release epel-next-release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-二安装-php&#34;&gt;2. 二、安装 PHP&lt;/h2&gt;
&lt;h3 id=&#34;21-下载软件包&#34;&gt;2.1. 下载软件包&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/packages &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/packages &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://us.php.net/distributions/php-8.4.10.tar.gz  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar zxf php-8.4.10.tar.gz -C /usr/local/src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-新增用户和组-选做&#34;&gt;2.2. 新增用户和组 (选做)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo addgroup --system --gid &lt;span class=&#34;m&#34;&gt;37&lt;/span&gt; www-data  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --home /usr/local/php &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --shell /bin/false &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --uid &lt;span class=&#34;m&#34;&gt;37&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gecos &lt;span class=&#34;s1&#34;&gt;&amp;#39;PHP Server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gid &lt;span class=&#34;m&#34;&gt;37&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --disabled-password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    www-data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd --system www-data  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --shell /bin/bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --comment &lt;span class=&#34;s1&#34;&gt;&amp;#39;PHP server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --gid www-data &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --home-dir /usr/local/php &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --create-home &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   www-data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-编译安装&#34;&gt;2.3. 编译安装&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/src/php-8* &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./configure &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-config-file-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/etc  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-config-file-scan-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/conf.d  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-fpm  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-fpm-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-fpm-group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-fpm-systemd  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-openssl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-zlib &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-bcmath &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-calendar &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-curl  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-exif &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-ftp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-gd  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-webp  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-jpeg  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-freetype  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-gettext  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-gmp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-iconv&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-mhash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-mbstring &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-mysqli&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-pcntl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-pdo-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-sockets &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-xsl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-zip &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --enable-mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --with-sodium&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#make ZEND_EXTRA_LIBS=&amp;#39;-liconv&amp;#39; -j4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make -j4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-三php-配置&#34;&gt;3. 三、php 配置&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://segmentfault.com/a/1190000004190979&#34;&gt;PHP-FPM 配置 &amp;amp; 优化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://segmentfault.com/a/1190000000630270&#34;&gt;PHP-FPM子进程数量应该如何设置？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;31-php-fpmconf-设置&#34;&gt;3.1. php-fpm.conf 设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/log/php-fpm/ &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/local/php/etc/php-fpm.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;pid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /var/run/php-fpm.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;error_log&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /var/log/php-fpm/error.log&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-wwwconf-设置&#34;&gt;3.2. www.conf 设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/local/php/etc/php-fpm.d/www.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;plain&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[www]
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;user = www-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;group = www-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen = /dev/shm/php-fpm.sock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen.allowed_clients = 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen.owner = www-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen.group = www-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen.mode = 0660
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen.allowed_clients = 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm = dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.max_children = 30
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.start_servers = 15
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.min_spare_servers = 10
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.max_spare_servers = 20
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.max_requests = 1024
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.status_path = /status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ping.path = /ping
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;access.log = /var/log/php-fpm/$pool.access.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slowlog = /var/log/php-fpm/$pool.log.slow
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;request_slowlog_timeout = 10s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;request_terminate_timeout = 60&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-phpini-设置&#34;&gt;3.3. php.ini 设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp php.ini-production /usr/local/php/etc/php.ini&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*date.timezone =.*|date.timezone = PRC|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*memory_limit =.*|memory_limit = 1024M|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*upload_max_filesize =.*|upload_max_filesize = 2G|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*max_file_uploads =.*|max_file_uploads = 50|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*post_max_size =.*|post_max_size = 2G|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-开机自启动&#34;&gt;3.4. 开机自启动&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp sapi/fpm/php-fpm.service  /usr/lib/systemd/system/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now php-fpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35-配置环境变量&#34;&gt;3.5. 配置环境变量&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin:/usr/local/php/bin:/usr/local/nginx/sbin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; PATH&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; /etc/profile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-四安装-php-扩展&#34;&gt;4. 四、安装 PHP 扩展&lt;/h2&gt;
&lt;h3 id=&#34;41-phpredis&#34;&gt;4.1. PHPRedis&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/phpredis/phpredis.git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; phpredis &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/php/bin/phpize &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --with-php-config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/bin/php-config &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-imagemagick&#34;&gt;4.2. ImageMagick&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://pecl.php.net/package/imagick&#34;&gt;https://pecl.php.net/package/imagick&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;安装依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install autoconf gcc gcc-c++ ImageMagick-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下载安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://pecl.php.net/get/imagick-3.7.0.tgz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xf imagick-3.7.0.tgz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; imagick-3.7.0 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/php/bin/phpize &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --with-php-config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/bin/php-config &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-phpini添-加扩展&#34;&gt;4.3. php.ini添 加扩展&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/local/php/etc/php.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;redis
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;zend_extension&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;opcache
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart php-fpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;5-五安装-composer&#34;&gt;5. 五、安装 Composer&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -O https://getcomposer.org/composer.phar &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv composer.phar /usr/local/bin/composer &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/composer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Nginx 从软件源安装与配置</title>
        <link>https://www.bg7pbp.com/p/nginx-install-repository/</link>
        <pubDate>Wed, 14 May 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-install-repository/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85&#34;&gt;一、安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;1.1. 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E6%B7%BB%E5%8A%A0%E8%BD%AF%E4%BB%B6%E6%BA%90&#34;&gt;1.2. 添加软件源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%AE%89%E8%A3%85%E8%BF%90%E8%A1%8C&#34;&gt;1.3. 安装运行&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E9%98%B2%E7%81%AB%E5%A2%99%E8%AE%BE%E7%BD%AE&#34;&gt;1.4. 防火墙设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E9%85%8D%E7%BD%AE&#34;&gt;二、配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%BB%98%E8%AE%A4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84&#34;&gt;默认配置文件路径&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B0%E5%BB%BA%E9%A2%9D%E5%A4%96%E9%85%8D%E7%BD%AE%E7%9B%AE%E5%BD%95&#34;&gt;新建额外配置目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ssl-%E8%AF%81%E4%B9%A6%E7%9B%AE%E5%BD%95&#34;&gt;SSL 证书目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BF%90%E8%A1%8C-nginx&#34;&gt;运行 Nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装&#34;&gt;一、安装&lt;/h2&gt;
&lt;h3 id=&#34;11-安装依赖&#34;&gt;1.1. 安装依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install curl gnupg2 ca-certificates lsb-release ubuntu-keyring
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install curl gnupg2 ca-certificates lsb-release debian-archive-keyring
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Fedora/RHEL/CentOS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install yum-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-添加软件源&#34;&gt;1.2. 添加软件源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/yum.repos.d/nginx.repo&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[nginx-stable]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=nginx stable repo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=https://nginx.org/keys/nginx_signing.key
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;module_hotfixes=true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[nginx-mainline]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=nginx mainline repo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=https://nginx.org/keys/nginx_signing.key
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;module_hotfixes=true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://nginx.org/keys/nginx_signing.key &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; gpg --dearmor &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg &amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Debian&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;http://nginx.org/packages/debian `lsb_release -cs` nginx&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/nginx.list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Ubuntu&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;http://nginx.org/packages/ubuntu `lsb_release -cs` nginx&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /etc/apt/sources.list.d/nginx.list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-安装运行&#34;&gt;1.3. 安装运行&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum-config-manager --enable nginx-mainline
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-防火墙设置&#34;&gt;1.4. 防火墙设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二配置&#34;&gt;二、配置&lt;/h2&gt;
&lt;h3 id=&#34;默认配置文件路径&#34;&gt;默认配置文件路径&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;默认网站根目录 &lt;code&gt;/usr/share/nginx/html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;默认网站根配置文件 &lt;code&gt;/etc/nginx/conf.d/default.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;其他网站配置文件 &lt;code&gt;/etc/nginx/conf.d/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;全局配置文件 &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;新建额外配置目录&#34;&gt;新建额外配置目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /etc/nginx/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;sites-available,sites-enabled,conf.d,rewrite-rules,ssl-certs&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /etc/nginx/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;sites-available,sites-enabled,conf.d,rewrite-rules,ssl-certs&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# vim /etc/nginx/nginc.conf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nclude /etc/nginx/sites-enabled/*.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;ssl-证书目录&#34;&gt;SSL 证书目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;777&lt;/span&gt; /etc/nginx/ssl-certs &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod o+t /etc/nginx/ssl-certs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl dhparam -out /etc/nginx/ssl-certs/dhparam.pem &lt;span class=&#34;m&#34;&gt;2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl https://ssl-config.mozilla.org/ffdhe2048.txt &amp;gt; /etc/nginx/ssl-certs/dhparam.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;运行-nginx&#34;&gt;运行 Nginx&lt;/h3&gt;
&lt;p&gt;查看主机IP地址&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip addr show eth0 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep inet &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{ print $2; }&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\/.*$//&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>OpenSSL 生成自签署证书</title>
        <link>https://www.bg7pbp.com/p/openssl-self-signed-certificate/</link>
        <pubDate>Wed, 14 May 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/openssl-self-signed-certificate/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87&#34;&gt;一、准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%87%AA%E7%AD%BE%E7%BD%B2-ca-%E6%A0%B9%E8%AF%81%E4%B9%A6&#34;&gt;二、自签署 CA 根证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%88%9B%E5%BB%BA-ca-key&#34;&gt;2.1. 创建 &lt;code&gt;CA KEY&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%88%9B%E5%BB%BA-ca-%E8%AF%B7%E6%B1%82%E6%96%87%E4%BB%B6&#34;&gt;2.2. 创建 CA 请求文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%88%9B%E5%BB%BA-ca-%E6%A0%B9%E8%AF%81%E4%B9%A6&#34;&gt;2.3. 创建 CA 根证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E6%9F%A5%E7%9C%8B-ca-%E6%A0%B9%E8%AF%81%E4%B9%A6%E8%AF%A6%E6%83%85%E5%8F%AF%E9%80%89&#34;&gt;2.4. 查看 CA 根证书详情（可选）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%87%AA%E7%AD%BE%E7%BD%B2%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6&#34;&gt;三、自签署中间证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%88%9B%E5%BB%BA%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6key&#34;&gt;3.1. 创建中间证书&lt;code&gt;KEY&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%88%9B%E5%BB%BA%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6%E8%AF%B7%E6%B1%82%E6%96%87%E4%BB%B6&#34;&gt;3.2. 创建中间证书请求文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%88%9B%E5%BB%BA%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6&#34;&gt;3.3. 创建中间证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E6%9F%A5%E7%9C%8B%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6%E8%AF%A6%E6%83%85%E5%8F%AF%E9%80%89&#34;&gt;3.4. 查看中间证书详情（可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E5%90%88%E6%88%90%E4%B8%AD%E9%97%B4%E8%AF%81%E4%B9%A6%E9%93%BE%E5%8F%AF%E9%80%89&#34;&gt;3.5. 合成中间证书链（可选）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E8%87%AA%E7%AD%BE%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;四、自签署服务器证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6key&#34;&gt;4.1. 创建服务器证书&lt;code&gt;KEY&lt;/code&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6%E8%AF%B7%E6%B1%82%E6%96%87%E4%BB%B6&#34;&gt;4.2. 创建服务器证书请求文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E5%88%9B%E5%BB%BA%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;4.3. 创建服务器证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-%E6%9F%A5%E7%9C%8B%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6%E8%AF%A6%E6%83%85%E5%8F%AF%E9%80%89&#34;&gt;4.4. 查看服务器证书详情（可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#45-%E5%90%88%E6%88%90%E5%AE%8C%E6%95%B4%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6%E5%8F%AF%E9%80%89&#34;&gt;4.5. 合成完整服务器证书（可选）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E8%87%AA%E7%AD%BE%E7%BD%B2%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%81%E4%B9%A6%E5%8F%AF%E9%80%89&#34;&gt;五、自签署客户端证书（可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E5%90%8A%E9%94%80%E8%AF%81%E4%B9%A6-crl%E5%8F%AF%E9%80%89&#34;&gt;六、吊销证书 CRL（可选）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BA%E8%AF%81%E4%B9%A6%E5%90%8A%E9%94%80%E5%88%97%E8%A1%A8&#34;&gt;创建证书吊销列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%90%8A%E9%94%80%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%81&#34;&gt;吊销客户端证&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83ocsp-%E8%AF%81%E4%B9%A6%E6%9F%A5%E8%AF%A2%E5%8F%AF%E9%80%89&#34;&gt;七、OCSP 证书查询（可选）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BAocsp%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;创建OCSP服务器证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BF%90%E8%A1%8Cocsp%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;运行OCSP服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BF%9E%E6%8E%A5ocsp%E6%A3%80%E6%9F%A5%E8%AF%81%E4%B9%A6%E7%8A%B6%E6%80%81&#34;&gt;连接OCSP检查证书状态&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一准备&#34;&gt;一、准备&lt;/h2&gt;
&lt;p&gt;克隆项目&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://code.wangyan.cloud//wangyan/gen-ssl-cert.git /tmp/gen-ssl-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;初始化工作目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /tmp/gen-ssl-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make init&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;分别修改 &lt;code&gt;ica.cnf&lt;/code&gt; 和 &lt;code&gt;ca.cnf&lt;/code&gt; 配置文件中的 &lt;code&gt;Custom Section&lt;/code&gt;单元，自定义服务器域名和IP地址&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; alt_section &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DNS.1                   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DNS.2                   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; *.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IP.1                    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 119.29.17.197
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;IP.2                    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 101.32.204.113
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;crl_section&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;URI&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; http://safe.wangyan.cloud//crl/ica-crl.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ocsp_section&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;OCSP&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;URI&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; http://ocsp.wangyan.cloud/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;Makefile&lt;/code&gt; 文件中，查找 &lt;code&gt;subjectAltName&lt;/code&gt; 和 &lt;code&gt;subj&lt;/code&gt; 部分，自定义服务器域名和IP地址&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-subj &lt;span class=&#34;s2&#34;&gt;&amp;#34;/C=CN/ST=Guangdong/L=Zhuhai/O=Selfsigned/CN=wangyan.cloud/&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-addext &lt;span class=&#34;s2&#34;&gt;&amp;#34;subjectAltName = IP:119.29.17.197,DNS:wangyan.cloud/&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二自签署-ca-根证书&#34;&gt;二、自签署 CA 根证书&lt;/h2&gt;
&lt;h3 id=&#34;21-创建-ca-key&#34;&gt;2.1. 创建 &lt;code&gt;CA KEY&lt;/code&gt;&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-创建-ca-请求文件&#34;&gt;2.2. 创建 CA 请求文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-创建-ca-根证书&#34;&gt;2.3. 创建 CA 根证书&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 根据上面请求文件，生成CA证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24-查看-ca-根证书详情可选&#34;&gt;2.4. 查看 CA 根证书详情（可选）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make view-ca-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三自签署中间证书&#34;&gt;三、自签署中间证书&lt;/h2&gt;
&lt;h3 id=&#34;31-创建中间证书key&#34;&gt;3.1. 创建中间证书&lt;code&gt;KEY&lt;/code&gt;&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-创建中间证书请求文件&#34;&gt;3.2. 创建中间证书请求文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-创建中间证书&#34;&gt;3.3. 创建中间证书&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-查看中间证书详情可选&#34;&gt;3.4. 查看中间证书详情（可选）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make view-ica-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35-合成中间证书链可选&#34;&gt;3.5. 合成中间证书链（可选）&lt;/h3&gt;
&lt;p&gt;将CA证书与中间证书合并&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-chain&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四自签署服务器证书&#34;&gt;四、自签署服务器证书&lt;/h2&gt;
&lt;h3 id=&#34;41-创建服务器证书key&#34;&gt;4.1. 创建服务器证书&lt;code&gt;KEY&lt;/code&gt;&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-key&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-创建服务器证书请求文件&#34;&gt;4.2. 创建服务器证书请求文件&lt;/h3&gt;
&lt;p&gt;修改 &lt;code&gt;Makefile&lt;/code&gt; 文件 &lt;code&gt;gen-server-csr&lt;/code&gt; 单元的值&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将域名 wangyan.cloud/ 和 IP 地址改成自己服务器的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl req -config ica.cnf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-new -sha256 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -key ica/private/server-key.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -subj &lt;span class=&#34;s2&#34;&gt;&amp;#34;/C=CN/ST=Guangdong/L=Zhuhai/O=Selfsigned/CN=wangyan.cloud/&amp;#34;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    -out ica/csr/server-csr.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	-addext &lt;span class=&#34;s2&#34;&gt;&amp;#34;subjectAltName = IP:119.29.17.197,IP:101.32.204.113,DNS:wangyan.cloud/,DNS:*.wangyan.cloud/&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;生成证书请求文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-创建服务器证书&#34;&gt;4.3. 创建服务器证书&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-查看服务器证书详情可选&#34;&gt;4.4. 查看服务器证书详情（可选）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make view-server-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;45-合成完整服务器证书可选&#34;&gt;4.5. 合成完整服务器证书（可选）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五自签署客户端证书可选&#34;&gt;五、自签署客户端证书（可选）&lt;/h2&gt;
&lt;p&gt;客户端证书与服务器证书生成过程一致，不再展开。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 同样要修改Makefile 文件 gen-client-csr 单元的值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make view-client-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建 PKCS12 证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-pkcs12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;客户端证书与服务器证书区别体现在用途上，详见 &lt;code&gt;ica.cnf&lt;/code&gt; 配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The Client Certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; usr_cert &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;keyUsage&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment, keyAgreement
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extendedKeyUsage&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; clientAuth,codeSigning,emailProtection,timeStamping
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The Server Certificate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; server_cert &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;keyUsage&lt;/span&gt;                &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; digitalSignature, nonRepudiation, keyAgreement
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extendedKeyUsage&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; serverAuth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;六吊销证书-crl可选&#34;&gt;六、吊销证书 CRL（可选）&lt;/h2&gt;
&lt;h3 id=&#34;创建证书吊销列表&#34;&gt;创建证书吊销列表&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-crl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;吊销客户端证&#34;&gt;吊销客户端证&lt;/h3&gt;
&lt;p&gt;吊销上面生成的客户端证书 &lt;code&gt;client-cert.crt&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-revoke-client&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;七ocsp-证书查询可选&#34;&gt;七、OCSP 证书查询（可选）&lt;/h2&gt;
&lt;h3 id=&#34;创建ocsp服务器证书&#34;&gt;创建OCSP服务器证书&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ocsp-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 修改 Makefile 文件 gen-ocsp-csr 单元的值,自定义域名和IP地址。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ocsp-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ocsp-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;运行ocsp服务器&#34;&gt;运行OCSP服务器&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make run-ocsp-server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;连接ocsp检查证书状态&#34;&gt;连接OCSP检查证书状态&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make chk-ocsp-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>使用 Docker Compose 安装 Gitea</title>
        <link>https://www.bg7pbp.com/p/gitea-install-docker-compose/</link>
        <pubDate>Fri, 21 Mar 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/gitea-install-docker-compose/</guid>
        <description>&lt;p&gt;Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期，他都能够高效而轻松的帮助团队和开发者。包括 Git 托管、代码审查、团队协作、软件包注册和 CI/CD。&lt;/p&gt;
&lt;p&gt;项目网址：&lt;a href=&#34;https://github.com/go-gitea/gitea&#34;&gt;https://github.com/go-gitea/gitea&lt;/a&gt;&lt;br&gt;
官方文档： &lt;a href=&#34;https://docs.gitea.com/zh-cn/&#34;&gt;https://docs.gitea.com/zh-cn/&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E9%95%9C%E5%83%8F%E9%80%89%E6%8B%A9&#34;&gt;1. 镜像选择&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2&#34;&gt;2. 安装部署&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E4%BD%BF%E7%94%A8-rootless-%E9%95%9C%E5%83%8F&#34;&gt;2.1. 使用 &lt;code&gt;rootless&lt;/code&gt; 镜像&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#211-%E5%88%9B%E5%BB%BA%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95&#34;&gt;2.1.1. 创建工作目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#212-%E5%88%9B%E5%BB%BA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.1.2. 创建配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#213-%E5%90%AF%E5%8A%A8%E8%BF%90%E8%A1%8C&#34;&gt;2.1.3. 启动运行&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E4%BD%BF%E7%94%A8-%E6%A0%87%E5%87%86-%E9%95%9C%E5%83%8F&#34;&gt;2.2. 使用 &lt;code&gt;标准&lt;/code&gt; 镜像&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#221-%E5%88%9B%E5%BB%BA%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95&#34;&gt;2.2.1. 创建工作目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#222-%E5%88%9B%E5%BB%BA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.2.2. 创建配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#223-%E5%90%AF%E5%8A%A8%E8%BF%90%E8%A1%8C&#34;&gt;2.2.3. 启动运行&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-ssh-%E5%AE%B9%E5%99%A8%E7%9B%B4%E9%80%9A&#34;&gt;3. SSH 容器直通&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%88%9B%E5%BB%BA-git-%E7%94%A8%E6%88%B7&#34;&gt;3.1. 创建 &lt;code&gt;git&lt;/code&gt; 用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E6%96%B9%E6%B3%95%E4%B8%80%E4%BD%BF%E7%94%A8-authorizedkeyscommand&#34;&gt;3.2. 方法一：使用 AuthorizedKeysCommand&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#321-docker-%E8%8E%B7%E5%8F%96-authorized_keys%E6%8E%A8%E8%8D%90&#34;&gt;3.2.1. Docker 获取 authorized_keys（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#322-ssh-%E8%8E%B7%E5%8F%96-authorized_keys%E4%BA%8C%E9%80%89%E4%B8%80&#34;&gt;3.2.2. SSH 获取 authorized_keys（二选一）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E6%96%B9%E6%B3%95%E4%BA%8C%E5%85%B1%E4%BA%AB-authorized_keys&#34;&gt;3.3. 方法二：共享 authorized_keys&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E8%BD%AC%E5%8F%91%E4%B8%BB%E6%9C%BA%E5%91%BD%E4%BB%A4%E5%88%B0%E5%AE%B9%E5%99%A8&#34;&gt;3.4. 转发主机命令到容器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#341-%E6%96%B9%E6%B3%951shell-%E6%96%B9%E5%BC%8F%E6%8E%A8%E8%8D%90&#34;&gt;3.4.1. 方法1：shell 方式（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#342-%E6%96%B9%E6%B3%952shim-%E6%96%B9%E5%BC%8F&#34;&gt;3.4.2. 方法2：Shim 方式&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-gitea-actions&#34;&gt;4. Gitea Actions&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-act-runner&#34;&gt;4.1. Act Runner&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#411-%E4%BD%BF%E7%94%A8%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6&#34;&gt;4.1.1. 使用二进制文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#412-%E4%BD%BF%E7%94%A8-docker-%E9%95%9C%E5%83%8F&#34;&gt;4.1.2. 使用 Docker 镜像&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-actions-demo&#34;&gt;4.2. Actions Demo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-镜像选择&#34;&gt;1. 镜像选择&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Gitea&lt;/code&gt; 提供的镜像包括 &lt;code&gt;标准&lt;/code&gt; 和 &lt;code&gt;rootless&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rootless&lt;/code&gt; 镜像使用 &lt;code&gt;Gitea&lt;/code&gt; 内部 SSH 功能来提供 Git 协议，不支持 &lt;code&gt;OpenSSH&lt;/code&gt;，不需要 &lt;code&gt;root&lt;/code&gt; 权限。&lt;/p&gt;
&lt;table&gt;
	&lt;thead&gt;
			&lt;tr&gt;
					&lt;th&gt;&lt;strong&gt;项目&lt;/strong&gt;&lt;/th&gt;
					&lt;th&gt;&lt;strong&gt;标准镜像&lt;/strong&gt;&lt;/th&gt;
					&lt;th&gt;&lt;strong&gt;rootless 镜像&lt;/strong&gt;&lt;/th&gt;
			&lt;/tr&gt;
	&lt;/thead&gt;
	&lt;tbody&gt;
			&lt;tr&gt;
					&lt;td&gt;执行用户&lt;/td&gt;
					&lt;td&gt;root&lt;/td&gt;
					&lt;td&gt;非 root&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ssh 端口&lt;/td&gt;
					&lt;td&gt;22&lt;/td&gt;
					&lt;td&gt;2222&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;git 用户与组&lt;/td&gt;
					&lt;td&gt;任意（由配置文件中指定）&lt;/td&gt;
					&lt;td&gt;1000:1000&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;openssh&lt;/td&gt;
					&lt;td&gt;支持&lt;/td&gt;
					&lt;td&gt;不支持&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;AppPath&lt;/td&gt;
					&lt;td&gt;/usr/local/bin/gitea&lt;/td&gt;
					&lt;td&gt;/usr/local/bin/gitea&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;WorkPath&lt;/td&gt;
					&lt;td&gt;/data/gitea&lt;/td&gt;
					&lt;td&gt;/var/lib/gitea&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;CustomPath&lt;/td&gt;
					&lt;td&gt;/data/gitea&lt;/td&gt;
					&lt;td&gt;/var/lib/gitea/custom&lt;/td&gt;
			&lt;/tr&gt;
			&lt;tr&gt;
					&lt;td&gt;ConfigFile&lt;/td&gt;
					&lt;td&gt;/data/gitea/conf/app.ini&lt;/td&gt;
					&lt;td&gt;/etc/gitea/app.ini&lt;/td&gt;
			&lt;/tr&gt;
	&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&#34;2-安装部署&#34;&gt;2. 安装部署&lt;/h2&gt;
&lt;h3 id=&#34;21-使用-rootless-镜像&#34;&gt;2.1. 使用 &lt;code&gt;rootless&lt;/code&gt; 镜像&lt;/h3&gt;
&lt;h4 id=&#34;211-创建工作目录&#34;&gt;2.1.1. 创建工作目录&lt;/h4&gt;
&lt;p&gt;docker 自动创建的目录是&lt;code&gt;root&lt;/code&gt; 权限，因此需要手动创建目录，以确保权限一致。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;rootless&lt;/code&gt; 镜像内的&lt;code&gt;git&lt;/code&gt; 用户与组的id是&lt;code&gt;1000:1000&lt;/code&gt; ，所以建议主机也使用&lt;code&gt;1000:1000&lt;/code&gt; 。&lt;/p&gt;
&lt;p&gt;当然了，不一致也没关系，但需要通过&lt;code&gt;user: xxxx:xxxx&lt;/code&gt; 指定具体值。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir data config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown 1000:1000 data config&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;212-创建配置文件&#34;&gt;2.1.2. 创建配置文件&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;特别注意：&lt;code&gt;data&lt;/code&gt; &lt;code&gt;config&lt;/code&gt; 文件夹应由&lt;code&gt;user: xxxx:xxxx&lt;/code&gt;指定的用户所有，以确保主机能够正常访问这两个文件夹。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  server:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: gitea/gitea:1.21-rootless
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    hostname: gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart: always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    user: 1000:1000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - ./data:/var/lib/gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - ./config:/etc/gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/timezone:/etc/timezone:ro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/localtime:/etc/localtime:ro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:3000:3000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:2222:2222&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;213-启动运行&#34;&gt;2.1.3. 启动运行&lt;/h4&gt;
&lt;p&gt;注意：如果在 HTTP 上使用的是非 3000 端口，请将 app.ini 更改为匹配 &lt;code&gt;LOCAL_ROOT_URL = http://localhost:3000/&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs -f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-使用-标准-镜像&#34;&gt;2.2. 使用 &lt;code&gt;标准&lt;/code&gt; 镜像&lt;/h3&gt;
&lt;h4 id=&#34;221-创建工作目录&#34;&gt;2.2.1. 创建工作目录&lt;/h4&gt;
&lt;p&gt;docker 自动创建的目录是&lt;code&gt;root&lt;/code&gt; 权限，因此要手动创建目录。&lt;/p&gt;
&lt;p&gt;与 &lt;code&gt;rootless&lt;/code&gt; 镜像不同，标准镜像内的 &lt;code&gt;git&lt;/code&gt; 用户id可以通过环境变量指定，自由度更高。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown 1000:1000 data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;222-创建配置文件&#34;&gt;2.2.2. 创建配置文件&lt;/h4&gt;
&lt;p&gt;注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;data&lt;/code&gt; 文件夹应由 &lt;code&gt;environment&lt;/code&gt; 指定的用户所有。&lt;/li&gt;
&lt;li&gt;只需挂载一个路径 &lt;code&gt;/data&lt;/code&gt; ，相比&lt;code&gt;rootless&lt;/code&gt; 更简单&lt;/li&gt;
&lt;li&gt;支持 &lt;code&gt;openssh&lt;/code&gt; 标准 &lt;code&gt;22&lt;/code&gt; 端口&lt;/li&gt;
&lt;li&gt;特别注意：生成的 &lt;code&gt;ssh&lt;/code&gt; 文件夹是 &lt;code&gt;root&lt;/code&gt; 权限的，因此主机要有 &lt;code&gt;root&lt;/code&gt; 权限。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  server:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: gitea/gitea:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    hostname: gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart: always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    environment:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__PROTOCOL=http&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__DOMAIN=code.wangyan.cloud/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__ROOT_URL=https://code.wangyan.cloud/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__HTTP_ADDR=0.0.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__HTTP_PORT=3000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__SSH_DOMAIN=wangyan.cloud/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__SSH_PORT=22&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA___server__LFS_START_SERVER=true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__database__DB_TYPE=mysql&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__database__HOST=127.0.0.1:3306&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__database__NAME=gitea&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__database__USER=gitea&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__database__PASSWD=123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__ENABLED=true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__PROTOCOL=smtp+starttls&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__SMTP_ADDR=smtp-mail.outlook.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__SMTP_PORT=587&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__FROM=&amp;#34;No-Reply&amp;#34; &amp;lt;no-reply@outlook.com&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__USER=no-reply@outlook.com&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# - GITEA__mailer__PASSWD=123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;nv&#34;&gt;USER_UID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;nv&#34;&gt;USER_GID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - ./data:/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/timezone:/etc/timezone:ro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/localtime:/etc/localtime:ro
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:3000:3000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:2222:22&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;223-启动运行&#34;&gt;2.2.3. 启动运行&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker compose logs -f&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-ssh-容器直通&#34;&gt;3. SSH 容器直通&lt;/h2&gt;
&lt;p&gt;由于 SSH 在容器内运行，如果需要 SSH 支持，则需要将 SSH 从主机传递到容器。&lt;/p&gt;
&lt;h3 id=&#34;31-创建-git-用户&#34;&gt;3.1. 创建 &lt;code&gt;git&lt;/code&gt; 用户&lt;/h3&gt;
&lt;p&gt;这里的&lt;code&gt;git&lt;/code&gt; 用户用于&lt;code&gt;ssh&lt;/code&gt; 容器透传。如果不需要 &lt;code&gt;git clone git@host:username&lt;/code&gt; 功能，可以忽略。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# uid 和 gid 也可以随机不指定。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd -g &lt;span class=&#34;m&#34;&gt;1100&lt;/span&gt; git &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo useradd -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;Git Version Control&amp;#34;&lt;/span&gt; -m -d /home/git -s /bin/bash -u &lt;span class=&#34;m&#34;&gt;1100&lt;/span&gt; -g &lt;span class=&#34;m&#34;&gt;1100&lt;/span&gt; git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将用户添加到docker用户组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -aG docker git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-方法一使用-authorizedkeyscommand&#34;&gt;3.2. 方法一：使用 AuthorizedKeysCommand&lt;/h3&gt;
&lt;p&gt;该方法最大优点是：通过 &lt;code&gt;AuthorizedKeysCommand&lt;/code&gt; 进入容器获取&lt;code&gt;git&lt;/code&gt;用户的 &lt;code&gt;authorized_keys&lt;/code&gt;，不需要挂载主机的 &lt;code&gt;.ssh&lt;/code&gt; 目录到容器。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;客户端执行 &lt;code&gt;git clone&lt;/code&gt; 命令后，会进入容器执行 &lt;code&gt;gitea keys&lt;/code&gt; 命令，返回用户的 &lt;code&gt;authorized_keys&lt;/code&gt; 公钥信息完成认证，该信息是带有 &lt;code&gt;command=&amp;quot;/usr/local/bin/gitea&lt;/code&gt; 路径的，与容器上 &lt;code&gt;Gitea&lt;/code&gt;  二进制文件的位置匹配。&lt;/li&gt;
&lt;li&gt;通过验证后，主机 SSH 服务器为&lt;code&gt;git&lt;/code&gt;用户建立会话，并使用主机git用户的 &lt;code&gt;shell&lt;/code&gt; 执行后续命令。&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id=&#34;321-docker-获取-authorized_keys推荐&#34;&gt;3.2.1. Docker 获取 authorized_keys（推荐）&lt;/h4&gt;
&lt;p&gt;主机使用 &lt;code&gt;docker exec&lt;/code&gt; 方式进入容器获取 &lt;code&gt;authorized_keys&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# gitea 是容器名称，请根据实际修改。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 标准镜像需要加 &amp;#34;-u git&amp;#34; 指定用户，root 身份运行 docker exec 会报错。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EOF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/ssh/sshd_config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Match User git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  AuthorizedKeysCommandUser git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  AuthorizedKeysCommand /usr/bin/docker &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; -i -u git gitea /usr/local/bin/gitea keys -e git -u %u -t %t -k %k
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart sshd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;322-ssh-获取-authorized_keys二选一&#34;&gt;3.2.2. SSH 获取 authorized_keys（二选一）&lt;/h4&gt;
&lt;p&gt;与&lt;code&gt;docker shell&lt;/code&gt; 基本一样，不同地方在于没有使用 &lt;code&gt;docker exec&lt;/code&gt; 进入容器，而是通过 &lt;code&gt;ssh git@127.0.0.1&lt;/code&gt; 进入容器。&lt;/p&gt;
&lt;p&gt;此方法需要将容器的 &lt;code&gt;22&lt;/code&gt; 端口映射到主机，比如映射为 &lt;code&gt;2222&lt;/code&gt;，并且主机&lt;code&gt;git&lt;/code&gt;用户要创建一个密钥对，并提前将公钥添加到容器的 &lt;code&gt;/data/git/.ssh/authorized_keys&lt;/code&gt; 目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EOF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee -a /etc/ssh/sshd_config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Match User git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  AuthorizedKeysCommandUser git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  AuthorizedKeysCommand /usr/bin/ssh -p &lt;span class=&#34;m&#34;&gt;2222&lt;/span&gt; -o &lt;span class=&#34;nv&#34;&gt;StrictHostKeyChecking&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no git@127.0.0.1 /usr/local/bin/gitea keys -e git -u %u -t %t -k %k
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart sshd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-方法二共享-authorized_keys&#34;&gt;3.3. 方法二：共享 authorized_keys&lt;/h3&gt;
&lt;p&gt;此方法是通过与容器共享 &lt;code&gt;authorized_keys&lt;/code&gt;文件的方式来进行用于认证，用于带有 &lt;code&gt;openssh&lt;/code&gt; 的标准镜像。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;为了使转发正常工作，需要将容器的 SSH 端口（22）映射到主机端口 2222。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#docker-compose.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - &lt;span class=&#34;s2&#34;&gt;&amp;#34;127.0.0.1:2222:22&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;接下来要使容器&lt;code&gt;git&lt;/code&gt;用户的&lt;code&gt;uid&lt;/code&gt; 和 &lt;code&gt;gid&lt;/code&gt; 与主机上的&lt;code&gt;git&lt;/code&gt;用户一致。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#docker-compose.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;environment:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - &lt;span class=&#34;nv&#34;&gt;USER_UID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - &lt;span class=&#34;nv&#34;&gt;USER_GID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;然后，创建主机与容器互联的密钥。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 生成 authorized_keys 文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -u git mkdir /home/git/.ssh/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -u git ssh-keygen -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;/home/git/.ssh/idrsa&amp;#34;&lt;/span&gt; -t rsa -b &lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt; -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;Gitea Host Key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -u git &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;cat /home/git/.ssh/idrsa.pub&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /home/git/.ssh/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo -u git chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; /home/git/.ssh/authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;接下来将主机&lt;code&gt;/home/git/.ssh&lt;/code&gt;挂载到容器中。这可确保&lt;code&gt;authorized_keys&lt;/code&gt;文件在主机用户和容器之间共享。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  - /home/git/.ssh/:/data/git/.ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;通过 Gitea 界面添加的所有用户公钥都将有前缀 &lt;code&gt;command=&amp;quot;/usr [...]&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/home/git/.ssh/authorized_keys&lt;/code&gt;内容如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SSH pubkey from git user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-rsa &amp;lt;Gitea Host Key&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# other keys from users&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;command&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/bin/gitea --config=/data/gitea/conf/app.ini serv key-1&amp;#34;&lt;/span&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;因此，当客户端执行 &lt;code&gt;git clone&lt;/code&gt; 命令时会执行 &lt;code&gt;/usr/local/bin/gitea&lt;/code&gt; 文件。&lt;/p&gt;
&lt;h3 id=&#34;34-转发主机命令到容器&#34;&gt;3.4. 转发主机命令到容器&lt;/h3&gt;
&lt;h4 id=&#34;341-方法1shell-方式推荐&#34;&gt;3.4.1. 方法1：shell 方式（推荐）&lt;/h4&gt;
&lt;p&gt;为了能够在容器内执行命令，我们还需要修改&lt;code&gt;git&lt;/code&gt; 用户的默认&lt;code&gt;shell&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# gitea 是容器名称，请根据实际修改。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EOF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /home/git/docker-shell
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/bin/docker &lt;span class=&#34;nb&#34;&gt;exec&lt;/span&gt; -i -u git --env &lt;span class=&#34;nv&#34;&gt;SSH_ORIGINAL_COMMAND&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SSH_ORIGINAL_COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; gitea sh &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /home/git/docker-shell
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -s /home/git/docker-shell git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;当然，也可以使用下面SSH方式执行。（二选一）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EOF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /home/git/ssh-shell
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -p &lt;span class=&#34;m&#34;&gt;2222&lt;/span&gt; -o &lt;span class=&#34;nv&#34;&gt;StrictHostKeyChecking&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no git@127.0.0.1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;SSH_ORIGINAL_COMMAND=\&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SSH_ORIGINAL_COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /home/git/ssh-shell
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo usermod -s /home/git/ssh-shell git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;342-方法2shim-方式&#34;&gt;3.4.2. 方法2：Shim 方式&lt;/h4&gt;
&lt;p&gt;在主机创建虚假gitea可执行文件，该文件将把命令从主机转发到容器。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# gitea 是容器名称，请根据实际修改。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 与 shell 相比多了 $0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39; | sudo tee /usr/local/bin/gitea
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#!/bin/sh
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/usr/bin/docker exec -i -u git --env SSH_ORIGINAL_COMMAND=&amp;#34;$SSH_ORIGINAL_COMMAND&amp;#34; gitea sh $0 &amp;#34;$@&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/gitea&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;当然，也可以使用下面SSH方式执行。（二选一）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;lt;&amp;lt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;EOF&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo tee /usr/local/bin/gitea
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#!/bin/sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -p &lt;span class=&#34;m&#34;&gt;2222&lt;/span&gt; -o &lt;span class=&#34;nv&#34;&gt;StrictHostKeyChecking&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;no git@127.0.0.1 &lt;span class=&#34;s2&#34;&gt;&amp;#34;SSH_ORIGINAL_COMMAND=\&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SSH_ORIGINAL_COMMAND&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;\&amp;#34; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$0&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod +x /usr/local/bin/gitea&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-gitea-actions&#34;&gt;4. Gitea Actions&lt;/h2&gt;
&lt;h3 id=&#34;41-act-runner&#34;&gt;4.1. Act Runner&lt;/h3&gt;
&lt;h4 id=&#34;411-使用二进制文件&#34;&gt;4.1.1. 使用二进制文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 下载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://gitea.com/gitea/act_runner/releases/download/v0.2.7/act_runner-0.2.7-linux-amd64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv act_runner-0.2.7-linux-amd64 gitea-runner
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x gitea-runner
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gitea-runner --version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 导出默认配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gitea-runner generate-config &amp;gt; config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注册&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ./gitea-runner --config config.yaml register&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./gitea-runner register &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --no-interactive &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --instance https://codes.wangyan.cloud/ &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --token xx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --name gitea-runner&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;412-使用-docker-镜像&#34;&gt;4.1.2. 使用 Docker 镜像&lt;/h4&gt;
&lt;p&gt;导出配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo docker pull gitea/act_runner:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo docker run --entrypoint&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; --rm -it gitea/act_runner:latest act_runner generate-config &amp;gt; config.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;配置 Cache&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#vim config.yaml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cache:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;enabled: &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dir: &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 使用步骤 1. 获取的 LAN IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;host: &lt;span class=&#34;s2&#34;&gt;&amp;#34;192.168.8.17&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 使用步骤 2. 获取的端口号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;port: &lt;span class=&#34;m&#34;&gt;3030&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#vim docker-compose.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version: &lt;span class=&#34;s2&#34;&gt;&amp;#34;3.8&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    runner:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: gitea/act_runner:nightly
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    environment:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    CONFIG_FILE: /config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    GITEA_INSTANCE_URL: &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://119.29.17.197:3000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    GITEA_RUNNER_REGISTRATION_TOKEN: &lt;span class=&#34;s2&#34;&gt;&amp;#34;xx&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    GITEA_RUNNER_NAME: &lt;span class=&#34;s2&#34;&gt;&amp;#34;gitea-runner&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - ./config.yaml:/config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - ./data:/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - /var/run/docker.sock:/var/run/docker.sock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - &lt;span class=&#34;s2&#34;&gt;&amp;#34;3030:3030&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-actions-demo&#34;&gt;4.2. Actions Demo&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim .gitea/workflows/demo.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;yaml&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Gitea Actions Demo&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;run-name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;${{ gitea.actor }} is testing out Gitea Actions 🚀&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;l&#34;&gt;push]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;jobs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Explore-Gitea-Actions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;runs-on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;ubuntu-latest&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;steps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#34;🎉 The job was automatically triggered by a ${{ gitea.event_name }} event.&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#34;🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#34;🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}.&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;Check out repository code&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;uses&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;actions/checkout@v3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#34;💡 The ${{ gitea.repository }} repository has been cloned to the runner.&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;echo &amp;#34;🖥️ The workflow is now ready to test your code on the runner.&amp;#34;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;- &lt;span class=&#34;nt&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;l&#34;&gt;List files in the repository&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;sd&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt; ls ${{ gitea.workspace }}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt; - run: echo &amp;#34;🍏 This job&amp;#39;s status is ${{ job.status }}.&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;a href=&#34;https://docs.gitea.com/zh-cn/usage/actions/quickstart&#34;&gt;快速入门 | Gitea Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.gitea.com/zh-cn/installation/install-with-docker-rootless&#34;&gt;使用 Docker 安装 (rootless) | Gitea Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://support.microsoft.com/zh-cn/office/outlook-com-%E7%9A%84-pop-imap-%E5%92%8C-smtp-%E8%AE%BE%E7%BD%AE-d088b986-291d-42b8-9564-9c414e2aa040&#34;&gt;Outlook.com 的 POP、IMAP 和 SMTP 设置 - Microsoft 支持&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Mariadb 二进制版安装与配置</title>
        <link>https://www.bg7pbp.com/p/mariadb-install-binary/</link>
        <pubDate>Wed, 05 Mar 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mariadb-install-binary/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E4%B8%8B%E8%BD%BD-mariadb&#34;&gt;1.1. 下载 Mariadb&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;1.2. 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E6%96%B0%E5%A2%9E%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84&#34;&gt;1.3. 新增用户和组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E5%88%9B%E5%BB%BA%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95&#34;&gt;1.4. 创建工作目录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;二、配置文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.1. 主配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.2. 客户端配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.3. 服务端配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85%E5%90%AF%E5%8A%A8&#34;&gt;三、安装启动&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%88%9D%E5%A7%8B%E5%8C%96%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95&#34;&gt;3.1. 初始化数据目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8&#34;&gt;3.2. 开机自启动&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AE%BE%E7%BD%AE-mariadb&#34;&gt;三、设置 MariaDB&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%88%9D%E5%A7%8B%E5%8C%96%E8%AE%BE%E7%BD%AE&#34;&gt;3.1. 初始化设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%BC%80%E5%90%AF%E8%BF%9C%E7%A8%8B%E7%99%BB%E5%BD%95&#34;&gt;3.2. 开启远程登录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83&#34;&gt;3.3. 创建数据库、用户、授权&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E6%95%B0%E6%8D%AE%E5%A4%87%E4%BB%BD&#34;&gt;3.4. 数据备份&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E5%85%B6%E4%BB%96&#34;&gt;3.5. 其他&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;h3 id=&#34;11-下载-mariadb&#34;&gt;1.1. 下载 Mariadb&lt;/h3&gt;
&lt;p&gt;根据系统选择相应版本版本，然后下载解压。&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href=&#34;https://downloads.mariadb.org/&#34;&gt;https://downloads.mariadb.org/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://res.craft.do/user/full/336ad2ae-2e7a-1608-f6b0-78ca4dabfbaf/doc/bbfb5440-75cf-f5b0-66d8-0089ef08325e/98777d61-2998-4067-996c-b2e11b0f7473&#34; alt=&#34;屏幕截图 2024-03-28 153020.png&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://mirrors.xtom.com.hk/mariadb//mariadb-11.4.5/bintar-linux-systemd-x86_64/mariadb-11.4.5-linux-systemd-x86_64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar zxf mariadb-11.4.5-linux-systemd-x86_64.tar.gz -C /usr/local/src
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/src/mariadb-11.4.5-linux-systemd-x86_64 /usr/local/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装依赖&#34;&gt;1.2. 安装依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt -y install build-essential libaio-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt -y install libncurses5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install libaio-devel numactl-libs &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;centos&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dnf -y install ncurses-devel &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;centos8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-新增用户和组&#34;&gt;1.3. 新增用户和组&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo addgroup --system --gid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --home /var/lib/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --shell /bin/false &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --uid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gecos &lt;span class=&#34;s1&#34;&gt;&amp;#39;MariaDB Server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --disabled-password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd --system mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --shell /bin/bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --comment &lt;span class=&#34;s1&#34;&gt;&amp;#39;MariaDB server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --gid mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --home-dir /var/lib/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --create-home &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-创建工作目录&#34;&gt;1.4. 创建工作目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 日志目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/log/mariadb &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/log/mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安全目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/lib/mysql-files &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/lib/mysql-files &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;750&lt;/span&gt; /var/lib/mysql-files&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二配置文件&#34;&gt;二、配置文件&lt;/h2&gt;
&lt;h3 id=&#34;21-主配置文件&#34;&gt;2.1. 主配置文件&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/configuring-mariadb-with-option-files/#option-groups&#34;&gt;Configuring MariaDB with Option Files&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /etc/mysql/conf.d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/mysql/my.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/my.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is read both by the client and the server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client-server]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;port=3306
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;socket=/tmp/mysql.sock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# include all files from the config directory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;!includedir /etc/mysql/conf.d/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-客户端配置文件&#34;&gt;2.2. 客户端配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/mysql/conf.d/client.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/conf.d/client.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# These two groups are read by the client library
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Use it for options that affect all clients, but not the server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;default-character-set = utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is not read by mysql client library,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client-mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-服务端配置文件&#34;&gt;2.3. 服务端配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/mysql/conf.d/server.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/conf.d/server.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This groups are read by MariaDB server.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Use it for options that only the server (but not clients)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[server]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is read both by the MariaDB Server and MySQL Server.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mysqld]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Basic Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;datadir=/var/lib/mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;bind-address=0.0.0.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;pid-file=/var/lib/mysql/mariadb.pid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Character Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;character-set-server=utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;character-set-filesystem=utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;collation-server=utf8mb4_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# InnoDB Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# innodb_buffer_pool_size=6G
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Connection settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# max_connections=500
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is only read by MariaDB servers, not by MySQL.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_id=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Error Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_error=/var/log/mariadb/error.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;aria_log_dir_path=/var/log/mariadb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# General Query Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;general_log=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;general_log_file=/var/log/mariadb/general_query.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Binary Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log-bin=/var/log/mariadb/master-bin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log-bin-index=/var/log/mariadb/master-bin.index
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;binlog-format=mixed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#binlog-do-db=mydb
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#binlog-ignore-db=test
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;expire-logs-days=3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Slow Query Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;slow_query_log=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;slow_query_log_file=/var/log/mariadb/slow_query.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;long_query_time=5.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_queries_not_using_indexes=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# MariaDB Audit Plugin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;plugin-load=server_audit=server_audit.so
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit=FORCE_PLUS_PERMANENT
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit_events=CONNECT,QUERY,TABLE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit_logging=ON
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit_file_rotate_size=20M
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit_file_rotations=10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server_audit_file_path=/var/log/mariadb/audit.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三安装启动&#34;&gt;三、安装启动&lt;/h2&gt;
&lt;h3 id=&#34;31-初始化数据目录&#34;&gt;3.1. 初始化数据目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./scripts/mariadb-install-db --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-开机自启动&#34;&gt;3.2. 开机自启动&lt;/h3&gt;
&lt;p&gt;方法1： &lt;a href=&#34;https://mariadb.com/kb/en/mariadb/systemd/&#34;&gt;systemd&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp support-files/systemd/mariadb.service /usr/lib/systemd/system/mariadb.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now mariadb.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl disable mariadb.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法2：不推荐&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp support-files/mysql.server /etc/init.d/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chkconfig mysql on
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo service mysql start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法3：手动启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export PATH=$PATH:/usr/local/mysql/bin/&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysqld_safe --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三设置-mariadb&#34;&gt;三、设置 MariaDB&lt;/h2&gt;
&lt;h3 id=&#34;31-初始化设置&#34;&gt;3.1. 初始化设置&lt;/h3&gt;
&lt;p&gt;MariaDB 10.4+ 以后，root 帐号认证机制已经变更，详见官网说明：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.org/authentication-in-mariadb-10-4/&#34;&gt;Authentication in MariaDB 10.4 — Understanding the Changes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;mysql 帐号登录：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# root@localhost 和 mysql@localhost 均是系统自动创建的账号&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mysql &lt;span class=&#34;c1&#34;&gt;#root&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql &lt;span class=&#34;c1&#34;&gt;#mysql&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果报错 &lt;code&gt;sudo: mysql: command not found&lt;/code&gt; 请检查 &lt;code&gt;sudo&lt;/code&gt; 配置是否开启了 &lt;code&gt;secure_path&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sudo&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo visudo&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注释以下内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Defaults &lt;span class=&#34;nv&#34;&gt;secure_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;......&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;不想使用 &lt;code&gt;unix_socke&lt;/code&gt; 方式登陆？设置 root 密码：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;verysecret&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;MariaDB 10.4 以前版本继续使用以下方法设置root密码：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysqladmin -u root -h &lt;span class=&#34;s1&#34;&gt;&amp;#39;hosts-name&amp;#39;&lt;/span&gt; password &lt;span class=&#34;s1&#34;&gt;&amp;#39;verysecret&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-开启远程登录&#34;&gt;3.2. 开启远程登录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRANT ALL PRIVILEGES ON *.* TO &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt; IDENTIFIED BY &lt;span class=&#34;s1&#34;&gt;&amp;#39;verysecret&amp;#39;&lt;/span&gt; WITH GRANT OPTION&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FLUSH PRIVILEGES&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-创建数据库用户授权&#34;&gt;3.3. 创建数据库、用户、授权&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建数据库&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DATABASE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CHARACTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COLLATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4_general_ci&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建用户&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myuser&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mypasswd&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;授权&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;GRANT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myuser&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;刷新生效&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-数据备份&#34;&gt;3.4. 数据备份&lt;/h3&gt;
&lt;p&gt;导出为SQL文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;other&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mysqldump -u root -p --opt [database name] &amp;gt; [database name].sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;迁移至另一台主机&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;other&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mysqldump -u root -pPassword --all-databases | ssh user@new_host.host.com &amp;#39;cat - | mysql -u root -pPassword&amp;#39;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;加密sql文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;other&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;zip --encrypt dump.zip db.sql
unzip -P your-password dump.zip&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;导入SQL文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;other&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;mysql -u root -p newdatabase &amp;lt; /path/to/newdatabase.sql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35-其他&#34;&gt;3.5. 其他&lt;/h3&gt;
&lt;p&gt;错误修复&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysqlcheck --all-databases --check-upgrade --auto-repair
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql_upgrade -uroot -p --force&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;官方文档：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/installing-mariadb-binary-tarballs&#34;&gt;Installing MariaDB Binary Tarballs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/server-system-variables&#34;&gt;Server System Variables&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/configuring-mariadb-with-option-files/&#34;&gt;Configuring MariaDB with Option Files&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>MySQL 二进制版安装与配置</title>
        <link>https://www.bg7pbp.com/p/mysql-install-binary/</link>
        <pubDate>Wed, 05 Mar 2025 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mysql-install-binary/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E4%B8%8B%E8%BD%BD-mysql&#34;&gt;1.1. 下载 MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85-libaio-%E4%BE%9D%E8%B5%96&#34;&gt;1.2. 安装 libaio 依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E6%96%B0%E5%A2%9E%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84&#34;&gt;1.3. 新增用户和组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E5%88%9B%E5%BB%BA%E5%B7%A5%E4%BD%9C%E7%9B%AE%E5%BD%95&#34;&gt;1.4. 创建工作目录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;二、配置文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E4%B8%BB%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.1. 主配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.2. 客户端配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.3. 服务端配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85%E5%90%AF%E5%8A%A8&#34;&gt;三、安装启动&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%88%9D%E5%A7%8B%E5%8C%96%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95&#34;&gt;3.1. 初始化数据目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E6%9D%83%E9%99%90%E8%AE%BE%E7%BD%AE&#34;&gt;3.2. 数据目录权限设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E4%BD%BF%E7%94%A8-systemd-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;3.3. 使用 systemd 启动服务器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&#34;&gt;四、常用命令&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E9%87%8D%E7%BD%AE-root-%E5%AF%86%E7%A0%81&#34;&gt;4.1. 重置 root 密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E5%BC%80%E5%90%AF%E8%BF%9C%E7%A8%8B%E8%BF%9E%E6%8E%A5&#34;&gt;4.2. 开启远程连接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83&#34;&gt;4.3. 创建数据库、用户、授权&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA&#34;&gt;4.4. 数据库导入导出&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;h3 id=&#34;11-下载-mysql&#34;&gt;1.1. 下载 MySQL&lt;/h3&gt;
&lt;p&gt;根据系统选择相应版本版本，然后下载解压。&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href=&#34;https://dev.mysql.com/downloads/mysql/&#34;&gt;https://dev.mysql.com/downloads/mysql/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.5-linux-glibc2.28-x86_64.tar.xz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo tar xvf mysql-8.4.5-linux-glibc2.28-x86_64.tar.xz -C /usr/local/src &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/src/mysql-8.4.5-linux-glibc2.28-x86_64 /usr/local/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql/bin:&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装-libaio-依赖&#34;&gt;1.2. 安装 libaio 依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install -y libaio1 libnuma-dev libncurses-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt install -y libaio-dev libnuma-dev libncurses-dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/lib/x86_64-linux-gnu/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s libaio.so.1t64.0.2 libaio.so.1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-新增用户和组&#34;&gt;1.3. 新增用户和组&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Ubuntu/Debian:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo addgroup --system --gid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --home /var/lib/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --shell /bin/false &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --uid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gecos &lt;span class=&#34;s1&#34;&gt;&amp;#39;MySQL Server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --gid &lt;span class=&#34;m&#34;&gt;36&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --disabled-password &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# On Fedora/RHEL/CentOS:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo groupadd --system mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo adduser &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --shell /bin/bash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --comment &lt;span class=&#34;s1&#34;&gt;&amp;#39;MariaDB server&amp;#39;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --gid mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --home-dir /var/lib/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --create-home &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-创建工作目录&#34;&gt;1.4. 创建工作目录&lt;/h3&gt;
&lt;p&gt;日志目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/log/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/log/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安全目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/lib/mysql-files &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/lib/mysql-files &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;750&lt;/span&gt; /var/lib/mysql-files&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;pid 文件目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /var/run/mysqld/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/run/mysqld/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;配置文件目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir -p /etc/mysql/conf.d/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown -R mysql:mysql /etc/mysql/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二配置文件&#34;&gt;二、配置文件&lt;/h2&gt;
&lt;h3 id=&#34;21-主配置文件&#34;&gt;2.1. 主配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/my.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# The MySQL database server configuration file.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# You can copy this to one of:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# - &amp;#34;/etc/mysql/my.cnf&amp;#34; to set global options,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# - &amp;#34;~/.my.cnf&amp;#34; to set user-specific options.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# For explanations see
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# * IMPORTANT: Additional settings that can override those from this file!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#   The files must end with &amp;#39;.cnf&amp;#39;, otherwise they&amp;#39;ll be ignored.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;!includedir /etc/mysql/conf.d/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-客户端配置文件&#34;&gt;2.2. 客户端配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/conf.d/client.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# The MySQL database client configuration file
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Ref to https://dev.mysql.com/doc/refman/en/mysql-command-options.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mysql]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;default-character-set=utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;socket=/var/run/mysqld/mysqld.sock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-服务端配置文件&#34;&gt;2.3. 服务端配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt; /etc/mysql/conf.d/server.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# The MySQL database server configuration file.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# For explanations see
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Here is entries for some specific programs
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# The following values assume you have at least 8G ram
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mysqld]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Basic Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;user=mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;bind-address=0.0.0.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;mysqlx-bind-address=0.0.0.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;port=3306
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;pid-file=/var/run/mysqld/mysqld.pid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;socket=/var/run/mysqld/mysqld.sock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;datadir=/var/lib/mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;secure_file_priv=/var/lib/mysql-files
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;local_infile=OFF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Character Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;character-set-server=utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;character-set-filesystem=utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;collation-server=utf8mb4_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# InnoDB Settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;innodb_buffer_pool_size=2G
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Connection settings
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;max_connections=300
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Error Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_error=/var/log/mysql/error.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_error_verbosity=2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# General Query Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;general_log=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;general_log_file=/var/log/mysql/general_query.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Binary Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log-bin=/var/log/mysql/mysql-bin
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log-bin-index=/var/log/mysql/mysql-bin.index
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;binlog-do-db=mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;binlog-ignore-db=test
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;binlog_expire_logs_seconds=604800
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;binlog_expire_logs_auto_purge=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;max_binlog_size=1G
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Slow Query Log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;slow_query_log=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;slow_query_log_file=/var/log/mysql/slow_query.log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;long_query_time=5.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_slow_admin_statements=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;log_queries_not_using_indexes=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三安装启动&#34;&gt;三、安装启动&lt;/h2&gt;
&lt;h3 id=&#34;31-初始化数据目录&#34;&gt;3.1. 初始化数据目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 指定配置文件初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo /usr/local/mysql/bin/mysqld --defaults-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/mysql/my.cnf --initialize
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 不指定配置文件初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo /usr/local/mysql/bin/mysqld --initialize --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --basedir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --datadir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-数据目录权限设置&#34;&gt;3.2. 数据目录权限设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;750&lt;/span&gt; /var/lib/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql /var/lib/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-使用-systemd-启动服务器&#34;&gt;3.3. 使用 systemd 启动服务器&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/lib/systemd/system/mysql.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;MySQL Server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;man:mysqld&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http://dev.mysql.com/doc/refman/en/using-systemd.html
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;network.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;After&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;syslog.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Have mysqld write its state to the systemd notify socket&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;notify
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Disable service start and stop timeout logic of systemd for mysqld service.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TimeoutSec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Start main service&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql/bin/mysqld --defaults-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/mysql/my.cnf &lt;span class=&#34;nv&#34;&gt;$MYSQLD_OPTS&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use this to switch malloc implementation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EnvironmentFile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/sysconfig/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Sets open_files_limit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LimitNOFILE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Restart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;on-failure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;RestartPreventExitStatus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Set environment variable MYSQLD_PARENT_PID. This is required for restart.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Environment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;MYSQLD_PARENT_PID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PrivateTmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /etc/sysconfig/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/sysconfig/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;TZ&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;Asia/Shanghai
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NO_INIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;开启自启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now mysql.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl disable mysql.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;journalctl -u mysql.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四常用命令&#34;&gt;四、常用命令&lt;/h2&gt;
&lt;h3 id=&#34;41-重置-root-密码&#34;&gt;4.1. 重置 root 密码&lt;/h3&gt;
&lt;p&gt;初始化后，mysql 会生成临时密码,可通过 &lt;code&gt;sudo cat /var/log/mysql/error.log | grep password&lt;/code&gt; 获得。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;更改当前账号密码&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;更改指定用户密码&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myuser&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-开启远程连接&#34;&gt;4.2. 开启远程连接&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;UPDATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DISTINCT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-创建数据库用户授权&#34;&gt;4.3. 创建数据库、用户、授权&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建数据库&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DATABASE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CHARACTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COLLATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4_general_ci&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;创建用户&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myuser&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mypasswd&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;授权&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;GRANT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myuser&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;刷新生效&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-数据库导入导出&#34;&gt;4.4. 数据库导入导出&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysqldump&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;myuser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;myuser&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mydb&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sql&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/mysql-secure-deployment-guide/8.0/en/&#34;&gt;MySQL 8.0 Secure Deployment Guide&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/refman/9.0/en/binary-installation.html&#34;&gt;Installing MySQL on Unix/Linux Using Generic Binaries&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://dev.mysql.com/doc/refman/8.4/en/sql-statements.html&#34;&gt;SQL Statements&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>GnuPG 安装与使用</title>
        <link>https://www.bg7pbp.com/p/gnupg-install-usage/</link>
        <pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/gnupg-install-usage/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%85%B3%E4%BA%8E-gpg&#34;&gt;1. 关于 GPG&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-gpg-%E6%98%AF%E4%BB%80%E4%B9%88&#34;&gt;1.1. GPG 是什么?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-keyid-%E6%98%AF%E4%BB%80%E4%B9%88&#34;&gt;1.2. KEYID 是什么？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-user-id-%E6%98%AF%E4%BB%80%E4%B9%88&#34;&gt;1.3. USER-ID 是什么？&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E5%AE%89%E8%A3%85-gpg&#34;&gt;2. 安装 GPG&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-macos&#34;&gt;2.1. macOS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-windows&#34;&gt;2.2. windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-linux&#34;&gt;2.3. Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-gpg-%E5%AF%86%E9%92%A5%E7%AE%A1%E7%90%86&#34;&gt;3. GPG 密钥管理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E7%94%9F%E6%88%90-gpg-%E5%AF%86%E9%92%A5%E5%AF%B9&#34;&gt;3.1. 生成 GPG 密钥对&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%88%97%E5%87%BA%E5%AF%86%E9%92%A5&#34;&gt;3.2. 列出密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%88%97%E5%87%BA%E6%8C%87%E7%BA%B9&#34;&gt;3.3. 列出指纹&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E7%94%9F%E6%88%90%E5%AD%90%E5%AF%86%E9%92%A5&#34;&gt;3.4. 生成子密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E5%88%A0%E9%99%A4%E5%AF%86%E9%92%A5&#34;&gt;3.5. 删除密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#36-%E5%AF%BC%E5%87%BA%E5%AF%86%E9%92%A5&#34;&gt;3.6. 导出密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#37-%E5%AF%BC%E5%85%A5%E5%AF%86%E9%92%A5&#34;&gt;3.7. 导入密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#38-%E4%BF%A1%E4%BB%BB%E5%AF%86%E9%92%A5&#34;&gt;3.8. 信任密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#39-%E5%88%86%E5%8F%91%E5%85%AC%E9%92%A5&#34;&gt;3.9. 分发公钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#310-%E6%A3%80%E7%B4%A2%E5%85%AC%E9%92%A5&#34;&gt;3.10. 检索公钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#311-%E6%8E%A5%E6%94%B6%E4%BB%96%E4%BA%BA%E7%9A%84%E5%85%AC%E9%92%A5&#34;&gt;3.11. 接收他人的公钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#312-%E7%AD%BE%E5%90%8D%E4%BB%96%E4%BA%BA%E5%85%AC%E9%92%A5&#34;&gt;3.12. 签名他人公钥&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-gpg-%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C&#34;&gt;4. GPG 文件操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E5%8A%A0%E8%A7%A3%E4%B8%8E%E8%A7%A3%E5%AF%86&#34;&gt;4.1. 加解与解密&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#411-%E5%8A%A0%E5%AF%86&#34;&gt;4.1.1. 加密&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#412-%E8%A7%A3%E5%AF%86&#34;&gt;4.1.2. 解密&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E7%AD%BE%E5%90%8D%E4%B8%8E%E9%AA%8C%E8%AF%81&#34;&gt;4.2. 签名与验证&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#421-%E7%AD%BE%E5%90%8D%E4%B8%94%E5%8A%A0%E5%AF%86&#34;&gt;4.2.1. 签名且加密&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#422-%E5%8F%AA%E7%AD%BE%E5%90%8D%E4%B8%8D%E5%8A%A0%E5%AF%86&#34;&gt;4.2.2. 只签名不加密&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#423-%E5%8F%AA%E7%AD%BE%E5%90%8D%E4%B8%8D%E5%8A%A0%E5%AF%86%E4%B8%94%E4%BD%BF%E7%94%A8%E6%98%8E%E6%96%87%E7%AD%BE%E5%90%8D&#34;&gt;4.2.3. 只签名不加密，且使用明文签名&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#424-%E9%AA%8C%E8%AF%81&#34;&gt;4.2.4. 验证&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5-gpg-%E5%90%8A%E9%94%80%E6%93%8D%E4%BD%9C&#34;&gt;5. GPG 吊销操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E7%94%9F%E6%88%90%E5%90%8A%E9%94%80%E8%AF%81%E4%B9%A6&#34;&gt;5.1. 生成吊销证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52-%E5%AF%BC%E5%85%A5%E5%90%8A%E9%94%80%E8%AF%81%E4%B9%A6&#34;&gt;5.2. 导入吊销证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53-%E6%92%A4%E9%94%80%E5%AF%86%E9%92%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%AF%86%E9%92%A5&#34;&gt;5.3. 撤销密钥服务器上的密钥&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#6-git-%E9%85%8D%E7%BD%AE&#34;&gt;6. Git 配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-关于-gpg&#34;&gt;1. 关于 GPG&lt;/h2&gt;
&lt;h3 id=&#34;11-gpg-是什么&#34;&gt;1.1. GPG 是什么?&lt;/h3&gt;
&lt;p&gt;GnuPG，即 &lt;code&gt;GNU Privacy Guard&lt;/code&gt; (&lt;code&gt;GPG&lt;/code&gt;) 是一个密码学软件，用于加密、签名内容及管理非对称密钥。&lt;/p&gt;
&lt;p&gt;GPG 的核心是 GPG 密钥对，分为公钥和私钥。在密码学技术上，GPG 可以使用若干不同的加密算法来向外提供加密解密服务。&lt;/p&gt;
&lt;h3 id=&#34;12-keyid-是什么&#34;&gt;1.2. KEYID 是什么？&lt;/h3&gt;
&lt;p&gt;KEYID 就是你的 &lt;code&gt;GPG Key&lt;/code&gt; 指纹的缩短版：&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Long&lt;/code&gt;  Fingerprint 的末尾 16 位数字	 &lt;br&gt;
&lt;code&gt;Short&lt;/code&gt; Fingerprint 的末尾 8 位数字&lt;/p&gt;
&lt;p&gt;在很多命令中，&lt;code&gt;--keyid-format [none|short|0xshort|long|0xlong]&lt;/code&gt; 可以决定 KEYID 的显示格式。&lt;/p&gt;
&lt;h3 id=&#34;13-user-id-是什么&#34;&gt;1.3. USER-ID 是什么？&lt;/h3&gt;
&lt;p&gt;USER-ID 通常是指你为邮箱地址所关联的姓名字段，有时候也指所关联的注释文本。&lt;/p&gt;
&lt;h2 id=&#34;2-安装-gpg&#34;&gt;2. 安装 GPG&lt;/h2&gt;
&lt;h3 id=&#34;21-macos&#34;&gt;2.1. macOS&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://gpgtools.org&#34;&gt;https://gpgtools.org&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;22-windows&#34;&gt;2.2. windows&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://gpg4win.org/download.html&#34;&gt;https://gpg4win.org/download.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;23-linux&#34;&gt;2.3. Linux&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --version # 查看是否安装
sudo apt-get install -y gnupg
sudo yum install -y gnupg
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;3-gpg-密钥管理&#34;&gt;3. GPG 密钥管理&lt;/h2&gt;
&lt;h3 id=&#34;31-生成-gpg-密钥对&#34;&gt;3.1. 生成 GPG 密钥对&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --full-generate-key
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;gpg 密钥是与 email 绑定的，它是一个身份证明。&lt;/li&gt;
&lt;li&gt;算法建议选择默认值 RSA，其用途是完整的。&lt;/li&gt;
&lt;li&gt;密钥强度首选 4096 bits。&lt;/li&gt;
&lt;li&gt;建议生成一个不过期的根密钥，然后再建立若干子密钥，用于不同的用途。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;32-列出密钥&#34;&gt;3.2. 列出密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 列出公钥和指纹
gpg --list-keys --keyid-format=short

# 列出私钥和指纹
gpg --list-secret-keys -keyid-format=short
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数 &lt;code&gt;--keyid-format&lt;/code&gt; 可以指定长度。&lt;/p&gt;
&lt;h3 id=&#34;33-列出指纹&#34;&gt;3.3. 列出指纹&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --fingerprint me@wangyan.org
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;34-生成子密钥&#34;&gt;3.4. 生成子密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --expert --edit-key 2E0E8722
gpg&amp;gt; addkey
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;35-删除密钥&#34;&gt;3.5. 删除密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 删除公钥
gpg --delete-key [USER-ID or KEYID]

# 删除私钥
gpg --delete-secret-key [USER-ID or KEYID]
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;36-导出密钥&#34;&gt;3.6. 导出密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 导出公钥
gpg --armor --output user.gpg.public.asc --export MASTER-KEYID

# 导出私钥
gpg --armor --output user.gpg.private.key.asc --export-secret-keys MASTER-KEYID

# 不导出子密钥
gpg --armor --output user.gpg.private.key.asc --export-secret-keys MASTER-KEYID!

# 导出指定子密钥
gpg --armor --output 2E0E8722.pub.asc --export 2E0E8722
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;默认导出主密钥的同时，将会连同其全部子密钥一起导出&lt;/li&gt;
&lt;li&gt;根据非对称密钥体系原理，导出私钥就代表着同时也导出了公钥，因为私钥能够推导出公钥。&lt;/li&gt;
&lt;li&gt;使用子密钥的公钥KEYID，可以指定导出子密钥&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;37-导入密钥&#34;&gt;3.7. 导入密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --import user.gpg.public.pem
gpg --import user.gpg.private.key
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;38-信任密钥&#34;&gt;3.8. 信任密钥&lt;/h3&gt;
&lt;p&gt;重新导入密钥后会显示&lt;code&gt;未知&lt;/code&gt;，因此需要信任。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;gpg --edit-key user@useremail.com
gpg&amp;gt; trust
gpg&amp;gt; 5
gpg&amp;gt; save
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;导出信任文件：&lt;code&gt;gpg --export-ownertrust &amp;gt; file.txt&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;39-分发公钥&#34;&gt;3.9. 分发公钥&lt;/h3&gt;
&lt;p&gt;一旦密钥创建就绪，你就可以将其发表到 GPG 公共服务器，其他人通过指纹或者邮箱地址能够检索到你的公钥。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 默认发布到 hkps://keys.openpgp.org 服务器
gpg --send-keys 2E0E8722

# 发布到指定服务器
gpg  --keyserver hkps://keyserver.ubuntu.com --send-keys 2E0E8722
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;310-检索公钥&#34;&gt;3.10. 检索公钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 检索默认服务器
gpg --search-keys 70B152332E0E8722
gpg --auto-key-locate keyserver --locate-keys no-reply@wangyan.org

# 检索指定服务器
gpg --keyserver hkps://keyserver.ubuntu.com --search-keys 70B152332E0E8722
gpg --keyserver hkps://keyserver.ubuntu.com --search-keys no-reply@wangyan.org
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;311-接收他人的公钥&#34;&gt;3.11. 接收他人的公钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# 使用 Long-KEYID 从指定服务器接收
gpg --keyserver hkps://keyserver.ubuntu.com --recv-keys 70B152332E0E8722
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;312-签名他人公钥&#34;&gt;3.12. 签名他人公钥&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;接收他的公钥&lt;/p&gt;
&lt;p&gt;gpg -recv-keys 70B152332E0E8722&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;签名这个公钥&lt;/p&gt;
&lt;p&gt;gpg &amp;ndash;ask-cert-level &amp;ndash;sign-key &lt;a href=&#34;mailto:no-reply@wangyan.org&#34;&gt;no-reply@wangyan.org&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;签名后导出&lt;/p&gt;
&lt;p&gt;#使用他的公钥加密签名再导出
gpg -a &amp;ndash;export &lt;a href=&#34;mailto:no-reply@wangyan.org&#34;&gt;no-reply@wangyan.org&lt;/a&gt; | gpg -se -r &lt;a href=&#34;mailto:no-reply@wangyan.org&#34;&gt;no-reply@wangyan.org&lt;/a&gt; &amp;gt; &lt;a href=&#34;mailto:no-reply@wangyan.org.asc.pgp&#34;&gt;no-reply@wangyan.org.asc.pgp&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;接收方解密并导入&lt;/p&gt;
&lt;p&gt;gpg &amp;ndash;decrypt &lt;a href=&#34;mailto:no-reply@wangyan.org.asc.pgp&#34;&gt;no-reply@wangyan.org.asc.pgp&lt;/a&gt; &amp;gt; &lt;a href=&#34;mailto:no-reply@wangyan.org.asc&#34;&gt;no-reply@wangyan.org.asc&lt;/a&gt;
gpg &amp;ndash;import &lt;a href=&#34;mailto:no-reply@wangyan.org.asc&#34;&gt;no-reply@wangyan.org.asc&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;发布新公钥到服务器&lt;/p&gt;
&lt;p&gt;gpg &amp;ndash;send-keys &lt;a href=&#34;mailto:no-reply@wangyan.org&#34;&gt;no-reply@wangyan.org&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;4-gpg-文件操作&#34;&gt;4. GPG 文件操作&lt;/h2&gt;
&lt;h3 id=&#34;41-加解与解密&#34;&gt;4.1. 加解与解密&lt;/h3&gt;
&lt;h4 id=&#34;411-加密&#34;&gt;4.1.1. 加密&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -e -r 2E0E8722 original.file
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-e, --encrypt&lt;/code&gt;       加密数据&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-r, --recipient&lt;/code&gt;     为 USER-ID 加密&lt;/li&gt;
&lt;li&gt;加密后默认生成一个新文件 &lt;code&gt;original.file.gpg&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;412-解密&#34;&gt;4.1.2. 解密&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -d -r 2E0E8722 original.file.gp
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-d, --decrypt&lt;/code&gt;       解密数据&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;42-签名与验证&#34;&gt;4.2. 签名与验证&lt;/h3&gt;
&lt;h4 id=&#34;421-签名且加密&#34;&gt;4.2.1. 签名且加密&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -u 2E0E8722 -s original.file
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-u, --local-user&lt;/code&gt;    使用 USER-ID 来签名或者解密&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-s, --sign&lt;/code&gt;          生成一份签名&lt;/li&gt;
&lt;li&gt;这会生成一个加密文件 &lt;code&gt;original.file.gpg&lt;/code&gt;，同时它也是被签名的。&lt;/li&gt;
&lt;li&gt;发给他人，只需分发加密文件，无需附带原始文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;422-只签名不加密&#34;&gt;4.2.2. 只签名不加密&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -u 2E0E8722 -a -b -s original.file
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-a, --armor&lt;/code&gt;         创建 ASCII 字符封装的输出&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-b, --detach-sign&lt;/code&gt;   生成一份分离的签名&lt;/li&gt;
&lt;li&gt;签名后生成一个纯文本的签名文件 &lt;code&gt;original.file.asc&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;发给他人，需要和原始文件一同分发。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;423-只签名不加密且使用明文签名&#34;&gt;4.2.3. 只签名不加密，且使用明文签名&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -u 2E0E8722 --clear-sign original.file
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;--clear-sign&lt;/code&gt;        生成一份明文签名&lt;/li&gt;
&lt;li&gt;区别在于包含了原始文件的内容，无需和原始文件一同分发。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;424-验证&#34;&gt;4.2.4. 验证&lt;/h4&gt;
&lt;pre&gt;&lt;code&gt;gpg -u 2E0E8722 --verify original.file.gpg
gpg -u 2E0E8722 --verify original.file.asc
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;5-gpg-吊销操作&#34;&gt;5. GPG 吊销操作&lt;/h2&gt;
&lt;p&gt;一旦发布到 keyserver 上，你的 GPG Key 就不能被真正删除了。&lt;/p&gt;
&lt;p&gt;对于失效的、过时的、可能已经泄漏的密钥，你要使用吊销功能。&lt;/p&gt;
&lt;h3 id=&#34;51-生成吊销证书&#34;&gt;5.1. 生成吊销证书&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --output revoke.asc --gen-revoke key-ID 
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;52-导入吊销证书&#34;&gt;5.2. 导入吊销证书&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --import revoke.asc 
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;注意：吊销并不删除密钥本身，它是标记该密钥被作废了&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;53-撤销密钥服务器上的密钥&#34;&gt;5.3. 撤销密钥服务器上的密钥&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;gpg --keyserver hkps://keys.openpgp.org --send-keys key-ID
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;已标记作废的密钥会被发送到服务器&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;6-git-配置&#34;&gt;6. Git 配置&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;git config --global gpg.program gpg
git config --global commit.gpgsign true
git config user.name wangyan
git config user.email no-reply@wangyan.org
git config user.signingkey 2E0E8722
git commit -S -m your commit message
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;参考文档：&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://hedzr.com/security/gpg/gpg-short-guide/&#34;&gt;https://hedzr.com/security/gpg/gpg-short-guide/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>使用 Oh My Posh 设置自定义提示符</title>
        <link>https://www.bg7pbp.com/p/oh-my-posh-custom-prompt/</link>
        <pubDate>Sat, 09 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/oh-my-posh-custom-prompt/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%AE%89%E8%A3%85-nerd-font&#34;&gt;1. 安装 Nerd Font&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E5%AE%89%E8%A3%85-oh-my-posh&#34;&gt;2. 安装 Oh My Posh&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85-oh-my-posh-for-powershell&#34;&gt;2.1. 安装 Oh My Posh for PowerShell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85-oh-my-posh-for-wsl&#34;&gt;2.2. 安装 Oh My Posh for WSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E9%80%89%E6%8B%A9%E5%B9%B6%E5%BA%94%E7%94%A8-oh-my-posh-%E4%B8%BB%E9%A2%98&#34;&gt;3. 选择并应用 Oh My Posh 主题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%BA%94%E7%94%A8-powershell-%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%BB%E9%A2%98&#34;&gt;3.1. 应用 PowerShell 提示符主题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%BA%94%E7%94%A8-wsl-%E6%8F%90%E7%A4%BA%E7%AC%A6%E4%B8%BB%E9%A2%98&#34;&gt;3.2. 应用 WSL 提示符主题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://ohmyposh.dev/&#34;&gt;Oh My Posh&lt;/a&gt; 是适用于任何 shell 的自定义提示引擎，支持使用内置主题和自定义主题，能够为 GIT 提供状态颜色编码和自定义提示符支持。&lt;/p&gt;
&lt;h2 id=&#34;1-安装-nerd-font&#34;&gt;1. 安装 Nerd Font&lt;/h2&gt;
&lt;p&gt;自定义命令提示符通常使用字形来设置样式，若要在终端中查看所有字形，则需要安装 &lt;a href=&#34;https://www.nerdfonts.com/font-downloads&#34;&gt;Nerd Font&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;Nerd Font&lt;/code&gt; 是带图标的字库，能够从 Font Awesome、Devicons、Octicons 等图标库中添加了大量额外的字形。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 从列表选择&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;oh-my-posh font install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 直接安装 MesloLGM Nerd 字体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;oh-my-posh font install meslo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;LGM&lt;/code&gt; 代表标准间距大小， &lt;code&gt;Mono&lt;/code&gt; 用于终端，&lt;code&gt;Propo&lt;/code&gt; 用于GUI界面，&lt;/p&gt;
&lt;h2 id=&#34;2-安装-oh-my-posh&#34;&gt;2. 安装 Oh My Posh&lt;/h2&gt;
&lt;h3 id=&#34;21-安装-oh-my-posh-for-powershell&#34;&gt;2.1. 安装 Oh My Posh for PowerShell&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 自动安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# https://github.com/JanDeDobbeleer/oh-my-posh/releases/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;winget install JanDeDobbeleer.OhMyPosh -s winget
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 手动添加环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$env&lt;/span&gt;:Path +&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;;C:\Users\user\AppData\Local\Programs\oh-my-posh\bin&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装-oh-my-posh-for-wsl&#34;&gt;2.2. 安装 Oh My Posh for WSL&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -s https://ohmyposh.dev/install.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash -s&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-选择并应用-oh-my-posh-主题&#34;&gt;3. 选择并应用 Oh My Posh 主题&lt;/h2&gt;
&lt;p&gt;可在 &lt;a href=&#34;https://ohmyposh.dev/docs/themes&#34;&gt;Oh My Posh 主题页面&lt;/a&gt; 浏览主题的完整列表。&lt;/p&gt;
&lt;h3 id=&#34;31-应用-powershell-提示符主题&#34;&gt;3.1. 应用 PowerShell 提示符主题&lt;/h3&gt;
&lt;p&gt;首先，修改 PowerShell 执行策略，将 PowerShell 执行策略设置为不受限制。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Get-ExecutionPolicy -List &lt;span class=&#34;c1&#34;&gt;# list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;set-ExecutionPolicy -ExecutionPolicy Unrestricted &lt;span class=&#34;c1&#34;&gt;# add&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Set-ExecutionPolicy -ExecutionPolicy Undefined -Scope LocalMachine &lt;span class=&#34;c1&#34;&gt;# remove&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;选择主题，并更新 PowerShell 配置文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 首次运行，创建配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;new-item -type file -path &lt;span class=&#34;nv&#34;&gt;$profile&lt;/span&gt; -force
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 编辑&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# C:\Users\WangYan\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;code &lt;span class=&#34;nv&#34;&gt;$PROFILE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置主题&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将 jandedobbeleer 替换为你选择的主题。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;oh-my-posh init pwsh --config &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$env&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;:POSH_THEMES_PATH\jandedobbeleer.omp.json&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; Invoke-Expression&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-应用-wsl-提示符主题&#34;&gt;3.2. 应用 WSL 提示符主题&lt;/h3&gt;
&lt;p&gt;修改配置文件 &lt;code&gt;.profile&lt;/code&gt; 应用主题&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt; ~/.profile &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;eval &amp;#34;$(oh-my-posh init bash --config /home/wangyan/.cache/oh-my-posh/themes/jandedobbeleer.omp.json)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt; ~/.zshrc &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt; EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;eval &amp;#34;$(oh-my-posh init zsh --config /home/wangyan/.cache/oh-my-posh/themes/jandedobbeleer.omp.json)&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参考文档：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://learn.microsoft.com/zh-cn/windows/terminal/tutorials/custom-prompt-setup#customize-your-powershell-prompt-with-oh-my-posh&#34;&gt;使用 Oh My Posh 为 PowerShell 或 WSL 设置自定义提示符&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>MariaDB 常用 SQL 语句</title>
        <link>https://www.bg7pbp.com/p/mariadb-common-sql/</link>
        <pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mariadb-common-sql/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80mariadb-%E8%B4%A6%E6%88%B7%E7%AE%A1%E7%90%86&#34;&gt;一、MariaDB 账户管理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E6%9F%A5%E8%AF%A2%E5%9C%A8%E7%BA%BF%E7%94%A8%E6%88%B7&#34;&gt;1.1. 查询在线用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E6%9F%A5%E8%AF%A2%E5%85%A8%E9%83%A8%E7%94%A8%E6%88%B7&#34;&gt;1.2. 查询全部用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%88%9B%E5%BB%BA%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7&#34;&gt;1.3. 创建普通用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E5%88%A0%E9%99%A4%E6%99%AE%E9%80%9A%E7%94%A8%E6%88%B7&#34;&gt;1.4. 删除普通用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E4%BF%AE%E6%94%B9%E7%94%A8%E6%88%B7%E5%AF%86%E7%A0%81&#34;&gt;1.5. 修改用户密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#16-root%E5%AF%86%E7%A0%81%E6%89%BE%E5%9B%9E&#34;&gt;1.6. ROOT密码找回&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cmariadb-%E6%9D%83%E9%99%90%E7%AE%A1%E7%90%86&#34;&gt;二、MariaDB 权限管理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E6%9F%A5%E8%AF%A2%E6%89%80%E6%9C%89%E6%9D%83%E9%99%90&#34;&gt;2.1. 查询所有权限&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E6%94%B6%E5%9B%9E%E7%94%A8%E6%88%B7%E6%8E%88%E6%9D%83&#34;&gt;2.2. 收回用户授权&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%BF%AB%E9%80%9F%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%BA%93%E5%92%8C%E7%94%A8%E6%88%B7&#34;&gt;2.3. 快速创建数据库和用户&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89mariadb-%E6%95%B0%E6%8D%AE%E6%93%8D%E4%BD%9C&#34;&gt;三、MariaDB 数据操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%AF%BC%E5%85%A5%E5%AF%BC%E5%87%BA&#34;&gt;3.1. 导入导出&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一mariadb-账户管理&#34;&gt;一、MariaDB 账户管理&lt;/h2&gt;
&lt;h3 id=&#34;11-查询在线用户&#34;&gt;1.1. 查询在线用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SHOW&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;processlist&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysqladmin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;admin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;processlist&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-查询全部用户&#34;&gt;1.2. 查询全部用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DISTINCT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;Host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;plugin&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-创建普通用户&#34;&gt;1.3. 创建普通用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;GRANT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-删除普通用户&#34;&gt;1.4. 删除普通用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;DROP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;DELETE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;host&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15-修改用户密码&#34;&gt;1.5. 修改用户密码&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;wangyan&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;%&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;xxx&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;16-root密码找回&#34;&gt;1.6. ROOT密码找回&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/my.cnf.d/server.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;在Mysqld区域添加skip-grant-table语句，重启
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mysql -u root -p &lt;span class=&#34;c1&#34;&gt;#免密码登陆数据库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;UPDATE mysql.user SET &lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; password&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; WHERE &lt;span class=&#34;nv&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;修改完成后将skip-grant-table属性去掉&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二mariadb-权限管理&#34;&gt;二、MariaDB 权限管理&lt;/h2&gt;
&lt;h3 id=&#34;21-查询所有权限&#34;&gt;2.1. 查询所有权限&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SHOW&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GRANTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FOR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查询指定用户权限&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SHOW&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;GRANTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FOR&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-收回用户授权&#34;&gt;2.2. 收回用户授权&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;REVOKE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;PRIVILEGES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-快速创建数据库和用户&#34;&gt;2.3. 快速创建数据库和用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;DROP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;IF&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;EXISTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;wangyan&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;DROP&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DATABASE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;IF&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;EXISTS&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan_gitea&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;DATABASE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan_gitea&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;CHARACTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;COLLATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;utf8mb4_general_ci&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三mariadb-数据操作&#34;&gt;三、MariaDB 数据操作&lt;/h2&gt;
&lt;h3 id=&#34;31-导入导出&#34;&gt;3.1. 导入导出&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysqldump&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;  &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;databasename&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;databasename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;u&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;databasename&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;databasename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;sql&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>MariaDB 从 Yum 源安装与配置</title>
        <link>https://www.bg7pbp.com/p/mariadb-install-yum/</link>
        <pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mariadb-install-yum/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-mariadb&#34;&gt;一、安装 MariaDB&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E6%B7%BB%E5%8A%A0-mariadb-yum-%E6%BA%90&#34;&gt;1.1. 添加 MariaDB Yum 源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85-mariadb&#34;&gt;1.2. 安装 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%90%AF%E5%8A%A8-mariadb&#34;&gt;1.3. 启动 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%AE%BE%E7%BD%AE-mariadb&#34;&gt;二、设置 MariaDB&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%88%9D%E5%A7%8B%E5%8C%96&#34;&gt;2.1. 初始化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E8%A7%A3%E5%86%B3-mariadb-%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81&#34;&gt;2.2. 解决 MariaDB 中文乱码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%AE%8C%E6%95%B4%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.3. 完整配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%B5%8B%E8%AF%95-mariadb&#34;&gt;三、测试 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装-mariadb&#34;&gt;一、安装 MariaDB&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://lug.ustc.edu.cn/wiki/mirrors/help/mariadb&#34;&gt;https://lug.ustc.edu.cn/wiki/mirrors/help/mariadb&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;11-添加-mariadb-yum-源&#34;&gt;1.1. 添加 MariaDB Yum 源&lt;/h3&gt;
&lt;p&gt;方法一：官方一键设置脚本（推荐）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：命令行工具&lt;/p&gt;
&lt;p&gt;使用 &lt;a href=&#34;https://downloads.mariadb.org/mariadb/repositories&#34;&gt;MariaDB Repository Configuration Tool&lt;/a&gt; 生成一份配置，保存为 &lt;code&gt;/etc/yum.repos.d/mariadb.repo&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/yum.repos.d/mariadb.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name = MariaDB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl = http://yum.mariadb.org/10.4/centos8-amd64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;module_hotfixes=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然后执行以下命令替换源地址：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s#yum\.mariadb\.org#mirrors.ustc.edu.cn/mariadb/yum#&amp;#39;&lt;/span&gt; /etc/yum.repos.d/mariadb.repo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 建议使用 HTTPS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s#http://mirrors\.ustc\.edu\.cn#https://mirrors.ustc.edu.cn#g&amp;#39;&lt;/span&gt; /etc/yum.repos.d/mariadb.repo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo dnf install MariaDB-server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start mariadb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装-mariadb&#34;&gt;1.2. 安装 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y MariaDB-server MariaDB-client MariaDB-shared
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install mariadb-server mariadb-client MariaDB-shared&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;RHEL 8&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum module install mariadb -y
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qi mariadb-server
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now mariadb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;MariaDB MaxScale:（选做）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install maxscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install maxscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Percona XtraBackup:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install percona-xtrabackup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install percona-xtrabackup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;cracklib_password_check:&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/cracklib-password-check-plugin/&#34;&gt;https://mariadb.com/kb/en/cracklib-password-check-plugin/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install MariaDB-cracklib-password-check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-启动-mariadb&#34;&gt;1.3. 启动 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; mariadb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二设置-mariadb&#34;&gt;二、设置 MariaDB&lt;/h2&gt;
&lt;h3 id=&#34;21-初始化&#34;&gt;2.1. 初始化&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;初始密码为空，直接回车。&lt;/li&gt;
&lt;li&gt;设置 root 密码&lt;/li&gt;
&lt;li&gt;是否移除匿名用户&lt;/li&gt;
&lt;li&gt;是否禁止 root 远程登录&lt;/li&gt;
&lt;li&gt;是否删除 &amp;rsquo;test&amp;rsquo; 测试数据库&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;22-解决-mariadb-中文乱码&#34;&gt;2.2. 解决 MariaDB 中文乱码&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&#34;&gt;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;/etc/my.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-filesystem &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8mb4_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-完整配置文件&#34;&gt;2.3. 完整配置文件&lt;/h3&gt;
&lt;p&gt;vim /etc/my.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/my.cnf&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is read both by the client and the server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client-server]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;port=3306
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;socket=/dev/shm/mysql.sock
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# include all files from the config directory
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;!includedir /etc/my.cnf.d
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vim /etc/my.cnf.d/client.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/my.cnf.d/client.cnf&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# These two groups are read by the client library
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Use it for options that affect all clients, but not the server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;default-character-set = utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# This group is not read by mysql client library,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client-mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/my.cnf.d/mariadb-server.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# These groups are read by MariaDB server.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use it for options that only the server (but not clients) should see&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# See the examples of server my.cnf files in /usr/share/mysql/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# this is read by the standalone daemon and embedded servers&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;server&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# this is only for the mysqld standalone daemon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Settings user and group are ignored when systemd is used.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you need to run mysqld under a different user or group,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# customize your systemd unit file for mysqld/mariadb according to the&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# instructions in http://fedoraproject.org/wiki/Systemd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;datadir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;socket&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/mysql/mysql.sock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;log-error&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/mariadb/mariadb.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pid-file&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/run/mariadb/mariadb.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-system&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-filesystem&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# * Galera-related settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;galera&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Mandatory settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#wsrep_on=ON&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#wsrep_provider=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#wsrep_cluster_address=&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#binlog_format=row&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#default_storage_engine=InnoDB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#innodb_autoinc_lock_mode=2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Allow server to accept connections on all interfaces.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#bind-address=0.0.0.0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Optional setting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#wsrep_slave_threads=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#innodb_flush_log_at_trx_commit=0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# this is only for embedded server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;embedded&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This group is only read by MariaDB servers, not by MySQL.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you use the same .cnf file for MySQL and MariaDB,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# you can put MariaDB-only options here&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# This group is only read by MariaDB-10.3 servers.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# If you use the same .cnf file for MariaDB of different versions,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# use this group for options that older servers don&amp;#39;t understand&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb-10.3&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/my.cnf.d/mysql-clients.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# These groups are read by MariaDB command-line tools&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Use it for options that affect only one utility&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8mb4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql_upgrade&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqladmin&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqlbinlog&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqlcheck&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqldump&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqlimport&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqlshow&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqlslap&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/my.cnf.d/auth_gssapi.cnf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;plugin-load-add&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;auth_gssapi.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/my.cnf.d/enable_encryption.preset&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# !include this file into your my.cnf (or any of *.cnf files in /etc/my.cnf.d)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# and it will enable data at rest encryption. This is a simple way to&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ensure that everything that can be encrypted will be and your&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# data will not leak unencrypted.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# DO NOT EDIT THIS FILE! On MariaDB upgrades it might be replaced with a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# newer version and your edits will be lost. Instead, add your edits&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to the .cnf file after the !include directive.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# NOTE that you also need to install an encryption plugin for the encryption&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# to work. See https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#encryption-key-management&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aria-encrypt-tables
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encrypt-binlog
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encrypt-tmp-disk-tables
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;encrypt-tmp-files
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loose-innodb-encrypt-log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;loose-innodb-encrypt-tables&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三测试-mariadb&#34;&gt;三、测试 MariaDB&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysqladmin -u root -p version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看效果&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql -uroot -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW VARIABLES WHERE Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;character\_set\_%&amp;#39;&lt;/span&gt; OR Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;collation%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;other&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;参考配置文件：/usr/share/mysql/
数据文件夹：/var/lib/mysql/
执行文件：/usr/bin/mysql&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/mariadb-package-repository-setup-and-usage/&#34;&gt;《MariaDB Package Repository Setup and Usage》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/yum/&#34;&gt;《Installing MariaDB with yum/dnf》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/mariadb-package-repository-setup-and-usage/&#34;&gt;《How To Install MariaDB on CentOS 7》&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/configuring-mariadb-with-option-files/&#34;&gt;《Configuring MariaDB with Option Files》&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Mariadb 启用 TLS 安全连接</title>
        <link>https://www.bg7pbp.com/p/mariadb-enable-tls/</link>
        <pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mariadb-enable-tls/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%A6%82%E8%BF%B0&#34;&gt;一、概述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%88%9B%E5%BB%BA%E8%87%AA%E7%AD%BE%E7%BD%B2%E8%AF%81%E4%B9%A6&#34;&gt;二、创建自签署证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cmariadb-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E5%90%AF%E7%94%A8-tls&#34;&gt;二、MariaDB 服务端启用 TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89mariadb-%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%90%AF%E7%94%A8-tls&#34;&gt;三、MariaDB 客户端启用 TLS&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E4%BB%80%E4%B9%88%E6%98%AF%E8%AF%81%E4%B9%A6%E9%AA%8C%E8%AF%81&#34;&gt;3.1. 什么是证书验证？&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9C%8D%E5%8A%A1%E7%AB%AF%E8%AF%81%E4%B9%A6%E9%AA%8C%E8%AF%81&#34;&gt;服务端证书验证&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%A2%E6%88%B7%E7%AB%AF%E8%AF%81%E4%B9%A6%E9%AA%8C%E8%AF%81&#34;&gt;客户端证书验证&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%8F%8C%E5%90%91-tls&#34;&gt;3.2. 双向 TLS&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E9%80%9A%E8%BF%87%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;（1）通过配置文件：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C&#34;&gt;（2）通过命令行：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%8D%95%E5%90%91-tls&#34;&gt;3.3. 单向 TLS&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E9%80%9A%E8%BF%87%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-1&#34;&gt;（1）通过配置文件：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C-1&#34;&gt;（2）通过命令行：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E5%8F%8C%E5%90%91-vs-%E5%8D%95%E5%90%91&#34;&gt;3.4. 双向 vs 单向&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E9%80%9A%E8%BF%87%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-2&#34;&gt;（1）通过配置文件：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E9%80%9A%E8%BF%87%E5%91%BD%E4%BB%A4%E8%A1%8C-2&#34;&gt;（2）通过命令行：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%BC%BA%E5%88%B6%E4%BD%BF%E7%94%A8-tls&#34;&gt;四、强制使用 TLS&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E7%89%B9%E5%AE%9A%E7%94%A8%E6%88%B7%E5%B8%90%E6%88%B7%E4%BD%BF%E7%94%A8-tls&#34;&gt;4.1. 特定用户帐户使用 TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E7%89%B9%E5%AE%9A%E4%B8%BB%E6%9C%BA%E7%9A%84%E7%89%B9%E5%AE%9A%E5%B8%90%E6%88%B7%E4%BD%BF%E7%94%A8-tls&#34;&gt;4.2 特定主机的特定帐户使用 TLS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8F%82%E8%80%83%E6%96%87%E6%A1%A3&#34;&gt;参考文档&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一概述&#34;&gt;一、概述&lt;/h2&gt;
&lt;p&gt;默认情况下，MariaDB 在服务器和客户端之间传输数据时不加密。当服务器和客户端运行在同一主机上保证处于安全的网络中时，这通常是可以接受的。然而，如果服务器和客户端位于不同的网络上或者位于高风险网络中，缺乏加密确实会带来安全问题，因为恶意行为者可能会窃听通过服务器和客户端之间的网络发送的流量。&lt;/p&gt;
&lt;p&gt;为了减轻这种担忧，MariaDB 允许您使用传输层安全 (TLS) 协议对服务器和客户端之间传输的数据进行加密。 TLS 以前称为安全套接字层 (SSL)，但严格来说，SSL 协议是 TLS 的前身，该版本的协议现在被认为是不安全的。MariaDB 文档仍然使用 SSL 术语表述，是出于兼容性原因，但实际上，MariaDB 仅支持 TLS。&lt;/p&gt;
&lt;h2 id=&#34;二创建自签署证书&#34;&gt;二、创建自签署证书&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://wangyan.craft.me/C8Vss6BJmtOGrM&#34;&gt;OpenSSL 自签署证书生成&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;生成服务器证书和客户端证书&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://code.wangyan.cloud//wangyan/gen-ssl-cert.git /tmp/gen-ssl-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /tmp/gen-ssl-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make init
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 根证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ca-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 中间证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-ica-chain
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 服务器证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-server-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 客户端证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-csr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-cert
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make gen-client-pkcs12&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;准备证书文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#准备目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /etc/my.cnf.d/certificates &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;777&lt;/span&gt; /etc/my.cnf.d/certificates &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod o+t /etc/my.cnf.d/certificates
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 服务端证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/gen-ssl-cert/ica/certs/ica-chain-cert.crt /etc/my.cnf.d/certificates/ca.pem &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/gen-ssl-cert/ica/certs/server-cert.crt /etc/my.cnf.d/certificates/server-cert.pem &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/gen-ssl-cert/ica/private/server-key.pem /etc/my.cnf.d/certificates/server-key.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 客户端证书&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/gen-ssl-cert/ica/certs/client-cert.crt /etc/my.cnf.d/certificates/client-cert.pem &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /tmp/gen-ssl-cert/ica/private/client-key.pem /etc/my.cnf.d/certificates/client-key.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 修改权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chown mysql:mysql -R /etc/my.cnf.d/certificates/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二mariadb-服务端启用-tls&#34;&gt;二、MariaDB 服务端启用 TLS&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;ssl_cert&lt;/code&gt; 设置服务器的 X509 证书的路径。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssl_key&lt;/code&gt; 设置服务器私钥的路径。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;ssl_ca&lt;/code&gt; 设置证书颁发机构 (CA) 链的路径，用来验证服务器证书。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt;/etc/my.cnf.d/enable_tls.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Use Secure Connections to transfer data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_ca = /etc/my.cnf.d/certificates/ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_cert = /etc/my.cnf.d/certificates/server-cert.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_key = /etc/my.cnf.d/certificates/server-key.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重启 &amp;amp; 检查&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 动态刷新证书，可不用重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FLUSH SSL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查 TLS 是否已启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW GLOBAL VARIABLES LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;have_ssl&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW SESSION STATUS LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;Ssl_cipher&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三mariadb-客户端启用-tls&#34;&gt;三、MariaDB 客户端启用 TLS&lt;/h2&gt;
&lt;h3 id=&#34;31-什么是证书验证&#34;&gt;3.1. 什么是证书验证？&lt;/h3&gt;
&lt;h4 id=&#34;服务端证书验证&#34;&gt;服务端证书验证&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;客户端根据证书中的某些属性检查服务器的主机名和 IP 地址来验证服务器证书。对于大多数客户端，默认情况下禁用服务器证书验证，并且仅在指定选项（例如&lt;code&gt;ssl-verify-server-cert&lt;/code&gt;指定）时才启用它。&lt;br&gt;
为了验证服务器的证书，客户端和实用程序将根据服务器的主机名和 IP 地址检查位于证书主题字段中的通用名称 (CN)属性。如果公用名 (CN)与其中任何一个匹配，则证书通过验证。&lt;br&gt;
使用主题备用名称 (SAN) 也叫 subjectAltName 进行服务器证书验证。当使用支持使用 subjectAltName 字段进行服务器证书验证的客户端时，如果服务器证书包含任何 subjectAltName 字段，则还将根据服务器的主机名和 IP 地址检查这些字段。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;客户端证书验证&#34;&gt;客户端证书验证&lt;/h4&gt;
&lt;blockquote&gt;
&lt;p&gt;服务器通过&lt;code&gt;SUBJECT&lt;/code&gt;根据客户端证书中的&lt;strong&gt;主题&lt;/strong&gt;属性检查客户端的已知信息来验证客户端证书。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;32-双向-tls&#34;&gt;3.2. 双向 TLS&lt;/h3&gt;
&lt;p&gt;双向 TLS 意味着客户端和服务器都提供私钥和 X509 证书，客户端和服务器都要验证彼此身份。&lt;/p&gt;
&lt;p&gt;即客户端要对服务端证书进行验证。同时，服务端也要对客户端的证书进行验证。&lt;/p&gt;
&lt;h4 id=&#34;1通过配置文件&#34;&gt;（1）通过配置文件：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt;&amp;gt;/etc/my.cnf.d/enable_tls.cnf&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[client-mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_cert = /etc/my.cnf.d/certificates/client-cert.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_key = /etc/my.cnf.d/certificates/client-key.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl_ca = /etc/my.cnf.d/certificates/ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ssl-verify-server-cert
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;2通过命令行&#34;&gt;（2）通过命令行：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mariadb -u myuser -p -h myserver.mydomain.com &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-cert&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/my.cnf.d/certificates/client-cert.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-key&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/my.cnf.d/certificates/client-key.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-ca&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/my.cnf.d/certificates/ca.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-verify-server-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-单向-tls&#34;&gt;3.3. 单向 TLS&lt;/h3&gt;
&lt;p&gt;当在没有客户端证书的情况下使用 TLS 时，称为单向 TLS，因为只有服务器提供私钥和 X509 证书，因此只能在一个方向进行身份验证。然而，双向加密仍然是可能的。服务器证书验证是指客户端验证证书是否属于服务器。&lt;/p&gt;
&lt;h4 id=&#34;1通过配置文件-1&#34;&gt;（1）通过配置文件：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client-mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ssl_ca&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /etc/my.cnf.d/certificates/ca.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssl-verify-server-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;2通过命令行-1&#34;&gt;（2）通过命令行：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mariadb -u myuser -p -h myserver.mydomain.com &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-ca&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/my.cnf.d/certificates/ca.pem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl-verify-server-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-双向-vs-单向&#34;&gt;3.4. 双向 vs 单向&lt;/h3&gt;
&lt;p&gt;不管是双向还是单向，都要对服务器证书进行验证。区别在于单向没有指定客户端证书，因此，服务器不能验证客户端，但客户端都能验证服务端。&lt;/p&gt;
&lt;p&gt;当然了，还有一种情况是，启用了单向 TLS，但是也不验证服务器证书&lt;/p&gt;
&lt;p&gt;方法如下：&lt;/p&gt;
&lt;h4 id=&#34;1通过配置文件-2&#34;&gt;（1）通过配置文件：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client-mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;2通过命令行-2&#34;&gt;（2）通过命令行：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mariadb -u myuser -p -h myserver.mydomain.com &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   --ssl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四强制使用-tls&#34;&gt;四、强制使用 TLS&lt;/h2&gt;
&lt;h3 id=&#34;41-特定用户帐户使用-tls&#34;&gt;4.1. 特定用户帐户使用 TLS&lt;/h3&gt;
&lt;p&gt;您可以为特定用户帐户设置 TLS 相关的限制，例如，需要访问敏感数据的用户帐户。可以使用 &lt;code&gt;CREATE USER&lt;/code&gt;、&lt;code&gt;ALTER USER&lt;/code&gt; 或 &lt;code&gt;GRANT&lt;/code&gt; 语句为用户帐户启用这些限制。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;(1) 必须通过 TLS 连接&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REQUIRE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SSL&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;(2) 必须通过 TLS 且是有效的客户端证书&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REQUIRE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;X509&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;(3) 必须通过 TLS 且是特定的客户端证书&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REQUIRE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SUBJECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-特定主机的特定帐户使用-tls&#34;&gt;4.2 特定主机的特定帐户使用 TLS&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REQUIRE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;NONE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;CREATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;alice&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REQUIRE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SUBJECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ISSUER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/emailAddress=p.parker@marvel.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;   &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;CIPHER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;ECDHE-ECDSA-AES256-SHA384&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://code.wangyan.cloud//wangyan/gen-ssl-cert.git /tmp/gen-ssl-cert&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;参考文档&#34;&gt;参考文档&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/secure-connections-overview/&#34;&gt;Secure Connections Overview&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/securing-connections-for-client-and-server/&#34;&gt;Securing Connections for Client and Server&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/connecting-to-mariadb/&#34;&gt;Connecting to MariaDB&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Mariadb 日志审计与密码插件</title>
        <link>https://www.bg7pbp.com/p/mariadb-log-audit-password/</link>
        <pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mariadb-log-audit-password/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%90%AF%E7%94%A8%E6%97%A5%E5%BF%97&#34;&gt;一、启用日志&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E9%94%99%E8%AF%AF%E6%97%A5%E5%BF%97&#34;&gt;1.1. 错误日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E9%80%9A%E7%94%A8%E6%9F%A5%E8%AF%A2%E6%97%A5%E5%BF%97&#34;&gt;1.2. 通用查询日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%97%A5%E5%BF%97&#34;&gt;1.3. 二进制日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E6%B8%85%E9%99%A4%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%97%A5%E5%BF%97&#34;&gt;1.4. 清除二进制日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E6%85%A2%E6%9F%A5%E8%AF%A2%E6%97%A5%E5%BF%97&#34;&gt;1.5. 慢查询日志&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%BD%AE%E6%8D%A2%E6%97%A5%E5%BF%97&#34;&gt;二、轮换日志&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-logrotate&#34;&gt;2.1. Logrotate&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#211-%E8%BA%AB%E4%BB%BD%E9%AA%8C%E8%AF%81&#34;&gt;2.1.1. 身份验证&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#212-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.1.2. 配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-journal&#34;&gt;2.2. Journal&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%90%AF%E7%94%A8%E5%AE%A1%E8%AE%A1&#34;&gt;三、启用审计&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E5%BC%80%E5%90%AF%E5%AE%A1%E8%AE%A1&#34;&gt;3.1. 查看当前开启审计&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%90%AF%E7%94%A8%E5%AE%A1%E8%AE%A1&#34;&gt;3.2. 启用审计&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E9%87%8D%E5%90%AF&#34;&gt;3.3. 重启&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%AF%86%E7%A0%81%E6%8F%92%E4%BB%B6&#34;&gt;四、密码插件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-simple_password_check&#34;&gt;4.1. simple_password_check&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-cracklib_password_check&#34;&gt;4.2. cracklib_password_check&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一启用日志&#34;&gt;一、启用日志&lt;/h2&gt;
&lt;h3 id=&#34;11-错误日志&#34;&gt;1.1. 错误日志&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/error-log/&#34;&gt;Error Log&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/mariadb-logs.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;......
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Error Log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_error&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/mariadb/error.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_warnings&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;日志详细程度：0-9，默认值为 2&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;12-通用查询日志&#34;&gt;1.2. 通用查询日志&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/general-query-log/&#34;&gt;General Query Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;通用查询日志是从客户端接收到的每个 SQL 查询以及每个客户端连接和断开连接的日志。由于它是服务器收到的每个查询的记录，因此它可能会很快变大。&lt;/p&gt;
&lt;p&gt;但是，如果您只想记录更改数据的查询，那么最好使用二进制日志。一个重要的区别是，二进制日志仅在服务器提交事务时记录查询，而通用查询日志在服务器接收到查询后立即记录查询。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/mariadb-logs.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;......
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# General Query Log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;general_log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FILE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;general_log_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/mariadb/queries.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_disabled_statements&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;slave,sp&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-二进制日志&#34;&gt;1.3. 二进制日志&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/binary-log/&#34;&gt;Binary Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;二进制日志包含对数据库的所有更改（数据和结构）以及每个语句执行所需时间的记录。它由一组二进制日志文件和一个索引组成。&lt;/p&gt;
&lt;p&gt;这意味着诸如 CREATE、ALTER、INSERT、UPDATE 和 DELETE 之类的语句将被记录，但对数据没有影响的语句（如 SELECT 和 SHOW ）将不会被记录。如果您想记录这些（以性能为代价），请使用通用查询日志。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/mariadb-logs.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Binary Log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# datadir/log-basename-bin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_bin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_basename&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;binlog_format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mixed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;expire_logs_days&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;max_binlog_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;512M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;max_binlog_total_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;5G
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--binlog-ignore-db&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;database_name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-清除二进制日志&#34;&gt;1.4. 清除二进制日志&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/purge-binary-logs/&#34;&gt;PURGE BINARY LOGS&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 列出所有日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW BINARY LOGS&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看正在读取的文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW SLAVE STATUS&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除所有二进制日志文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RESET MASTER&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 清除到指定位置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PURGE BINARY LOGS TO &lt;span class=&#34;s1&#34;&gt;&amp;#39;mariadb-bin.000057&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 清除指定日期之前的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PURGE BINARY LOGS BEFORE &lt;span class=&#34;s1&#34;&gt;&amp;#39;2019-04-02 22:46:26&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 清除3天前的日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#SELECT DATE_SUB(CURRENT_DATE, INTERVAL 3 DAY);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PURGE MASTER LOGS BEFORE DATE_SUB&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;CURRENT_DATE, INTERVAL &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; DAY&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PURGE BINARY LOGS BEFORE DATE_SUB&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;CURRENT_DATE, INTERVAL &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; DAY&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15-慢查询日志&#34;&gt;1.5. 慢查询日志&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/slow-query-log/&#34;&gt;Slow Query Log&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;慢查询日志是执行时间较长的 SQL 查询的记录。&lt;/p&gt;
&lt;p&gt;请注意，如果您的查询包含用户的密码，则慢查询日志也可能包含密码。因此，应该对其进行保护。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/mariadb-logs.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;......
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## Slow Query Log&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_output&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FILE
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slow_query_log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;slow_query_log_file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/mariadb/slow.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;long_query_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;5.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_queries_not_using_indexes&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_slow_admin_statements&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_slow_rate_limit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;long_query_time&lt;/code&gt; 定义慢速查询的时间&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_queries_not_using_indexes&lt;/code&gt; 记录不使用索引的查询&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_slow_admin_statements&lt;/code&gt; 记录缓慢的管理语句&lt;/li&gt;
&lt;li&gt;&lt;code&gt;log_slow_rate_limit&lt;/code&gt; 限制每10次慢查询才记录一次&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二轮换日志&#34;&gt;二、轮换日志&lt;/h2&gt;
&lt;h3 id=&#34;21-logrotate&#34;&gt;2.1. Logrotate&lt;/h3&gt;
&lt;h4 id=&#34;211-身份验证&#34;&gt;2.1.1. 身份验证&lt;/h4&gt;
&lt;p&gt;使用 MariaDB 进行身份验证的最简单方法是将用户帐户配置 &lt;code&gt;root@localhost&lt;/code&gt; 为使用 &lt;code&gt;unix_socket&lt;/code&gt; 身份验证。&lt;/p&gt;
&lt;p&gt;在MariaDB 10.4及更高版本不许设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;ALTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;USER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VIA&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unix_socket&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;212-配置文件&#34;&gt;2.1.2. 配置文件&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/logrotate.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/etc/logrotate.d/&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ sudo tee /etc/logrotate.d/mariadb &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/var/log/mysql/* {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        su mysql mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        missingok
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        create 660 mysql mysql
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        notifempty
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        daily
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        minsize 1M
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        maxsize 100M
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        rotate 30
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        dateext
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        dateformat .%Y-%m-%d-%H-%M-%S
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        compress
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        delaycompress
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        sharedscripts 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        olddir archive/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        createolddir 770 mysql mysql # only use with logrotate &amp;gt;= 3.8.9
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    postrotate
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        # just if mysqld is really running
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        if test -x /usr/local/mysql/bin/mysqladmin &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;           /usr/local/mysql/bin/mariadb-admin ping &amp;amp;&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        then
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;           /usr/local/mysql/bin/mariadb-admin --local flush-error-log \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;              flush-engine-log flush-general-log flush-slow-log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;        fi
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;    endscript
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重要参数：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;daily&lt;/code&gt;：每天轮换每个日志文件一次。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;minsize 1M&lt;/code&gt;：该指令将其配置为在日志轮转期间跳过小于 1 MB 的日志文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;maxsize 100M&lt;/code&gt;：此指令将其配置为在日志文件增长超过 100 MB 时比每天更频繁地轮换日志文件。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;rotate 30&lt;/code&gt;：该指令将其配置为保留每个日志文件的 30 个旧副本。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dateext&lt;/code&gt;：该指令将其配置为使用日期作为扩展名，而不仅仅是数字。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;olddir archive/&lt;/code&gt;：该指令将其配置为将轮换日志文件存档在&lt;code&gt;/var/log/mariadb/archive/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-journal&#34;&gt;2.2. Journal&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;systemd-journal&lt;/code&gt; 是一个改进型的日志管理服务。&lt;/p&gt;
&lt;p&gt;常见用法如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;查看文件情况&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;du&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;--max-depth=1 /var/log
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;日志总体磁盘占用情况&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;journalctl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;--disk-usage
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;硬性指定日志总体体积，删除超出部分&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;journalctl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;--vacuum-size=10M
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;只保留近一周的日志&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;journalctl&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;c1&#34;&gt;--vacuum-time=1w
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;直接删除&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;journal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;目录下的日志文件&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;rm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rf&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;journal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;f9d400c5e1e8c3a8209e990d887d4ac1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三启用审计&#34;&gt;三、启用审计&lt;/h2&gt;
&lt;h3 id=&#34;31-查看当前开启审计&#34;&gt;3.1. 查看当前开启审计&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;variables&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;like&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%audit%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果没有，则先查看审计插件目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SHOW&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;VARIABLES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;LIKE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;plugin_dir&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-启用审计&#34;&gt;3.2. 启用审计&lt;/h3&gt;
&lt;p&gt;具体参数详见官方文档：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb-audit-plugin-options-and-system-variables&#34;&gt;MariaDB Audit Plugin Options and System Variables&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/server-audit.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## MariaDB Audit Plugin&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_events&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL,QUERY_DML_NO_SELECT
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_file_path&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/mariadb/server_audit.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_file_rotate_size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;100M
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_file_rotations&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_logging&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;ON
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit_output_type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;file
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;server_audit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;FORCE_PLUS_PERMANENT&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-重启&#34;&gt;3.3. 重启&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl restart mariadb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四密码插件&#34;&gt;四、密码插件&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/password-validation/&#34;&gt;Password Validation Plugin API&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;41-simple_password_check&#34;&gt;4.1. simple_password_check&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/library/simple-password-check-plugin/&#34;&gt;Simple Password Check Plugin&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /etc/my.cnf.d/simple_password_check.cnf&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Password Validation&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;plugin_load_add&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; simple_password_check.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;simple_password_check_digits&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;simple_password_check_letters_same_case&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;simple_password_check_minimal_length&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;simple_password_check_other_characters&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-cracklib_password_check&#34;&gt;4.2. cracklib_password_check&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/cracklib-password-check-plugin/&#34;&gt;Cracklib Password Check Plugin&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install MariaDB-cracklib-password-check
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install mariadb-plugin-cracklib-password-check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mariadb&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;plugin_load_add&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; cracklib_password_check&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Tailscale 安装部署教程</title>
        <link>https://www.bg7pbp.com/p/tailscale-headscale-deploy/</link>
        <pubDate>Thu, 07 Nov 2024 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/tailscale-headscale-deploy/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E5%AE%89%E8%A3%85-tailscale-%E6%8E%A7%E5%88%B6%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;1. 安装 Tailscale 控制服务器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E4%B8%8B%E8%BD%BD-headscale-%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6&#34;&gt;1.1. 下载 headscale 二进制文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%88%9B%E5%BB%BA-headscale-%E7%94%A8%E6%88%B7&#34;&gt;1.2. 创建 headscale 用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%AD%98%E5%82%A8%E7%9B%AE%E5%BD%95&#34;&gt;1.3. 创建数据存储目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E5%88%9B%E5%BB%BA%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;1.4. 创建配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-nginx-%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E9%85%8D%E7%BD%AE&#34;&gt;1.5. Nginx 反向代理配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#16-%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%90%AF%E5%8A%A8%E6%96%87%E4%BB%B6&#34;&gt;1.6. 系统自启动文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#17-%E5%90%AF%E5%8A%A8--%E5%8D%B8%E8%BD%BD&#34;&gt;1.7. 启动 &amp;amp;&amp;amp; 卸载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#18-%E4%BD%BF%E7%94%A8-headscale-%E5%88%9B%E5%BB%BA%E7%94%A8%E6%88%B7&#34;&gt;1.8. 使用 Headscale 创建用户&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E5%AE%89%E8%A3%85-tailscale-%E5%AE%A2%E6%88%B7%E7%AB%AF&#34;&gt;2. 安装 Tailscale 客户端&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85-linux-%E5%AE%A2%E6%88%B7%E7%AB%AF&#34;&gt;2.1. 安装 linux 客户端&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#211-%E5%AE%89%E8%A3%85&#34;&gt;2.1.1. &lt;strong&gt;安装&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#212-%E5%90%AF%E5%8A%A8&#34;&gt;2.1.2. &lt;strong&gt;启动&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#213-%E5%8D%B8%E8%BD%BD&#34;&gt;2.1.3. 卸载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85-windows-%E5%AE%A2%E6%88%B7%E7%AB%AF&#34;&gt;2.2. 安装 windows 客户端&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E6%B3%A8%E5%86%8C-tailscale-%E8%8A%82%E7%82%B9&#34;&gt;2.3. 注册 tailscale 节点&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#231-%E6%96%B9%E6%B3%951%E6%AD%A3%E5%B8%B8%E7%99%BB%E5%BD%95&#34;&gt;2.3.1. &lt;strong&gt;方法1：正常登录&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#232-%E6%96%B9%E6%B3%952%E4%BD%BF%E7%94%A8%E9%A2%84%E8%AE%A4%E8%AF%81%E5%AF%86%E9%92%A5%E6%B3%A8%E5%86%8C%E6%9C%BA%E5%99%A8&#34;&gt;2.3.2. &lt;strong&gt;方法2：使用预认证密钥注册机器&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%80%E5%90%AF%E5%AD%90%E7%BD%91%E8%B7%AF%E7%94%B1&#34;&gt;2.4. 客户端开启子网路由&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#241-%E5%BC%80%E5%90%AF-ip-%E8%BD%AC%E5%8F%91&#34;&gt;2.4.1. 开启 IP 转发&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#242-%E6%8C%87%E5%AE%9A%E5%AD%90%E7%BD%91%E5%9C%B0%E5%9D%80&#34;&gt;2.4.2. 指定子网地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#243-%E6%89%B9%E5%87%86%E5%AD%90%E7%BD%91%E8%B7%AF%E7%94%B1&#34;&gt;2.4.3. 批准子网路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#244-%E6%B5%8B%E8%AF%95&#34;&gt;2.4.4. 测试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E9%83%A8%E7%BD%B2%E7%A7%81%E6%9C%89-derp-%E4%B8%AD%E7%BB%A7%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;3. 部署私有 DERP 中继服务器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E4%B8%AD%E7%BB%A7%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE&#34;&gt;3.1. 中继服务器配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E6%8E%A7%E5%88%B6%E6%9C%8D%E5%8A%A1%E5%99%A8%E9%85%8D%E7%BD%AE&#34;&gt;3.2. 控制服务器配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-derp-%E5%90%AF%E7%94%A8--tls-%E6%94%AF%E6%8C%81&#34;&gt;3.3. DERP 启用  TLS 支持&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#331-%E4%BF%AE%E6%94%B9-derp-%E9%85%8D%E7%BD%AE&#34;&gt;3.3.1. 修改 DERP 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#332-%E4%BF%AE%E6%94%B9-nginx-%E9%85%8D%E7%BD%AE&#34;&gt;3.3.2. 修改 Nginx 配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E5%BC%80%E5%90%AF-headscale-%E8%BF%9C%E7%A8%8B%E6%8E%A7%E5%88%B6&#34;&gt;4. 开启 headscale 远程控制&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E9%80%9A%E8%BF%87-remote-cli-%E8%BF%9C%E6%8E%A7&#34;&gt;4.1. 通过 Remote CLI 远控&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#411-%E5%90%AF%E7%94%A8-tls&#34;&gt;4.1.1. 启用 TLS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#412-%E5%90%AF%E7%94%A8-grpc&#34;&gt;4.1.2. 启用 gRPC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#413-%E5%88%9B%E5%BB%BA-api-key&#34;&gt;4.1.3. 创建 API key&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#414-%E8%AE%BE%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F&#34;&gt;4.1.4. 设置环境变量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E9%80%9A%E8%BF%87-ui-%E9%9D%A2%E6%9D%BF%E8%BF%9C%E6%8E%A7&#34;&gt;4.2. 通过 UI 面板远控&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#421-docker-composeyml&#34;&gt;4.2.1. docker-compose.yml&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#422-nginx&#34;&gt;4.2.2. Nginx&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-安装-tailscale-控制服务器&#34;&gt;1. 安装 Tailscale 控制服务器&lt;/h2&gt;
&lt;h3 id=&#34;11-下载-headscale-二进制文件&#34;&gt;1.1. 下载 headscale 二进制文件&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;官方文档：&lt;a href=&#34;https://headscale.net/running-headscale-linux&#34;&gt;https://headscale.net/running-headscale-linux&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;最新版本：&lt;a href=&#34;https://github.com/juanfont/headscale/releases&#34;&gt;https://github.com/juanfont/headscale/releases&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;加速工具：&lt;a href=&#34;https://mirror.ghproxy.com/&#34;&gt;https://mirror.ghproxy.com/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 下载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://github.com/juanfont/headscale/releases/download/v0.23.0/headscale_0.23.0_linux_amd64  -O /usr/local/bin/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 增加可执行权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/local/bin/headscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-创建-headscale-用户&#34;&gt;1.2. 创建 headscale 用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --create-home &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --home-dir /var/lib/headscale/ &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --system &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --user-group &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  --shell /usr/sbin/nologin &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  headscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-创建数据存储目录&#34;&gt;1.3. 创建数据存储目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 配置文件目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /etc/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据存储与证书目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /var/lib/headscale /var/run/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建空的 SQLite 数据库文件：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch /var/lib/headscale/db.sqlite
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R headscale:headscale /var/lib/headscale /etc/headscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-创建配置文件&#34;&gt;1.4. 创建配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://mirror.ghproxy.com/https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R headscale:headscale /var/lib/headscale /etc/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 根据自身情况修改&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/headscale/config.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server_url: https://headscale.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;listen_addr: 127.0.0.1:8181
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;base_domain: wangyan.cloud/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15-nginx-反向代理配置&#34;&gt;1.5. Nginx 反向代理配置&lt;/h3&gt;
&lt;p&gt;选做，需将上面 &lt;code&gt;server_url&lt;/code&gt; 改成 &lt;code&gt;ip+端口&lt;/code&gt; 的形式。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen               &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt; ssl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen               &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;::&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:443 ssl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    http2                on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    server_name          headscale.wangyan.cloud/&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# SSL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssl_certificate      /etc/nginx/ssl-certs/wangyan.cloud/_ecc/fullchain.cer&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssl_certificate_key  /etc/nginx/ssl-certs/wangyan.cloud/_ecc/wangyan.cloud/.key&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# logging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    access_log           /var/log/nginx/wangyan.cloud//headscale-access.log combined &lt;span class=&#34;nv&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;512k &lt;span class=&#34;nv&#34;&gt;flush&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1m&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    error_log            /var/log/nginx/wangyan.cloud//headscale-error.log warn&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# reverse proxy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass       http://localhost:8181&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include          nginx-config/proxy.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;16-系统自启动文件&#34;&gt;1.6. 系统自启动文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;cat &amp;gt;/etc/systemd/system/headscale.service&amp;#34;&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Unit]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Description=headscale controller
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;After=syslog.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;After=network.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Service]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Type=simple
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;User=headscale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Group=headscale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ExecStart=/usr/local/bin/headscale serve
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Restart=always
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;RestartSec=5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Optional security enhancements
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;NoNewPrivileges=yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;PrivateTmp=yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ProtectSystem=strict
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ProtectHome=yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ReadWritePaths=/var/lib/headscale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;AmbientCapabilities=CAP_NET_BIND_SERVICE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;RuntimeDirectory=headscale
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Install]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;WantedBy=multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;17-启动--卸载&#34;&gt;1.7. 启动 &amp;amp;&amp;amp; 卸载&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 启动&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 卸载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /var/lib/headscale /etc/headscale /var/run/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看占用端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ss -tulnp&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep headscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;18-使用-headscale-创建用户&#34;&gt;1.8. 使用 Headscale 创建用户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale user create admin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale user list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale user destroy admin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-安装-tailscale-客户端&#34;&gt;2. 安装 Tailscale 客户端&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;稳定版：&lt;a href=&#34;https://pkgs.tailscale.com/stable/&#34;&gt;https://pkgs.tailscale.com/stable/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;最新版：&lt;a href=&#34;https://pkgs.tailscale.com/unstable/&#34;&gt;https://pkgs.tailscale.com/unstable/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;21-安装-linux-客户端&#34;&gt;2.1. 安装 linux 客户端&lt;/h3&gt;
&lt;h4 id=&#34;211-安装&#34;&gt;2.1.1. &lt;strong&gt;安装&lt;/strong&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://pkgs.tailscale.com/unstable/tailscale_1.77.67_amd64.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf tailscale_*.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; tailscale_*_amd64
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp tailscaled /usr/sbin/tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp tailscale /usr/bin/tailscale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;212-启动&#34;&gt;2.1.2. &lt;strong&gt;启动&lt;/strong&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp systemd/tailscaled.service /lib/systemd/system/tailscaled.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp systemd/tailscaled.defaults /etc/default/tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; --now tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl status tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart tailscaled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;213-卸载&#34;&gt;2.1.3. 卸载&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /var/lib/tailscale/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 彻底删除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable tailscaled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /usr/sbin/tailscaled /usr/bin/tailscale 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /lib/systemd/system/tailscaled.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /etc/default/tailscaled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装-windows-客户端&#34;&gt;2.2. 安装 windows 客户端&lt;/h3&gt;
&lt;p&gt;安装完毕后，打开 &lt;a href=&#34;https://headscale.wangyan.cloud//windows&#34;&gt;https://headscale.wangyan.cloud//windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;按照提示下载 &lt;a href=&#34;https://headscale.wangyan.cloud//windows/tailscale.reg&#34;&gt;注册表文件&lt;/a&gt; ，最后再登陆。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 下载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://pkgs.tailscale.com/unstable/tailscale-setup-full-1.77.67.exe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 登陆&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale login --login-server https://headscale.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 进阶设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# tailscale up --login-server=https://headscale.wangyan.cloud/ --advertise-routes=192.168.57.0/24 --accept-dns=false --accept-routes&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-注册-tailscale-节点&#34;&gt;2.3. 注册 tailscale 节点&lt;/h3&gt;
&lt;h4 id=&#34;231-方法1正常登录&#34;&gt;2.3.1. &lt;strong&gt;方法1：正常登录&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在客户端机上，运行 tailscale 登录命令：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 无需开启子网路由&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale up --login-server https://headscale.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 需要开启子网路由的情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale up &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --accept-routes &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --advertise-routes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;192.168.10.0/24 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; --login-server&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://headscale.wangyan.cloud/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;会生成如下链接：&lt;code&gt;https://headscale.wangyan.cloud/:443/register/mkey:xxx&lt;/code&gt; ，复制到浏览器。&lt;/p&gt;
&lt;p&gt;然后，在 Tailscale 控制服务器上注册节点&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale nodes register --user admin --key mkey:xxx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale nodes list &lt;span class=&#34;c1&#34;&gt;#列出节点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale nodes delete  -i &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#删除指定节点&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale nodes rename android -i &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 重命名&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;232-方法2使用预认证密钥注册机器&#34;&gt;2.3.2. &lt;strong&gt;方法2：使用预认证密钥注册机器&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;适用于移动客户端，不方便登录等情形。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 生成密钥&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale --user admin preauthkeys create --reusable --expiration 24h
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注册&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale up --login-server&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://headscale.wangyan.cloud/ --authkey &amp;lt;YOUR_AUTH_KEY&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24-客户端开启子网路由&#34;&gt;2.4. 客户端开启子网路由&lt;/h3&gt;
&lt;p&gt;官方文档： &lt;a href=&#34;https://tailscale.com/kb/1019/subnets&#34;&gt;Subnet routers and traffic relay nodes&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install the Tailscale client.&lt;/li&gt;
&lt;li&gt;Connect to Tailscale as a subnet router.&lt;/li&gt;
&lt;li&gt;Enable subnet routes from the admin console.&lt;/li&gt;
&lt;li&gt;Add access rules for advertised subnet routes.&lt;/li&gt;
&lt;li&gt;Verify your connection.&lt;/li&gt;
&lt;li&gt;Use your subnet routes from other devices.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;241-开启-ip-转发&#34;&gt;2.4.1. 开启 IP 转发&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;net.ipv4.ip_forward = 1&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a /etc/sysctl.d/ipforwarding.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;net.ipv6.conf.all.forwarding = 1&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a /etc/sysctl.d/ipforwarding.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -p /etc/sysctl.d/ipforwarding.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;firewalld&lt;/code&gt; 防火墙的系统，需打开 masquerade&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --permanent --add-masquerade&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;iptables&lt;/code&gt; 系统，可以查看路由情况&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -S
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iptables -S -t nat&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;242-指定子网地址&#34;&gt;2.4.2. 指定子网地址&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale up --advertise-routes&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;192.168.0.0/24,192.168.1.0/24 &lt;span class=&#34;c1&#34;&gt;#设置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; --advertise-routes &lt;span class=&#34;s2&#34;&gt;&amp;#34;192.168.10.0/24&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#修改&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;243-批准子网路由&#34;&gt;2.4.3. 批准子网路由&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 在控制服务器查看子网路由开启情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale routes list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除路由&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale routes delete -r &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#批准指定网段&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale routes &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; -r &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;244-测试&#34;&gt;2.4.4. 测试&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale netcheck
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale ping 192.168.10.100&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;3-部署私有-derp-中继服务器&#34;&gt;3. 部署私有 DERP 中继服务器&lt;/h2&gt;
&lt;h3 id=&#34;31-中继服务器配置&#34;&gt;3.1. 中继服务器配置&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vim docker-compose.yml&lt;/code&gt; 不需要特殊权限，可以直接 &lt;code&gt;docker compose up -d&lt;/code&gt; 启动&lt;/p&gt;
&lt;p&gt;项目网址：&lt;a href=&#34;https://hub.docker.com/r/sparanoid/derp&#34;&gt;https://hub.docker.com/r/sparanoid/derp&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  derp:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: sparanoid/derp:edge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: derp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    hostname: derp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;8282:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;3478:3478/udp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    command: derper -a :80 -verify-clients true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然后，配置Ngixn反向代理&lt;code&gt;vim derp.wangyan.cloud/.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen               &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt; ssl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen               &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;::&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;:443 ssl&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    http2                on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    server_name          derp.wangyan.cloud/&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# SSL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssl_certificate      /etc/nginx/ssl-certs/wangyan.cloud/_ecc/fullchain.cer&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ssl_certificate_key  /etc/nginx/ssl-certs/wangyan.cloud/_ecc/wangyan.cloud/.key&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# logging&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    access_log           /var/log/nginx/wangyan.cloud//derp-access.log combined &lt;span class=&#34;nv&#34;&gt;buffer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;512k &lt;span class=&#34;nv&#34;&gt;flush&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1m&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    error_log            /var/log/nginx/wangyan.cloud//derp-error.log warn&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# reverse proxy&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass       http://localhost:8282&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include          nginx-config/proxy.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-控制服务器配置&#34;&gt;3.2. 控制服务器配置&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vim /etc/headscale/derp.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;regions:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  901:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    regionid: &lt;span class=&#34;m&#34;&gt;901&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    regioncode: DERP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    regionname: &lt;span class=&#34;s2&#34;&gt;&amp;#34;Custom DERP&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    nodes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - name: vps-tc-gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        regionid: &lt;span class=&#34;m&#34;&gt;901&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        hostname: derp.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        stunport: &lt;span class=&#34;m&#34;&gt;3478&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        stunonly: &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        derpport: &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;vim /etc/headscale/config.yaml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除掉官方derp服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;urls: &lt;span class=&#34;o&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 自定义配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; paths:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    - /etc/headscale/derp.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;启动 &amp;amp;&amp;amp; 检查&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tailscale netcheck&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-derp-启用--tls-支持&#34;&gt;3.3. DERP 启用  TLS 支持&lt;/h3&gt;
&lt;h4 id=&#34;331-修改-derp-配置&#34;&gt;3.3.1. 修改 DERP 配置&lt;/h4&gt;
&lt;p&gt;开启 &lt;code&gt;verify-clients true&lt;/code&gt; 客户端验证，需要确保 &lt;code&gt;tailscale&lt;/code&gt; 已经正常启动。&lt;/p&gt;
&lt;p&gt;这里有个巨坑：请务必确保先启动 &lt;code&gt;headscale&lt;/code&gt; 和 &lt;code&gt;tailscale&lt;/code&gt; 后，再启动 &lt;code&gt;derp 容器&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /docker-compose.yml&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  derp:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: sparanoid/derp:edge
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart: always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    init: &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: derp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    hostname: derp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;8383:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;8443:443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - &lt;span class=&#34;s2&#34;&gt;&amp;#34;3478:3478/udp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/nginx/ssl-certs/wangyan.cloud/_ecc/fullchain.cer:/app/certs/derp.wangyan.cloud/.crt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /etc/nginx/ssl-certs/wangyan.cloud/_ecc/wangyan.cloud/.key:/app/certs/derp.wangyan.cloud/.key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    command: sh -c &lt;span class=&#34;s2&#34;&gt;&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;      derper \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        -hostname derp.wangyan.cloud/ \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        -certdir /app/certs \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        -certmode manual \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;        -verify-clients true&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;tailscaled&lt;/code&gt; 没启动是很多错误出现的原因，可通过下面命令验证：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl --unix-socket /var/run/tailscale/tailscaled.sock &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://local-tailscaled.sock/localapi/v0/whois?addr=nodekey%3Axxx&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;332-修改-nginx-配置&#34;&gt;3.3.2. 修改 Nginx 配置&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proxy_pass       https://127.0.0.1:8443&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4-开启-headscale-远程控制&#34;&gt;4. 开启 headscale 远程控制&lt;/h2&gt;
&lt;p&gt;远程控制需要开启 &lt;code&gt;remote CLI&lt;/code&gt; 功能，这里面有个坑是必须开启 &lt;code&gt;headscale&lt;/code&gt; 服务器内置的 &lt;code&gt;tls&lt;/code&gt; 支持，通过 &lt;code&gt;nginx&lt;/code&gt; 反代实现的 &lt;code&gt;ssl&lt;/code&gt; 是不行的。&lt;/p&gt;
&lt;h3 id=&#34;41-通过-remote-cli-远控&#34;&gt;4.1. 通过 Remote CLI 远控&lt;/h3&gt;
&lt;p&gt;官方文档：&lt;a href=&#34;https://headscale.net/remote-cli/&#34;&gt;https://headscale.net/remote-cli/&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;411-启用-tls&#34;&gt;4.1.1. 启用 TLS&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;vim /etc/headscale/config.yaml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;要使用自定义证书，只填写以下两个选项，其他勿填。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_cert_path: &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/nginx/ssl-certs/wangyan.cloud/_ecc/fullchain.cer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_key_path: &lt;span class=&#34;s2&#34;&gt;&amp;#34;/etc/nginx/ssl-certs/wangyan.cloud/_ecc/wangyan.cloud/.key&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;需要ACME申请证书，可以填写以下选项：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_letsencrypt_hostname: &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_letsencrypt_listen: &lt;span class=&#34;s2&#34;&gt;&amp;#34;:http&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_letsencrypt_cache_dir: &lt;span class=&#34;s2&#34;&gt;&amp;#34;.cache&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tls_letsencrypt_challenge_type: HTTP-01&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;412-启用-grpc&#34;&gt;4.1.2. 启用 gRPC&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 不要使用 127.0.0.1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grpc_listen_addr: 0.0.0.0:50443
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 可以保持 false 不变&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;grpc_allow_insecure: false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;413-创建-api-key&#34;&gt;4.1.3. 创建 API key&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale apikeys create --expiration 180d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale apikeys list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 吊销&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale apikeys expire --prefix &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;PREFIX&amp;gt;&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;414-设置环境变量&#34;&gt;4.1.4. 设置环境变量&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 执行权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/local/bin/headscale
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置环境变量&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 特别注意：这里没有 https://&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HEADSCALE_CLI_ADDRESS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;headscale.wangyan.cloud/:50443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;HEADSCALE_CLI_API_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;API KEY FROM PREVIOUS STAGE&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;headscale nodes list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-通过-ui-面板远控&#34;&gt;4.2. 通过 UI 面板远控&lt;/h3&gt;
&lt;p&gt;项目地址：&lt;a href=&#34;https://github.com/GoodiesHQ/headscale-admin&#34;&gt;https://github.com/GoodiesHQ/headscale-admin&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;421-docker-composeyml&#34;&gt;4.2.1. docker-compose.yml&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  headscale-admin:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: goodieshq/headscale-admin:dev
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: headscale-admin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.0.0.0:8282:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart: always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;422-nginx&#34;&gt;4.2.2. Nginx&lt;/h4&gt;
&lt;p&gt;这里有一个坑，&lt;code&gt;api url&lt;/code&gt; 不是填写上面的&lt;code&gt;gRPC API&lt;/code&gt;地址，而是带 &lt;code&gt;https&lt;/code&gt; 的 &lt;code&gt;server_url&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;请先确保访问 &lt;code&gt;https://headscale.wangyan.cloud//api/api/v1/apikey&lt;/code&gt; 不会报错&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location  / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass       https://127.0.0.1:8181&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include          nginx-config/proxy.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location /admin &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass       http://127.0.0.1:8282&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include          nginx-config/proxy.conf&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Laravel 5 开发知乎笔记</title>
        <link>https://www.bg7pbp.com/p/laravel-vuejs-zhihu-clone/</link>
        <pubDate>Fri, 01 Sep 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-vuejs-zhihu-clone/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%80%E7%AB%A0-%E5%9F%BA%E7%A1%80%E8%AE%BE%E7%BD%AE&#34;&gt;第一章 基础设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83&#34;&gt;1.1 开发环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E9%85%8D%E7%BD%AE%E5%9B%BD%E5%86%85%E8%BD%AF%E4%BB%B6%E6%BA%90&#34;&gt;1.2 配置国内软件源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%88%9B%E5%BB%BA-laravel-%E9%A1%B9%E7%9B%AE&#34;&gt;1.3 创建 Laravel 项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E6%9B%B4%E6%94%B9-user-%E6%A8%A1%E5%9E%8B%E4%BD%8D%E7%BD%AE&#34;&gt;1.4 更改 User 模型位置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E6%95%B0%E6%8D%AE%E5%BA%93-user-%E8%A1%A8%E8%AE%BE%E8%AE%A1&#34;&gt;1.5 数据库 User 表设计&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E7%AB%A0-%E7%94%A8%E6%88%B7%E6%B3%A8%E5%86%8C%E5%90%8E%E5%8F%91%E9%80%81%E9%AA%8C%E8%AF%81%E9%82%AE%E4%BB%B6&#34;&gt;第二章 用户注册后发送验证邮件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E9%98%BF%E9%87%8C%E4%BA%91%E9%82%AE%E4%BB%B6%E6%8E%A8%E9%80%81%E6%9C%8D%E5%8A%A1&#34;&gt;2.1 阿里云邮件推送服务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%8F%91%E9%80%81%E6%B3%A8%E5%86%8C%E9%AA%8C%E8%AF%81%E9%82%AE%E4%BB%B6&#34;&gt;2.2 发送注册验证邮件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-sendcloud-%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1&#34;&gt;2.3 Sendcloud 邮件服务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E7%AB%A0-%E7%94%A8%E6%88%B7%E6%B3%A8%E5%86%8C%E4%B8%8E%E7%99%BB%E5%BD%95%E6%B6%88%E6%81%AF%E6%8F%90%E7%A4%BA&#34;&gt;第三章 用户注册与登录消息提示&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%BC%95%E5%85%A5-laracastsflash-%E5%8C%85&#34;&gt;3.1 引入 &lt;code&gt;laracasts/flash&lt;/code&gt; 包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E8%AE%BE%E7%BD%AE%E5%B8%90%E5%8F%B7%E6%9C%AA%E6%BF%80%E6%B4%BB%E4%B8%8D%E8%83%BD%E7%99%BB%E5%BD%95&#34;&gt;3.2 设置帐号未激活不能登录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E7%AB%A0-%E8%A7%86%E5%9B%BE%E6%96%87%E4%BB%B6%E6%B1%89%E5%8C%96%E5%A2%9E%E5%8A%A0%E4%B8%AD%E6%96%87%E8%AF%AD%E8%A8%80%E5%8C%85&#34;&gt;第四章 视图文件汉化、增加中文语言包&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87%E8%AF%AD%E8%A8%80%E5%8C%85&#34;&gt;4.1 简体中文语言包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E6%9B%B4%E6%96%B0%E5%89%8D%E7%AB%AF%E8%B5%84%E6%BA%90&#34;&gt;4.2 更新前端资源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%94%E7%AB%A0-%E5%AE%9E%E7%8E%B0%E6%89%BE%E5%9B%9E%E5%AF%86%E7%A0%81&#34;&gt;第五章 实现找回密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%85%AD%E7%AB%A0-%E8%AE%BE%E8%AE%A1%E9%97%AE%E9%A2%98%E8%A1%A8&#34;&gt;第六章 设计问题表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%83%E7%AB%A0-%E5%8F%91%E5%B8%83%E9%97%AE%E9%A2%98&#34;&gt;第七章 发布问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#71-%E5%AE%89%E8%A3%85-ueditor-%E7%BC%96%E8%BE%91%E5%99%A8&#34;&gt;7.1 安装 UEditor 编辑器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#72-%E5%8F%91%E5%B8%83%E9%97%AE%E9%A2%98&#34;&gt;7.2 发布问题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%85%AB%E7%AB%A0-%E9%97%AE%E9%A2%98%E8%A1%A8%E5%8D%95%E5%AD%97%E6%AE%B5%E9%AA%8C%E8%AF%81&#34;&gt;第八章 问题表单字段验证&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#81-%E6%96%B9%E6%B3%95%E4%B8%80%E5%BF%AB%E9%80%9F%E9%AA%8C%E8%AF%81&#34;&gt;8.1 方法一：快速验证&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#82-%E6%96%B9%E6%B3%95%E4%BA%8C%E8%A1%A8%E5%8D%95%E8%AF%B7%E6%B1%82%E9%AA%8C%E8%AF%81&#34;&gt;8.2 方法二：表单请求验证&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B9%9D%E7%AB%A0-%E7%BE%8E%E5%8C%96%E7%BC%96%E8%BE%91%E5%99%A8&#34;&gt;第九章 美化编辑器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#91-%E7%99%BB%E5%BD%95%E5%90%8E%E6%89%8D%E8%83%BD%E5%8F%91%E5%B8%83%E9%97%AE%E9%A2%98&#34;&gt;9.1 登录后才能发布问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#92-%E8%87%AA%E5%AE%9A%E4%B9%89-toolbars&#34;&gt;9.2 自定义 toolbars&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E7%AB%A0-%E5%AE%9A%E4%B9%89%E8%AF%9D%E9%A2%98%E4%B8%8E%E9%97%AE%E9%A2%98%E5%85%B3%E7%B3%BB&#34;&gt;第十章 定义话题与问题关系&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#101-topic-%E6%A8%A1%E5%9E%8B&#34;&gt;10.1 Topic 模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#102-question-%E6%A8%A1%E5%9E%8B&#34;&gt;10.2 Question 模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%B8%80%E7%AB%A0-%E4%BD%BF%E7%94%A8-select2-%E4%BC%98%E5%8C%96%E8%AF%9D%E9%A2%98%E9%80%89%E6%8B%A9&#34;&gt;第十一章 使用 Select2 优化话题选择&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#111-%E7%BC%96%E8%AF%91%E5%8E%8B%E7%BC%A9-select2-%E8%B5%84%E6%BA%90&#34;&gt;11.1 编译压缩 Select2 资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#112-%E5%A4%9A%E9%80%89%E6%A1%86%E9%9D%99%E6%80%81&#34;&gt;11.2 多选框（静态）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#113-%E5%A4%9A%E9%80%89%E6%A1%86%E5%8A%A8%E6%80%81&#34;&gt;11.3 多选框（动态）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%BA%8C%E7%AB%A0-%E5%88%9B%E5%BB%BA%E5%92%8C%E6%98%BE%E7%A4%BA%E8%AF%9D%E9%A2%98&#34;&gt;第十二章 创建和显示话题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#121-%E6%96%B0%E5%BB%BA%E8%AF%9D%E9%A2%98&#34;&gt;12.1 新建话题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#122-%E6%98%BE%E7%A4%BA%E9%97%AE%E9%A2%98%E7%9A%84%E6%89%80%E6%9C%89%E8%AF%9D%E9%A2%98&#34;&gt;12.2 显示问题的所有话题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%B8%89%E7%AB%A0-%E4%BD%BF%E7%94%A8-repository-%E6%A8%A1%E5%BC%8F&#34;&gt;第十三章 使用 Repository 模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E5%9B%9B%E7%AB%A0-%E5%AE%9E%E7%8E%B0%E7%BC%96%E8%BE%91%E9%97%AE%E9%A2%98&#34;&gt;第十四章 实现编辑问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#141-%E7%BC%96%E8%BE%91%E9%97%AE%E9%A2%98&#34;&gt;14.1 编辑问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#142-%E6%9B%B4%E6%96%B0%E9%97%AE%E9%A2%98&#34;&gt;14.2 更新问题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%BA%94%E7%AB%A0-%E9%97%AE%E9%A2%98%E5%88%97%E8%A1%A8%E5%92%8C%E5%88%A0%E9%99%A4%E9%97%AE%E9%A2%98&#34;&gt;第十五章 问题列表和删除问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#151-%E9%97%AE%E9%A2%98%E5%88%97%E8%A1%A8&#34;&gt;15.1 问题列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#152-%E5%88%A0%E9%99%A4%E9%97%AE%E9%A2%98&#34;&gt;15.2 删除问题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E5%85%AD%E7%AB%A0-%E5%88%9B%E5%BB%BA%E9%97%AE%E9%A2%98%E7%9A%84%E7%AD%94%E6%A1%88-answer-%E6%A8%A1%E5%9E%8B&#34;&gt;第十六章 创建问题的答案 Answer 模型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%B8%83%E7%AB%A0-%E5%AE%9E%E7%8E%B0%E6%8F%90%E4%BA%A4%E5%9B%9E%E7%AD%94&#34;&gt;第十七章 实现提交回答&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#171-%E5%88%9B%E5%BB%BA-answer-%E6%8E%A7%E5%88%B6%E5%99%A8&#34;&gt;17.1 创建 Answer 控制器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#172-%E9%AA%8C%E8%AF%81-answer-%E8%A1%A8%E5%8D%95&#34;&gt;17.2 验证 Answer 表单&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#173-%E8%A7%86%E5%9B%BE%E4%B8%AD%E6%98%BE%E7%A4%BA-answer&#34;&gt;17.3 视图中显示 Answer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E5%85%AB%E7%AB%A0-%E7%94%A8%E6%88%B7%E5%85%B3%E6%B3%A8%E9%97%AE%E9%A2%98&#34;&gt;第十八章 用户关注问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#181-%E6%8F%90%E4%BA%A4%E5%9B%9E%E7%AD%94%E9%9C%80%E8%A6%81%E7%99%BB%E5%BD%95&#34;&gt;18.1 提交回答需要登录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#182-%E5%85%B3%E6%B3%A8%E9%97%AE%E9%A2%98&#34;&gt;18.2 关注问题&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1821-%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%81%E7%A7%BB&#34;&gt;18.2.1 数据库迁移&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#1822-%E8%A7%86%E5%9B%BE%E6%96%87%E4%BB%B6&#34;&gt;18.2.2 视图文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#1823-%E8%B7%AF%E7%94%B1&#34;&gt;18.2.3 路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#1824-%E5%85%B3%E6%B3%A8%E9%97%AE%E9%A2%98%E6%8E%A7%E5%88%B6%E5%99%A8&#34;&gt;18.2.4 「关注问题」控制器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#1825-%E6%A8%A1%E5%9E%8B&#34;&gt;18.2.5 模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%8D%81%E4%B9%9D%E7%AB%A0-%E7%94%A8%E6%88%B7%E5%85%B3%E6%B3%A8%E9%97%AE%E9%A2%98%E4%B8%8B&#34;&gt;第十九章 用户关注问题（下）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#191-%E4%BD%BF%E7%94%A8-toggle-%E6%96%B9%E6%B3%95%E9%81%BF%E5%85%8D%E9%87%8D%E5%A4%8D%E5%85%B3%E6%B3%A8&#34;&gt;19.1 使用 toggle 方法避免重复关注&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#192-%E8%8E%B7%E5%8F%96%E5%85%B3%E6%B3%A8%E7%8A%B6%E6%80%81&#34;&gt;19.2 获取关注状态&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E7%AB%A0-%E4%BD%BF%E7%94%A8-vuejs-%E5%AE%9E%E7%8E%B0%E5%85%B3%E6%B3%A8%E9%97%AE%E9%A2%98&#34;&gt;第二十章 使用 Vuejs 实现关注问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%B8%80%E7%AB%A0-%E5%89%8D%E5%90%8E%E7%AB%AF%E5%88%86%E7%A6%BB-api-token-%E8%AE%A4%E8%AF%81&#34;&gt;第二十一章 前后端分离 API token 认证&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#211-%E5%9C%A8-users-%E8%A1%A8%E6%96%B0%E5%A2%9E-api_token-%E5%AD%97%E6%AE%B5&#34;&gt;21.1 在 &lt;code&gt;users&lt;/code&gt; 表新增 &lt;code&gt;api_token&lt;/code&gt; 字段&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#212-%E8%8E%B7%E5%8F%96%E5%89%8D%E7%AB%AF%E7%94%9F%E6%88%90%E7%9A%84-api_token-%E5%AD%97%E7%AC%A6%E4%B8%B2&#34;&gt;21.2 获取前端生成的 &lt;code&gt;api_token&lt;/code&gt; 字符串&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#213-%E5%89%8D%E7%AB%AF%E5%AE%89%E5%85%A8%E4%BC%98%E5%8C%96&#34;&gt;21.3 前端安全优化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#214-%E4%BC%98%E5%8C%96%E8%B7%AF%E7%94%B1&#34;&gt;21.4 优化路由&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%BA%8C%E7%AB%A0-%E5%85%B3%E6%B3%A8%E7%94%A8%E6%88%B7%E4%B8%8A&#34;&gt;第二十二章 关注用户（上）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#221-%E6%96%B0%E5%A2%9E-followers-%E8%A1%A8&#34;&gt;22.1 新增 followers 表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#222-%E8%A7%86%E5%9B%BE&#34;&gt;22.2 视图&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%B8%89%E7%AB%A0-%E5%85%B3%E6%B3%A8%E7%94%A8%E6%88%B7%E4%B8%8B&#34;&gt;第二十三章 关注用户（下）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#231-vuejs-%E7%BB%84%E4%BB%B6&#34;&gt;23.1 vuejs 组件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#232-%E8%B7%AF%E7%94%B1&#34;&gt;23.2 路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#233-%E6%8E%A7%E5%88%B6%E5%99%A8&#34;&gt;23.3 控制器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#234-%E7%94%A8%E6%88%B7%E6%A8%A1%E5%9E%8B&#34;&gt;23.4 用户模型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E5%9B%9B%E7%AB%A0-%E7%AB%99%E5%86%85%E4%BF%A1%E9%80%9A%E7%9F%A5&#34;&gt;第二十四章 站内信通知&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%BA%94%E7%AB%A0-%E5%85%B3%E6%B3%A8%E7%94%A8%E6%88%B7%E4%B9%8B%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5&#34;&gt;第二十五章 关注用户之邮件通知&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#251-sendcloud-%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1&#34;&gt;25.1 Sendcloud 邮件服务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#252-directmail-%E9%82%AE%E4%BB%B6%E6%9C%8D%E5%8A%A1&#34;&gt;25.2 Directmail 邮件服务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E5%85%AD%E7%AB%A0-%E9%87%8D%E6%9E%84%E9%82%AE%E4%BB%B6%E9%80%9A%E7%9F%A5%E4%BB%A3%E7%A0%81&#34;&gt;第二十六章 重构邮件通知代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%B8%83%E7%AB%A0-%E5%AF%B9%E7%AD%94%E6%A1%88%E8%BF%9B%E8%A1%8C%E7%82%B9%E8%B5%9E&#34;&gt;第二十七章 对答案进行点赞&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E5%85%AB%E7%AB%A0-%E7%A7%81%E4%BF%A1%E5%8A%9F%E8%83%BD%E4%B8%8A&#34;&gt;第二十八章 私信功能（上）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%BA%8C%E5%8D%81%E4%B9%9D%E7%AB%A0-%E7%A7%81%E4%BF%A1%E5%8A%9F%E8%83%BD%E4%B8%8B&#34;&gt;第二十九章 私信功能（下）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E7%AB%A0-%E5%AE%9E%E7%8E%B0%E8%AF%84%E8%AE%BA%E4%B8%8A&#34;&gt;第三十章 实现评论（上）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B8%80%E7%AB%A0-vuejs-%E5%AE%9E%E7%8E%B0%E8%AF%84%E8%AE%BA%E7%BB%84%E4%BB%B6&#34;&gt;第三十一章 Vuejs 实现评论组件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%BA%8C%E7%AB%A0-repository-%E6%A8%A1%E5%BC%8F%E9%87%8D%E6%9E%84%E4%BB%A3%E7%A0%81&#34;&gt;第三十二章 Repository 模式重构代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B8%89%E7%AB%A0-%E8%87%AA%E5%AE%9A%E4%B9%89-helper&#34;&gt;第三十三章 自定义 helper&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E5%9B%9B%E7%AB%A0-%E7%A7%81%E4%BF%A1%E5%88%97%E8%A1%A8&#34;&gt;第三十四章 私信列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%BA%94%E7%AB%A0-%E7%A7%81%E4%BF%A1%E5%88%97%E8%A1%A8%E4%B8%8B&#34;&gt;第三十五章 私信列表（下）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E5%85%AD%E7%AB%A0-%E5%9B%9E%E5%A4%8D%E7%A7%81%E4%BF%A1&#34;&gt;第三十六章 回复私信&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B8%83%E7%AB%A0-%E6%A0%87%E8%AE%B0%E7%A7%81%E4%BF%A1%E5%B7%B2%E8%AF%BB&#34;&gt;第三十七章 标记私信已读&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E5%85%AB%E7%AB%A0-%E6%98%BE%E7%A4%BA%E6%9C%AA%E8%AF%BB%E7%A7%81%E4%BF%A1&#34;&gt;第三十八章 显示未读私信&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E4%B8%89%E5%8D%81%E4%B9%9D%E7%AB%A0-%E7%A7%81%E4%BF%A1%E5%AE%9E%E7%8E%B0-repository-%E6%A8%A1%E5%BC%8F&#34;&gt;第三十九章 私信实现 Repository 模式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E7%AB%A0-%E7%A7%81%E4%BF%A1%E9%80%9A%E7%9F%A5&#34;&gt;第四十章 私信通知&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E4%B8%80%E7%AB%A0-notifications-%E5%B7%B2%E8%AF%BB&#34;&gt;第四十一章 notifications 已读&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E4%BA%8C%E7%AB%A0-%E4%B8%8A%E4%BC%A0%E5%A4%B4%E5%83%8F%E7%BB%84%E4%BB%B6&#34;&gt;第四十二章 上传头像组件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E4%B8%89%E7%AB%A0-%E5%A4%B4%E5%83%8F%E4%B8%8A%E4%BC%A0%E5%88%B0%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;第四十三章 头像上传到服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E5%9B%9B%E7%AB%A0-%E5%A4%B4%E5%83%8F%E4%B8%8A%E4%BC%A0%E5%88%B0%E4%B8%83%E7%89%9B&#34;&gt;第四十四章 头像上传到七牛&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E4%BA%94%E7%AB%A0-%E5%AE%9E%E7%8E%B0%E4%BF%AE%E6%94%B9%E5%AF%86%E7%A0%81&#34;&gt;第四十五章 实现修改密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E5%85%AD%E7%AB%A0-%E7%94%A8%E6%88%B7%E4%B8%AA%E4%BA%BA%E8%AE%BE%E7%BD%AE&#34;&gt;第四十六章 用户个人设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC%E5%9B%9B%E5%8D%81%E4%B8%83%E7%AB%A0-%E9%87%8D%E6%9E%84%E7%94%A8%E6%88%B7%E8%AE%BE%E7%BD%AE&#34;&gt;第四十七章 重构用户设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;开发一个类似于知乎的站点：用户可以发布问题，提交回答，发表评论等，用户之间可以相互关注，发送私信等。&lt;/p&gt;
&lt;h2 id=&#34;第一章-基础设置&#34;&gt;第一章 基础设置&lt;/h2&gt;
&lt;h3 id=&#34;11-开发环境&#34;&gt;1.1 开发环境&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;OS： macOS High Sierra 10.13&lt;/li&gt;
&lt;li&gt;Homestead: 6.5&lt;/li&gt;
&lt;li&gt;Vagrant box: parallels 4.0.0&lt;/li&gt;
&lt;li&gt;Laravel 5.5&lt;/li&gt;
&lt;li&gt;PHP 7.1.10 , MySQL 5.7.19 , Nginx 1.13.3&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;12-配置国内软件源&#34;&gt;1.2 配置国内软件源&lt;/h3&gt;
&lt;p&gt;Composer&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer config -g repo.packagist composer https://packagist.laravel-china.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;NodeJS&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 推荐使用 yarn &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; registry https://registry.npm.taobao.org --global &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; disturl https://npm.taobao.org/dist --global &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; sass-binary-site https://npm.taobao.org/mirrors/node-sass
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 二选一&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; registry https://registry.npm.taobao.org --global &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; disturl https://npm.taobao.org/dist --global &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm config &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; sass-binary-site https://npm.taobao.org/mirrors/node-sass
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 查看效果&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn config list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ubuntu 16.04&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/archive.ubuntu.com/mirrors.163.com/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/deb http:\/\/security/#deb http:\/\/security/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/deb-src http:\/\/security/#deb-src http:\/\/security/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-创建-laravel-项目&#34;&gt;1.3 创建 Laravel 项目&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建项目&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer create-project --prefer-dist laravel/laravel zhihu &lt;span class=&#34;s2&#34;&gt;&amp;#34;5.5.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 更新依赖库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn install &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer dump-autoload 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 其他参考命令&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn install --no-bin-links &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;windows&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn install --force （重构某个包）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm rebuild node-sass
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 导入 Git 配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat .gitconfig &amp;gt; ~/.gitconfig
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global --edit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-更改-user-模型位置&#34;&gt;1.4 更改 User 模型位置&lt;/h3&gt;
&lt;p&gt;将 &lt;code&gt;User.php&lt;/code&gt; 放置到 &lt;code&gt;app/Models/&lt;/code&gt; 文件夹，命名空间改成：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;auth.php&lt;/code&gt; 配置文件：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// config\auth.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;driver&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eloquent&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15-数据库-user-表设计&#34;&gt;1.5 数据库 User 表设计&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/migrations&#34;&gt;文档：《Laravel 的数据库迁移 Migrations》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;设计 &lt;code&gt;User&lt;/code&gt; 表结构&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/2014_10_12_000000_create_users_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;smallInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_active&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;favorites_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;likes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;following_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nullable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;rememberToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;.env&lt;/code&gt; 配置信息&lt;/p&gt;
&lt;p&gt;运行数据库迁移&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二章-用户注册后发送验证邮件&#34;&gt;第二章 用户注册后发送验证邮件&lt;/h2&gt;
&lt;h3 id=&#34;21-阿里云邮件推送服务&#34;&gt;2.1 阿里云邮件推送服务&lt;/h3&gt;
&lt;p&gt;修改 &lt;code&gt;composer.json&lt;/code&gt; 然后 &lt;code&gt;composer update&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;json&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;wang_yan/directmail&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;dev-master&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者在项目目录下执行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require wang_yan/directmail:dev-master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然后修改 &lt;code&gt;config/app.php&lt;/code&gt;，添加服务提供者&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// 添加这行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;WangYan\DirectMail\DirectMailTransportProvider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后在 &lt;code&gt;.env&lt;/code&gt; 中配置你的密钥， 并修改邮件驱动为 &lt;code&gt;directmail&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MAIL_DRIVER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;directmail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DIRECT_MAIL_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# AccessKeyId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DIRECT_MAIL_SECRET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# AccessSecret&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-发送注册验证邮件&#34;&gt;2.2 发送注册验证邮件&lt;/h3&gt;
&lt;p&gt;初始化 Laravel 认证模块&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:auth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;RegisterController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\Auth\RegisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;default.jpg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bcrypt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sendVerifyEmailTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sendVerifyEmailTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email.verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;confirmation_token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.register&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@dm.mail.wangyan.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;请验证您的 Email 地址&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;User&lt;/code&gt; 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加邮件模板&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim resources&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;iews&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;mails&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;egister.blade.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/email/verify/{token}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;EmailController@verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email.verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller EmailController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\EmailController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;EmailController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @param $token
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;is_active&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;confirmation_token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-sendcloud-邮件服务&#34;&gt;2.3 Sendcloud 邮件服务&lt;/h3&gt;
&lt;p&gt;修改 &lt;code&gt;composer.json&lt;/code&gt; 然后 &lt;code&gt;composer update&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;json&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;naux/sendcloud&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;^1.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者在项目目录下执行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require naux/sendcloud&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;config/app.php&lt;/code&gt;，添加服务提供者&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// 添加这行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Naux\Mail\SendCloudServiceProvider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;.env&lt;/code&gt; 中配置你的密钥， 并修改邮件驱动为 &lt;code&gt;sendcloud&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MAIL_DRIVER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sendcloud
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SEND_CLOUD_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;# 创建的 api_user&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SEND_CLOUD_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;    &lt;span class=&#34;c1&#34;&gt;# 分配的 api_key&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三章-用户注册与登录消息提示&#34;&gt;第三章 用户注册与登录消息提示&lt;/h2&gt;
&lt;h3 id=&#34;31-引入-laracastsflash-包&#34;&gt;3.1 引入 &lt;code&gt;laracasts/flash&lt;/code&gt; 包&lt;/h3&gt;
&lt;p&gt;这个包的作用是将消息提示放到 session 中&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/laracasts/flash&#34;&gt;项目：《Easy Flash Messages for Laravel App》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;用法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;success()&lt;/code&gt;: success 样式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;error()&lt;/code&gt;: error 样式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;warning()&lt;/code&gt;: warning 样式&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;overlay()&lt;/code&gt;: 弹窗&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash()-&amp;gt;overlay(&#39;Modal Message&#39;, &#39;Modal Title&#39;)&lt;/code&gt;: 有标题的弹窗&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;important()&lt;/code&gt;: 有关闭按钮&lt;/li&gt;
&lt;li&gt;&lt;code&gt;flash(&#39;Message&#39;)-&amp;gt;error()-&amp;gt;important()&lt;/code&gt;: 可以关闭的错误提示&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;修改 &lt;code&gt;composer.json&lt;/code&gt; 然后 &lt;code&gt;composer update&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;json&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;laracasts/flash&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;^3.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者在项目目录下执行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require laracasts/flash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新增服务提供者&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// config\app.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Laracasts\Flash\FlashServiceProvider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;EmailController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\EmailController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// Render the message as an overlay.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;flash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;overlay&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;邮箱验证失败！&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;温馨提示&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;is_active&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;confirmation_token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;flash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;邮箱验证成功！&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;HomeController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\HomeController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;flash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;登入成功！&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;important&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;home&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改视图模板&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 使用到 overlay() 弹窗时引入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\layouts\app.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#flash-overlay-modal&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 在显示消息的位置引入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\home.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;flash::message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\welcome.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 将下面代码放在适当位置
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;flash::message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#flash-overlay-modal&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-设置帐号未激活不能登录&#34;&gt;3.2 设置帐号未激活不能登录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\Auth\LoginController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;attemptLogin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;credentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_active&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;attempt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;remember&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四章-视图文件汉化增加中文语言包&#34;&gt;第四章 视图文件汉化、增加中文语言包&lt;/h2&gt;
&lt;h3 id=&#34;41-简体中文语言包&#34;&gt;4.1 简体中文语言包&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;汉化默认视图文件&lt;/li&gt;
&lt;li&gt;将Google字体换成中科大源&lt;/li&gt;
&lt;li&gt;增加 cmn-Hans 简体中文语言包&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;42-更新前端资源&#34;&gt;4.2 更新前端资源&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/mix&#34;&gt;项目：《Laravel 资源任务编译器 Laravel Mix》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* resources/assets/sass/app.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;://&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fonts&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;lug&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;ustc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;edu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;cn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;family&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;Raleway&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;400&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;600&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编译&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run production&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;其他详细过程，略&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/laravel-zhihu-01.png&#34; alt=&#34;laravel-zhihu-01&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;第五章-实现找回密码&#34;&gt;第五章 实现找回密码&lt;/h2&gt;
&lt;p&gt;详细原理（略），可从 &lt;code&gt;app\Http\Controllers\Auth\ForgotPasswordController.php&lt;/code&gt; 开始理解&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sendPasswordResetNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password/reset&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.reset&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@sc.mail.wangyan.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;重设密码&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加邮件模板&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim resources&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;iews&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;mails&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;eset.blade.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第六章-设计问题表&#34;&gt;第六章 设计问题表&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.5/migrations&#34;&gt;文档：Laravel 的数据库迁移 Migrations&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;创建 &lt;code&gt;Model&lt;/code&gt; 的同时，生成 &lt;code&gt;migration&lt;/code&gt; 迁移文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注意双反斜杆&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model Models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Question -m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 migrate，设计表结构&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_questions_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;close_comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_hidden&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行迁移&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第七章-发布问题&#34;&gt;第七章 发布问题&lt;/h2&gt;
&lt;h3 id=&#34;71-安装-ueditor-编辑器&#34;&gt;7.1 安装 UEditor 编辑器&lt;/h3&gt;
&lt;p&gt;修改 &lt;code&gt;composer.json&lt;/code&gt; 然后 &lt;code&gt;composer update&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;json&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;overtrue/laravel-ueditor&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;~1.0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者在项目目录下执行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require &lt;span class=&#34;s2&#34;&gt;&amp;#34;overtrue/laravel-ueditor:~1.0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加下面一行到 &lt;code&gt;config/app.php&lt;/code&gt; 中 &lt;code&gt;providers&lt;/code&gt; 部分&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Overtrue&lt;span class=&#34;se&#34;&gt;\L&lt;/span&gt;aravelUEditor&lt;span class=&#34;se&#34;&gt;\U&lt;/span&gt;EditorServiceProvider::class,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;发布配置文件与资源&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan vendor:publish --provider&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Overtrue\LaravelUEditor\UEditorServiceProvider&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;附件存储（需要以管理员身份允许终端）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.5/filesystem&#34;&gt;文档：Laravel 的文件系统和云存储功能集成&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan storage:link&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;72-发布问题&#34;&gt;7.2 发布问题&lt;/h3&gt;
&lt;p&gt;创建 &lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.5/controllers&#34;&gt;项目：《Laravel 的 HTTP 控制器》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller QuestionsController --resource&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义 &lt;code&gt;questions&lt;/code&gt; 资源路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;resource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QuestionsController&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 首页显示所有问题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 返回创建问题视图
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.create&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 保存问题，然后返回该问题视图
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 获取登陆用户 ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 保存问题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 重定向
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 返回问题视图
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;findOrfail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;Question&lt;/code&gt; 模型中的 &lt;code&gt;fillable&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Question&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新建「创建问题」视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//resources\views\questions\create.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;vendor.ueditor.assets&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发布问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;flash::message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;标题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;标题&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-block btn-success pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发布问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;k&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getEditor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ready&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;execCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;serverparam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{{ csrf_token() }}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;提交后问题后显示的页面&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第八章-问题表单字段验证&#34;&gt;第八章 问题表单字段验证&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.5/validation&#34;&gt;文档：《Laravel 的表单验证机制详解》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;81-方法一快速验证&#34;&gt;8.1 方法一：快速验证&lt;/h3&gt;
&lt;p&gt;将验证逻辑直接写到控制器中，使用 &lt;code&gt;Illuminate\Http\Request&lt;/code&gt; 对象提供的 &lt;code&gt;validate&lt;/code&gt; 方法进行验证。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$rules&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:6|max:128&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:12&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题长度至少要6个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.max&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题最长不能超过128个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;内容不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;内容至少要有12个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;validate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\create.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;vendor.ueditor.assets&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发布问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;flash::message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;title&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;标题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;title&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;标题&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ old(&amp;#39;title&amp;#39;) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;autofocus&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;body&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;old&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-block btn-success pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发布问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;k&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getEditor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ready&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;execCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;serverparam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{{ csrf_token() }}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;82-方法二表单请求验证&#34;&gt;8.2 方法二：表单请求验证&lt;/h3&gt;
&lt;p&gt;使用 Artisan 命令 &lt;code&gt;make:request&lt;/code&gt; 创建表单请求类来处理更复杂的验证。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:request StoreQuestionRequest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加验证规则到 &lt;code&gt;rules&lt;/code&gt; 方法中&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：表单请求类内也包含了 authorize 方法，用来判断用户是否有权限做出此请求。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Requests&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Foundation\Http\FormRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;StoreQuestionRequest&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FormRequest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 如果你打算在其他地方处理授权逻辑，这里返回 true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;authorize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 规则
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:6|max:128&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:12&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 自定义错误消息
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题长度至少要6个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title.max&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;标题最长不能超过128个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;内容不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;内容至少要有12个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改控制器使用 &lt;code&gt;StoreQuestionRequest&lt;/code&gt; 类替换默认的 &lt;code&gt;Request&lt;/code&gt; 类&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Requests\StoreQuestionRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StoreQuestionRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第九章-美化编辑器&#34;&gt;第九章 美化编辑器&lt;/h2&gt;
&lt;h3 id=&#34;91-登录后才能发布问题&#34;&gt;9.1 登录后才能发布问题&lt;/h3&gt;
&lt;p&gt;登录后才能发布问题，&lt;code&gt;index&lt;/code&gt; 和 &lt;code&gt;show&lt;/code&gt; 页面例外。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;except&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;92-自定义-toolbars&#34;&gt;9.2 自定义 toolbars&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!-- 定义容器的高度为200 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;height: 200px&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;old&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UE&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getEditor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;toolbars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bold&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;italic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;underline&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;strikethrough&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;blockquote&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertunorderedlist&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertorderedlist&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;justifyleft&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;justifycenter&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;justifyright&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertimage&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;fullscreen&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;elementPathEnabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;enableContextMenu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;autoClearEmptyNode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;wordCount&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;imagePopup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;autotypeset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;indent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imageBlockLine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ready&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;execCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;serverparam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{{ csrf_token() }}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十章-定义话题与问题关系&#34;&gt;第十章 定义话题与问题关系&lt;/h2&gt;
&lt;h3 id=&#34;101-topic-模型&#34;&gt;10.1 Topic 模型&lt;/h3&gt;
&lt;p&gt;创建「话题」模型与数据表（请留意单、复数）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;question_topic&lt;/code&gt; 是 &lt;code&gt;questions&lt;/code&gt; 和 &lt;code&gt;topics&lt;/code&gt; 的多对多中间表数据库表名是复数，中间表是单数&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 创建模型同时创建 topics 表（复数）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model Models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Topic -m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注意是 create_questions_topics_table &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:migration create_questions_topics_table --create&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;question_topic&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义「话题」数据表结构&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_topics_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nullable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义「问题」——「话题」数据表结构&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// database&lt;span class=&#34;se&#34;&gt;\m&lt;/span&gt;igrations&lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;reate_questions_topics_table.php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    public &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; up&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Schema::create&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_topic&amp;#39;&lt;/span&gt;, &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Blueprint &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;-&amp;gt;increments&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;-&amp;gt;integer&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;-&amp;gt;unsigned&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;-&amp;gt;index&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;-&amp;gt;integer&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topic_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;-&amp;gt;unsigned&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;-&amp;gt;index&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;-&amp;gt;timestamps&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义「问题」——「话题」多对多关系&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent-relationships#many-to-many&#34;&gt;文档：《Eloquent：关联：多对多》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;102-question-模型&#34;&gt;10.2 Question 模型&lt;/h3&gt;
&lt;p&gt;问题模型：一个问题属于多个话题&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Question&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获得此问题所属话题（复数）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//  一个问题属于多个话题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// belongsToMany(&amp;#39;关联模型「Topic」&amp;#39;,&amp;#39;中间表表名&amp;#39;,&amp;#39;当前模型「Question」在中间表的外键&amp;#39;,&amp;#39;关联模型「Topic」在中间表的外键&amp;#39;)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 中间表表名，Eloquent 会按照字母顺序合并两个关联模型的名称
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// question_id 默认采用的是下划线方式命名 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Topic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_topic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topic_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;话题模型：一个话题下有多个问题&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Topic.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Topic&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;questions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 参数也可以使用 App\Models\Qeustion
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Qeustion&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十一章-使用-select2-优化话题选择&#34;&gt;第十一章 使用 Select2 优化话题选择&lt;/h2&gt;
&lt;h3 id=&#34;111-编译压缩-select2-资源&#34;&gt;11.1 编译压缩 Select2 资源&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent-relationships#many-to-many&#34;&gt;文档：《Laravel 的资源任务编译器 Laravel Mix》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引人 &lt;code&gt;Select2&lt;/code&gt; 的 JS、CSS 文件&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/select2/select2&#34;&gt;https://github.com/select2/select2&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;resources\assets\css\select2.min.css &lt;br&gt;
resources\assets\js\select2.min.js &lt;br&gt;
resources\assets\js\select2.zh-CN.js&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;引入 JS&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\app.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./select2.min&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./select2.zh-CN&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;引入 css&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* resources\assets\sass\app.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;../css/select2.min&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;禁用缓存&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// webpack.mix.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;js&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;resources/assets/js/app.js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;public/js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;resources/assets/sass/app.scss&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;public/css&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;public/js/app.js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;public/css/app.css&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编译资源&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run production&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改引入文件地址&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\layouts\app.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ mix(&amp;#39;css/app.css&amp;#39;) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ mix(&amp;#39;js/app.js&amp;#39;) }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;yield&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;112-多选框静态&#34;&gt;11.2 多选框（静态）&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://select2.github.io/examples.html&#34;&gt;http://select2.github.io/examples.html&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\create.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;topic&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;话题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;js-example-basic-multiple form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;multiple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;multiple&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;AL&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Alabama&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;WY&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Wyoming&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.js-example-basic-multiple&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;113-多选框动态&#34;&gt;11.3 多选框（动态）&lt;/h3&gt;
&lt;p&gt;生成测试数据&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/seeding&#34;&gt;文档：《Laravel 数据库之：数据填充》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:factory TopicFactory&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database\factories\TopicFactory.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Faker\Generator&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Faker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$factory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;define&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;App\Models\Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Faker&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;word&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;paragraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;Topic&lt;/code&gt; 模型中的 &lt;code&gt;fillable&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Topic.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;tinker&lt;/code&gt; 填充数据&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan tinker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;factory&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;App&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;odels&lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;opic::class,10&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;-&amp;gt;create&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;quit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义 &lt;code&gt;Topic&lt;/code&gt; 的 api 路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;like&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;q&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改「创建问题」视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\create.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;topic&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;话题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;topic[]&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;select2-placeholder-multiple form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;multiple&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;multiple&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ready&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;formatTopic&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;div class=&amp;#39;select2-result-repository clearfix&amp;#39;&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;div class=&amp;#39;select2-result-repository__meta&amp;#39;&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;div class=&amp;#39;select2-result-repository__title&amp;#39;&amp;gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Laravel&amp;#34;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;formatTopicSelection&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;.select2-placeholder-multiple&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;select2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;({&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-CN&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;tags&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;placeholder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;选择相关话题&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;minimumInputLength&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;ajax&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;dataType&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;json&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;delay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;q&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;term&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;processResults&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;results&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;cache&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;templateResult&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;formatTopic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;templateSelection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;formatTopicSelection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;escapeMarkup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;markup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;markup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十二章-创建和显示话题&#34;&gt;第十二章 创建和显示话题&lt;/h2&gt;
&lt;h3 id=&#34;121-新建话题&#34;&gt;12.1 新建话题&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/collections&#34;&gt;文档：《Laravel 的集合 Collection》&lt;/a&gt; 、&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent-relationships#updating-many-to-many-relationships&#34;&gt;文档：《Eloquent：多对多关联》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StoreQuestionRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 返回「话题」数组
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 如果不是数组，则「话题」($topicsArray) 为空
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$topicsArray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;normalizeTopic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 使用 attach 方法向「问题」——「话题」中间表插入一条数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 前提是 Question 模型下有 topics() 方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;attach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topicsArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// collect 函数：从数组中创建一个全新的「集合」实例
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// map 方法遍历集合并将每一个值传入给定的回调
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// map 返回一个新的集合实例,它不会修改它所调用的集合
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;normalizeTopic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;collect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// 如果话题存在，则$topic返回话题的ID（数字类型），否则返回新话题名称
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_numeric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;// 该话题的问题数+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// 新建话题后返回该话题ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$newTopic&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$newTopic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;122-显示问题的所有话题&#34;&gt;12.2 显示问题的所有话题&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 使用 with 方法进行预加载，减少查询次数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Question 模型下要有 topics() 方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;「问题」视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;topic btn btn-link pull-right&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/topic/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;css 美化&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;resources\assets\css\style.css&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* resources\assets\sass\app.scss */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;../css/style&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run production&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十三章-使用-repository-模式&#34;&gt;第十三章 使用 Repository 模式&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;Repository&lt;/code&gt; 模式的目的是将一些高频操作放在一起&lt;/p&gt;
&lt;p&gt;在  &lt;code&gt;App\Repositories&lt;/code&gt; 文件夹创建 &lt;code&gt;QuestionsRepository&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;````&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Repositories\QuestionsRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QuestionsRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//通过「问题ID」查找带有「话题」的「问题」
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;byIdWithTopics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 根据 $attributes 数组来创建「问题」 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑 &lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\QuestionsRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QuestionsController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$questionRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;QuestionsRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$questionRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$questionRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;except&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StoreQuestionRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 修改 $question = Question::create($data);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 修改 $question = Question::where(&amp;#39;id&amp;#39;,$id)-&amp;gt;with(&amp;#39;topics&amp;#39;)-&amp;gt;first();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byIdWithTopics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十四章-实现编辑问题&#34;&gt;第十四章 实现编辑问题&lt;/h2&gt;
&lt;h3 id=&#34;141-编辑问题&#34;&gt;14.1 编辑问题&lt;/h3&gt;
&lt;p&gt;路由情况&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/route-question.jpg&#34; alt=&#34;route-question&#34;&gt;&lt;/p&gt;
&lt;p&gt;修改 &lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;edit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 只有问题创建者才能编辑
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;owns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.edit&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;QuestionsRepository&lt;/code&gt; 中，通过ID获取问题&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Repositories\QuestionsRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;QuestionsRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;byID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;findOrfail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;只有问题创建者才能编辑自己的问题&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;owns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 判断当前用户Id是否等于问题创建者的ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// Auth::user()-&amp;gt;id == $question-&amp;gt;user_id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;「编辑问题」视图文件&lt;/p&gt;
&lt;p&gt;复制 &lt;code&gt;create.blade.php&lt;/code&gt; 文件为&lt;code&gt;edit.blade.php&lt;/code&gt;，并修改以下内容:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/edit.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// PATCH 方法对应的是 update 路由
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$question-&amp;gt;id&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;PATCH&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;142-更新问题&#34;&gt;14.2 更新问题&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;QuestionsController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent-relationships#updating-many-to-many-relationships&#34;&gt;文档：《多对多关联》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;StoreQuestionRequest&lt;/code&gt; 是验证规则，&lt;code&gt;sync&lt;/code&gt; 用于同步关联&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StoreQuestionRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// sync 方法可以接收 ID 数组，向中间表插入对应关联数据记录。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 所有没放在数组里的 IDs 都会从中间表里移除。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$topicsArray&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;normalizeTopic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sync&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topicsArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;「问题」视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;topic btn btn-link pull-right&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/topic/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;actions panel-footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;owns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;edit&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/edit&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;编辑&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十五章-问题列表和删除问题&#34;&gt;第十五章 问题列表和删除问题&lt;/h2&gt;
&lt;h3 id=&#34;151-问题列表&#34;&gt;15.1 问题列表&lt;/h3&gt;
&lt;p&gt;编辑问题控制器&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://php.net/manual/zh/function.compact.php&#34;&gt;http://php.net/manual/zh/function.compact.php&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getQuestionsFeed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑 &lt;code&gt;QuestionsRepository&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent#local-scopes&#34;&gt;文档：《本地作用域》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;本地作用域允许我们定义通用的约束集合以便在应用中复用，只需简单在对应 Eloquent 模型方法前加上一个 scope 前缀。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Repositories\QuestionsRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getQuestionsFeed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 获取 is_hidden 为 false 的问题，并按更新时间排序，同时获取该问题对应的用户信息。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;published&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;updated_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;Eloquent&lt;/code&gt; 模型中任何以 &lt;code&gt;scope&lt;/code&gt; 开始的方法都被当做 &lt;code&gt;Eloquent scope&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;scopePublished&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//  约束条件是 is_hidden 为 false
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_hidden&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;问题首页视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\index.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$questions&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;头像地址：public&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;images&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;png&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;,&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$question-&amp;gt;user&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;152-删除问题&#34;&gt;15.2 删除问题&lt;/h3&gt;
&lt;p&gt;视图文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;actions panel-footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;owns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;edit&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/edit&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;编辑&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;delete-form&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;method_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;DELETE&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button delete-button is-naked&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;删除&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;「删除问题」控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;destroy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;owns&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/questions/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;abort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;403&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Forbidden&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十六章-创建问题的答案-answer-模型&#34;&gt;第十六章 创建问题的答案 Answer 模型&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 模型名称首字母大写且是单数，自动创建的数据库表是复数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Answer -m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;votes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_hidden&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;close_comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Answer 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Answer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Answer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Question 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;answers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;hasMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;User 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;answers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;hasMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十七章-实现提交回答&#34;&gt;第十七章 实现提交回答&lt;/h2&gt;
&lt;h3 id=&#34;171-创建-answer-控制器&#34;&gt;17.1 创建 Answer 控制器&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 单数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller AnswerController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;定义保存 Answer 的路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions/{question}/answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;AnswerController@store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Answer 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\AnswerController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\AnswerRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AnswerController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;AnswerRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// ID 是当前登录用户ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 问题回答数+1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;AnswerRepository 模式&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Repositories\AnswerRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AnswerRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;172-验证-answer-表单&#34;&gt;17.2 验证 Answer 表单&lt;/h3&gt;
&lt;p&gt;新建规则文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:request StoreAnswerRequest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Requests\StoreAnswerRequest.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;authorize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:12&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将规则依赖注入&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\AnswerController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Requests\StoreAnswerRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;StoreAnswerRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;173-视图中显示-answer&#34;&gt;17.3 视图中显示 Answer&lt;/h3&gt;
&lt;p&gt;修改 &lt;code&gt;byIdWithTopics&lt;/code&gt; 为 &lt;code&gt;byIdWithTopicsAndAnswers&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questionRepository&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byIdWithTopicsAndAnswers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;questions.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Repositories\QuestionsRepositories.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;byIdWithTopicsAndAnswers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;「问题」视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;vendor.ueditor.assets&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answers_count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;个答案&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answers&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;,&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$answer-&amp;gt;user&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/user/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/answer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;body&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;内容&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;height: 120px&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/plain&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;old&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;br&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-block btn-success pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;提交答案&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;js&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getEditor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;container&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;toolbars&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bold&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;italic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;underline&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;strikethrough&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;blockquote&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertunorderedlist&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertorderedlist&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;justifyleft&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;justifycenter&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;justifyright&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;s1&#34;&gt;&amp;#39;link&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;insertimage&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;fullscreen&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;elementPathEnabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;enableContextMenu&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;autoClearEmptyNode&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;wordCount&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;imagePopup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;autotypeset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;indent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imageBlockLine&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;center&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ready&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;ue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;execCommand&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;serverparam&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{{ csrf_token() }}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十八章-用户关注问题&#34;&gt;第十八章 用户关注问题&lt;/h2&gt;
&lt;h3 id=&#34;181-提交回答需要登录&#34;&gt;18.1 提交回答需要登录&lt;/h3&gt;
&lt;p&gt;在前端限制&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/questions/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/answer&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;login&amp;#39;) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-warning btn-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;登录提交答案&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在后端限制&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/AnswerController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;AnswerRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;182-关注问题&#34;&gt;18.2 关注问题&lt;/h3&gt;
&lt;p&gt;实质是创建 &lt;code&gt;user_question&lt;/code&gt; 表，记录了登录用户ID和所关注问题的ID，点击关注该问题便生成一条记录。&lt;/p&gt;
&lt;h4 id=&#34;1821-数据库迁移&#34;&gt;18.2.1 数据库迁移&lt;/h4&gt;
&lt;p&gt;注意 &lt;code&gt;user_question&lt;/code&gt; 表是复数&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;artisan&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;make&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;migration&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;create_user_question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user_question&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意 &lt;code&gt;user_id&lt;/code&gt; &lt;code&gt;question_id&lt;/code&gt; 外键是单数&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_user_question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;1822-视图文件&#34;&gt;18.2.2 视图文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;改成&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-1&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-3&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading question-follow&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followers_count&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;关注者&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/question/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/follow&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;关注该问题&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#editor&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;撰写答案&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;改成&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;offset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-1&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answers_count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;个答案&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;1823-路由&#34;&gt;18.2.3 路由&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// zhihu\routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question/{question}/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QuestionFollowController@follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;1824-关注问题控制器&#34;&gt;18.2.4 「关注问题」控制器&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller QuestionFollowController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionFollowController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 需要登录，否则下面 Auth::user() 爆错
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 别忘了 use Auth
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// $question 是从路由传入的问题ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;follows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;1825-模型&#34;&gt;18.2.5 模型&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Follow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Follow.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Follow&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第十九章-用户关注问题下&#34;&gt;第十九章 用户关注问题（下）&lt;/h2&gt;
&lt;h3 id=&#34;191-使用-toggle-方法避免重复关注&#34;&gt;19.1 使用 toggle 方法避免重复关注&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\QuestionFollowController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followThis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/eloquent-relationships#updating-many-to-many-relationships&#34;&gt;文档：《多对多关联：同步关联》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 多对多，一个用户可以关注多个问题，一个问题也能被多个用户关注
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;followThis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 如果给定 ID 已附加，就会被移除。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 同样的，如果给定 ID 已移除，就会被附加：
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;follows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toggle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 关注成功则+1，否则反之
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;192-获取关注状态&#34;&gt;19.2 获取关注状态&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 通过问题ID查询该用户是否关注该问题 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;follows&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;前端&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/question/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/follow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default {{Auth::user()-&amp;gt;followed(&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$question-&amp;gt;id&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;) ? &amp;#39;btn-success&amp;#39; : &amp;#39;&amp;#39;}}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;已关注&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;关注该问题&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/question/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/follow&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-warning&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;关注该问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#editor&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;撰写答案&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十章-使用-vuejs-实现关注问题&#34;&gt;第二十章 使用 Vuejs 实现关注问题&lt;/h2&gt;
&lt;p&gt;在上一节使用 toggle 避免重复关注，并且使用超链接来实现关注和取消关注。而使用 Vuejs 可以避免跳转，用户体验更佳。&lt;/p&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 根据用户ID和问题ID，查询是否关注成功
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 关注成功后写入数据到 user_question 表
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//若已经关注，则取消关注
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!==&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;\App\Models\Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//否则写入数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;\App\Models\Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 &lt;code&gt;props&lt;/code&gt; 包&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn add props&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\components\QuestionFollowButton.vue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&amp;#39;btn-success&amp;#39; : followed}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;follow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;mounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// 查询是否已经关注
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;//console.log(response.data);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//默认值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;已关注&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;关注该问题&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// 关注
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\app.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Vue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;component&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question-follow-button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./components/QuestionFollowButton.vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    @if(Auth::check())
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;question-follow-button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{$question-&amp;gt;id}}&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;{{Auth::id()}}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;question-follow-button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    @else
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;/question/{{$question-&amp;gt;id}}/follow&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;btn btn-warning&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;关注该问题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    @endif
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#editor&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;btn btn-primary pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;撰写答案&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编译&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run prod&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十一章-前后端分离-api-token-认证&#34;&gt;第二十一章 前后端分离 API token 认证&lt;/h2&gt;
&lt;h3 id=&#34;211-在-users-表新增-api_token-字段&#34;&gt;21.1 在 &lt;code&gt;users&lt;/code&gt; 表新增 &lt;code&gt;api_token&lt;/code&gt; 字段&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:migration add_api_token_to_users --table&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;users&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database\migrations\2017_09_19_133744_add_api_token_to_users.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;64&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;dropColumn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将生成的随机字符串手动粘贴到 &lt;code&gt;user&lt;/code&gt; 表中&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan tinker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt; str_random&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;60&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;79hiXQBXMSWwrZDqybMTxZGjbB0nkFv2DkrAqyGoQ1f9WscoHwTSaB0btktm&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;ry8k58UcyZoSZJtIyZtegp3M5pqJbkceEPyC2dxm8zH5NaUoWDR9ykvY1EMX&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注册时自动生成随机字符串&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\Auth\RegisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;api_token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;api_token&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;212-获取前端生成的-api_token-字符串&#34;&gt;21.2 获取前端生成的 &lt;code&gt;api_token&lt;/code&gt; 字符串&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\bootstrap.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 注意 Authorization
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apiToken&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;head&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;querySelector&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;meta[name=&amp;#34;api-token&amp;#34;]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;apiToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;defaults&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;common&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Authorization&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;apiToken&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;error&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;API token not found&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;前端从数据库读取 api_token 内容&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\layouts\app.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;meta&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;api-token&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{  Auth::check() ? &amp;#39;Bearer &amp;#39;.Auth::user()-&amp;gt;api_token : &amp;#39;Bearer &amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;213-前端安全优化&#34;&gt;21.3 前端安全优化&lt;/h3&gt;
&lt;p&gt;去掉 user 部分&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\components\QuestionFollowButton.vue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;mounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;c1&#34;&gt;//
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;路由部分，新增 &lt;code&gt;$user&lt;/code&gt; 并且将 &lt;code&gt;$request-&amp;gt;get(&#39;user&#39;)&lt;/code&gt; 替换成 &lt;code&gt;$user-&amp;gt;id&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//新增内容
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 注意 $user-&amp;gt;id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//新增内容
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//注意 $user-&amp;gt;id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;\App\Models\Follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;question_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//注意 $user-&amp;gt;id
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\questions\show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 移除了 user=&amp;#34;{{Auth::id()}}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编译&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run prod&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;214-优化路由&#34;&gt;21.4 优化路由&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://d.laravel-china.org/docs/5.5/eloquent-relationships#updating-many-to-many-relationships&#34;&gt;https://d.laravel-china.org/docs/5.5/eloquent-relationships#updating-many-to-many-relationships&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 原路由需要提供 user_id ，优化后将 Follow::where 封装成 $user-&amp;gt;followed
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//  $followed = \App\Models\Follow::where(&amp;#39;question_id&amp;#39;,$request-&amp;gt;get(&amp;#39;question&amp;#39;))
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//   -&amp;gt;where(&amp;#39;user_id&amp;#39;,$user-&amp;gt;id)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//   -&amp;gt;count();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 原路由需要提供 user_id ，优化后将 Follow::where 封装成 $user-&amp;gt;followThis
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// followThis 这里用到了 toggle 特性，省去了 Follow::create 步骤
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// $followed = \App\Models\Follow::where(&amp;#39;question_id&amp;#39;,$question_id)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//    -&amp;gt;where(&amp;#39;user_id&amp;#39;,$user-&amp;gt;id)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//    -&amp;gt;first();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Models\Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followThis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;detached&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十二章-关注用户上&#34;&gt;第二十二章 关注用户（上）&lt;/h2&gt;
&lt;h3 id=&#34;221-新增-followers-表&#34;&gt;22.1 新增 followers 表&lt;/h3&gt;
&lt;p&gt;该表存放关注者 ID 和被关注者 ID&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:migration create_followers_table --create&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;followers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_followers_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;follower_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;integer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;一个用户（follower）既可以关注多个用户（正在关注他人，即following），也能被多个用户（关注者，followers）所关注。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 用户（follower）关注了哪些人（followed）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;following&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 用户（follower） 和已经关注的人（followed）均在 user 表，故self::class
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 顺序：类 -- 中间表 -- 用户在中间表的外键 -- 已经关注的人在中间表的外键
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;follower_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followed_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;222-视图&#34;&gt;22.2 视图&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;......&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;start&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-3&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading question-follow&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;关于作者&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h5&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;36&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;,&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$question-&amp;gt;user&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;user-statics&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-item text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-text&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;问题&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-count&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;questions_count&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-item text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-text&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;回答&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-count&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answers_count&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-item text-center&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-text&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;关注者&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;statics-count&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followers_count&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;end&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十三章-关注用户下&#34;&gt;第二十三章 关注用户（下）&lt;/h2&gt;
&lt;h3 id=&#34;231-vuejs-组件&#34;&gt;23.1 vuejs 组件&lt;/h3&gt;
&lt;p&gt;这个按钮在关注用户（上）已经添加了&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;所以，直接新增 UserFollowButton.vue&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\components\UserFollowButton.vue
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 页面载入时就向 /api/user/followers/ 发起get请求，查询是否关注了该问题的作者。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 点击按钮时向 /api/user/follow 发起post请求，直接关注该问题的作者。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&amp;#39;btn-success&amp;#39;: followed}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;follow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;mounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/user/followers/&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;已关注&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;关注他&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/user/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;followed&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\assets\js\app.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Vue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;component&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user-follow-button&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./components/UserFollowButton.vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;232-路由&#34;&gt;23.2 路由&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//  这里的ID是该问题的作者ID 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/user/followers/{id}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;FollowersController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/user/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;FollowersController@follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;233-控制器&#34;&gt;23.3 控制器&lt;/h3&gt;
&lt;p&gt;UserRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;byId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新增 FollowersController 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 控制器是复数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller FollowersController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//app\Http\Controllers\FollowersController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\UserRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;FollowersController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;UserRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$followers&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;pluck&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;follower_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;in_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$followers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;attached&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;234-用户模型&#34;&gt;23.4 用户模型&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;following&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;follower_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followed_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 用户（follower）被哪些人（followed）所关注（关注者）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;followers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;followed_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;follower_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;withTimestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 根据用户id发起关注
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;following&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toggle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十四章-站内信通知&#34;&gt;第二十四章 站内信通知&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/notifications&#34;&gt;https://laravel-china.org/docs/laravel/5.5/notifications&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;点击关注后发送通知&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\FollowersController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Notifications\NewUserFollowNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;attached&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//......
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;notify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;NewUserFollowNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;生成 notification 通知类&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:notification NewUserFollowNotification
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan notifications:table
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Notifications\NewUserFollowNotification.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toDatabase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;web 路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;notifications&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;NotificationsController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller NotificationsController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\NotificationsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;notifications.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\notifications\index.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;消息通知&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;notifications&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;notifications.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;snake_case&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;class_basename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources\views\notifications\new_user_follow_notification.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;notifications {{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$notification-&amp;gt;unread&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;() ? &amp;#39;unread&amp;#39; : &amp;#39; &amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$notification-&amp;gt;data&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;[&amp;#39;name&amp;#39;] }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;关注了你。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十五章-关注用户之邮件通知&#34;&gt;第二十五章 关注用户之邮件通知&lt;/h2&gt;
&lt;h3 id=&#34;251-sendcloud-邮件服务&#34;&gt;25.1 Sendcloud 邮件服务&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Notifications\NewUserFollowNotification.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Channels\SendcloudChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;SendcloudChannel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toSendcloud&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;yourName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;followerName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://zhihu.dev/user/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@sc.mail.wangyan.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followerName&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;关注了你&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Channels\SendcloudChannel.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Channels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Notifications\Notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;SendcloudChannel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Notification&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toSendcloud&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图略&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;resources/views/emails/follow.blade.php
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;252-directmail-邮件服务&#34;&gt;25.2 Directmail 邮件服务&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// .env
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;MAIL_DRIVER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;sendcloud&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;SEND_CLOUD_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;wang_yan&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;SEND_CLOUD_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ZN1XDQ8q6jRfS3JU&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Notifications\NewUserFollowNotification.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Channels\DirectmailChannel&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;DirectmailChannel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toDirectmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;yourName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;followerName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://zhihu.dev/user/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@dm.mail.wangyan.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followerName&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;关注了你&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Channels\DirectmailChannel.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Channels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Notifications\Notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;DirectmailChannel&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Notification&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toDirectmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十六章-重构邮件通知代码&#34;&gt;第二十六章 重构邮件通知代码&lt;/h2&gt;
&lt;p&gt;创建基类&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Mailer/Mailer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Mailer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Mail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Naux\Mail\SendCloudTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Mailer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$content&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;SendCloudTemplate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$template&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;raw&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;  &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@sc.mail.wangyan.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;关注通知&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Mailer/UserMailer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Mailer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserMailer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Mailer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;followNotifyEmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;yourName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;followerName&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://zhihu.dev/user/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;zhihu_new_user_follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Notifications/NewUserFollowNotification.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toSendcloud&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UserMailer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followNotifyEmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notifiable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;密码重置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Mailer/UserMailer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserMailer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Mailer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;passwordReset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password/reset&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;zhihu_password_reset&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sendPasswordResetNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UserMailer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;passwordReset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新用户注册邮件验证&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Mailer/UserMailer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UserMailer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Mailer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verifyEmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$confirmation_token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email.verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$confirmation_token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sendTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;zhihu_user_register&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/Auth/RegisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sendVerifyEmailTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;UserMailer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;verifyEmail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;confirmation_token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十七章-对答案进行点赞&#34;&gt;第二十七章 对答案进行点赞&lt;/h2&gt;
&lt;p&gt;模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model Vote -m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_votes_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;votes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 都是post
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/answer/{id}/votes/users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;VotesController@users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/answer/vote&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;VotesController@vote&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller VotesController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/VotesController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\AnswerRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;VotesController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// AnswerRepository
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;AnswerRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//根据用户id查询是否已经点赞
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;users&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// hasVoteFor()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;hasVoteFor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;voted&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;voted&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//点赞
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// AnswerRepository
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// voteFor()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$voted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;voteFor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$voted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;attached&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;votes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;voted&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;votes_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;voted&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;AnswerRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;byId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;find&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;user 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 一个用户可以点赞多个问题，一个问题可以被多个用户点赞，中间表是votes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;votes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsToMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;votes&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @param $answer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @return array
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;voteFor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;votes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toggle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 根据回答id查询是否有点赞记录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     *
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @param $answer
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @return bool
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;hasVoteFor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;votes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vuejs组件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&amp;#39;btn-primary&amp;#39;: voted}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vote&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;mounted&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/answer/&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/votes/users&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/answer/vote&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;voted&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;votes_count&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十八章-私信功能上&#34;&gt;第二十八章 私信功能（上）&lt;/h2&gt;
&lt;p&gt;创建数据表&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model Modles&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Message -m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;has_read&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;read_at&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nullable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/eloquent-relationships&#34;&gt;文档：《Eloquent：关联》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;私信模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Message.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Message&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 反向一对一，私信由某个用户发送的
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 反向一对多，私信可以发送给多个用户
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;belongsTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用户模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//用户可以向多个用户发送私信
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;hasMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第二十九章-私信功能下&#34;&gt;第二十九章 私信功能（下）&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/message/store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;MessagesController@store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;私信控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller MessagesController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\MessageRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MessagesController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MessageRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;MessageRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// /app/Repositories/MessageRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MessageRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vuejs 组件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Vue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;component&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;send-message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./components/SendMessage.vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;js&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;SendMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default pull-right&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;margin-top: -36px;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;showSendMessageForm&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发送私信&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal fade&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-send-message&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabindex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dialog&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-dialog&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-content&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-header&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button &amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;close&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dismiss&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;aria&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;times&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;发送私信&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/h4&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textarea&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;!status&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/textarea&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;alert alert-success&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;私信发送成功&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/strong&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;store&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;发送私信&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dismiss&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;关闭&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/message/store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;setTimeout&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#modal-send-message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;hide&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;showSendMessageForm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;#modal-send-message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十章-实现评论上&#34;&gt;第三十章 实现评论（上）&lt;/h2&gt;
&lt;p&gt;创建数据表&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:model Models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Comment -m&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/create_comments_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// commentable_id 和 commentable_type 用于多态关联
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unsignedInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;parent_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;nullable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;smallInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;level&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;is_hidden&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;多态关联&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/eloquent-relationships&#34;&gt;文档：《多态关联》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Comment.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Database\Eloquent\Model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Comment&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获得拥有此评论的模型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;commentable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;morphTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;获得答案的所有评论&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Answer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;morphMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;获得问题的所有评论&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Question.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;morphMany&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十一章-vuejs-实现评论组件&#34;&gt;第三十一章 Vuejs 实现评论组件&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/answer/{id}/comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CommentsController@answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/{id}/comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CommentsController@question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;CommentsController@store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller CommentsController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;获取多态关联&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/eloquent-relationships/1333#012e7e&#34;&gt;文档：《Eloquent 预加载》&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/CommentsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\models\Answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CommentsController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获取答案所以评论
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 获取问题所有评论
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 保存评论
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getModelNameFromType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$comment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Comment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_type&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getModelNameFromType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Question&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vuejs&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;js&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button is-naked delete-button&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;showCommentsForm&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal fade&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dialog&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;tabindex&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;-1&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;dialog&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-dialog&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-content&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-header&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button &amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;close&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dismiss&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;aria&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;times&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-title&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;评论列表&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/h4&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;comments.length &amp;gt; 0&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;comment in comments&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;24&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-object&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#39;http://zhihu.test/images/&amp;#39; + comment.user.avatar&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/a&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/h4&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;modal-footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;button&amp;#34;&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;store&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;评论&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;computed&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;dialog&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;comments-dialog-&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;-&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;#&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dialog&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;评论&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;total&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/comment&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,{&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;kd&#34;&gt;let&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;comment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Zhihu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Zhihu&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;push&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;total&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;showCommentsForm&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getComments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;modal&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;getComments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;axios&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/api/&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;then&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;})&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vuejs 组件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Vue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;component&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./components/Comments.vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/questions/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;question&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// ......
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answers&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// ......
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;answer&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// ......
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;由前端传入用户名和头像&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/layouts/app.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;window&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Zhihu&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{Auth::user()-&amp;gt;name}}&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{Auth::user()-&amp;gt;avatar}}&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十二章-repository-模式重构代码&#34;&gt;第三十二章 Repository 模式重构代码&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/CommentsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\AnswerRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\CommentRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\QuestionsRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CommentsController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;AnswerRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;QuestionsRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;CommentRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getAnswerCommentsById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getQuestionCommentsById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getModelNameFromType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;type&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;commentable_type&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$model&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getModelNameFromType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$type&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$type&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Question&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\Answer&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;AnswerRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Repositories/AnswerRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getAnswerCommentsById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;comments.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$answer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;QuestionsRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Repositories/QuestionsRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getQuestionCommentsById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;comments.user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;CommentRepository&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Repositories/CommentRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Comment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;CommentRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Comment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十三章-自定义-helper&#34;&gt;第三十三章 自定义 helper&lt;/h2&gt;
&lt;p&gt;33.1 优化话题路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/topics&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;TopicsController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:Controller TopicsController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/TopicsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\TopicRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TopicsController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    * TopicsController constructor.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    * @param $topics
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;    */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TopicRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$topics&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;topics&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getTopicsForTagging&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Repositories/TopicRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Topic&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;TopicRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getTopicsForTagging&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Topic&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;like&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;q&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;33.2 优问题路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QuestionFollowController@follower&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/question/follow&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QuestionFollowController@followThisQuestion&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth:api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/QuestionFollowController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;follower&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;followThisQuestion&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;byID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;question&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;followThis&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$followed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;detached&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;decrement&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$question&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increment&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followers_count&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;followed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;33.3 Helpers 函数&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Support/Helpers.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;function_exists&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$driver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$driver&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$driver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// composer.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;autoload&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s2&#34;&gt;&amp;#34;files&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;s2&#34;&gt;&amp;#34;app/Support/Helpers.php&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer dump-autoload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 在所有控制器中将
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;guard&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 替换成
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;api&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十四章-私信列表&#34;&gt;第三十四章 私信列表&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;InboxController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox/{userId}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;InboxController@show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller InboxController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;InboxController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$userId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$userId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/inbox/index.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;私信列表&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;first&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;fromUser-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/inbox/{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;first&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;fromUser-&amp;gt;id }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十五章-私信列表下&#34;&gt;第三十五章 私信列表（下）&lt;/h2&gt;
&lt;p&gt;解决发件人看不到已发私信&lt;/p&gt;
&lt;p&gt;改造数据表&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:migration add_dialog_id_to_messages --table&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;messages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database/migrations/add_dialog_id_to_messages.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bigInteger&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;24&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;down&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;dropColumn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Message.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/MessagesController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// ......
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;orWhere&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox/{dialogId}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;InboxController@show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Auth::id() == $key
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;按收件人分组后，如果当前登陆用户就是收件人，则显示发件人信息，否则显示收件人信息。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;私信列表&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;fromUser-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;toUser-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                                &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/inbox/{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;dialog_id }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十六章-回复私信&#34;&gt;第三十六章 回复私信&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox/{dialogId}/store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;InboxController@store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;orWhere&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unique&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialogId&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/inbox/show.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;对话列表&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/inbox/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}/store&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textarea&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;body&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textarea&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-success&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;发送私信&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;messages-list&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;,&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$message-&amp;gt;fromUser&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                               &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;pull-right&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;created_at&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Y-m-d&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十七章-标记私信已读&#34;&gt;第三十七章 标记私信已读&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Message.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;read_at&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;forceFill&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;has_read&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;T&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;read_at&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;freshTimestamp&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;newCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$models&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;MessageCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// /app/Models/MessageCollection.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Database\Eloquent\Collection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MessageCollection&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Collection&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;each&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十八章-显示未读私信&#34;&gt;第三十八章 显示未读私信&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 根据 dialog_id 会话分组（一个会话有多条私信），倒序（每个会话中最后的私信排最前）。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;orWhere&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialogId&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/inbox/index.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 每个会话显示一个列表，如果登陆用户就是发件人，那么显示收件人头像，否则显示发件人头像。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// $messageGroup-&amp;gt;first() 指回话中的最后一条私信记录（messages已经倒序）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;私信列表&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media {{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;first&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;shouldAddUnreadClass() ? &amp;#39;unread&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-left&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;toUser-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;, &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;last&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;fromUser-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;alt&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;media-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                               &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                               &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;last&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h4&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/inbox/{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$messageGroup-&amp;gt;first&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;()-&amp;gt;dialog_id }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messageGroup&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;body&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endforeach&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/Message.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;read&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has_read&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;T&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;unread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has_read&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;shouldAddUnreadClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;c1&#34;&gt;// 如果登陆用户就是发件人，那么始终未读
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;unread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;优化&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;orWhere&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;}])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;p&#34;&gt;}])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialogId&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第三十九章-私信实现-repository-模式&#34;&gt;第三十九章 私信实现 Repository 模式&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Repositories/MessageRepository.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;MessageRepository&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getAllMessages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;orWhere&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getDialogMessagesBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;fromUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;toUser&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$query&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}])&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;latest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getStingleMessageBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Repositories\MessageRepository&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Auth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;InboxController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;MessageRepository&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getAllMessages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;groupBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getDialogMessagesBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$messages&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;inbox.show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;messages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialogId&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStingleMessageBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十章-私信通知&#34;&gt;第四十章 私信通知&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; php artisan make:notification NewMessageNotification&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Notifications/NewMessageNotification.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Notifications&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Notifications\Notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;NewMessageNotification&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Notification&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Message&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;via&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;database&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;toDatabase&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;dialog_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/InboxController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStingleMessageBy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to_user_id&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from_user_id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$newMessage&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;from_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Auth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;to_user_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$toUserId&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog_id&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$dialogId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$newMessage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toUser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;notify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;NewMessageNotification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$newMessage&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/notifications/new_message_notification.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;notifications&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/inbox/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;给你发了一条私信&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十一章-notifications-已读&#34;&gt;第四十一章 notifications 已读&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# routes/web.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Route::get&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;notifications/{notification}&amp;#39;&lt;/span&gt;,&lt;span class=&#34;s1&#34;&gt;&amp;#39;NotificationsController@show&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/NotificationsController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;DatabaseNotification&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;markAsRead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;\Request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;query&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;redirect_url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/notifications/new_message_notification.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;notifications {{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$notification-&amp;gt;unread&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;() ? &amp;#39;unread&amp;#39; : &amp;#39; &amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/notifications/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}?redirect_url=https://www.bg7pbp.com/inbox/{&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;dialog&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$notification&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;给你发了一条私信&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十二章-上传头像组件&#34;&gt;第四十二章 上传头像组件&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UsersController@avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller UsersController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/UsersController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;UsersController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users.avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/users/avatar.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;更换头像&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ url(&amp;#39;images&amp;#39;,Auth::user()-&amp;gt;avatar) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vue 组件&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://github.com/dai-siki/vue-image-crop-upload&#34;&gt;http://github.com/dai-siki/vue-image-crop-upload&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn add vue-image-crop-upload babel-polyfill&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// /resources/assets/js/app.js
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Vue&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;component&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user-avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;./components/Avatar.vue&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;js&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Avatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;img&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropSuccess&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropUploadSuccess&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropUploadFail&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;show&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;300&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;300&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/upload&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;params&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;headers&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;png&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/my-upload&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;imgDataUrl&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;48&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;toggleShow&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;设置头像&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/a&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;babel-polyfill&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// es6 shim
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myUpload&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vue-image-crop-upload&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;123456798&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;smail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*_~&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;my-upload&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myUpload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;toggleShow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropSuccess&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-------- crop success --------&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropUploadSuccess&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;jsonData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-------- upload success --------&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;jsonData&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;field: &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropUploadFail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-------- upload fail --------&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;field: &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十三章-头像上传到服务器&#34;&gt;第四十三章 头像上传到服务器&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;UsersController@avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/UsersController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;changeAvatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getClientOriginalExtension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;move&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;public_path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatars&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;avatar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;asset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatars/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;vue 组件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;&amp;lt;!--&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;resources&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;assets&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;js&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Avatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vue&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;template&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text-align: center;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;my&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;img&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropSuccess&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;success&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropUploadSuccess&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;crop&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;upload&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;cropUploadFail&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;v&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;model&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;show&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;300&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;300&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/avatar&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;params&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;headers&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;png&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/my-upload&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;img&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;imgDataUrl&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;width: 80px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;margin-top: 20px;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;kr&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-default&amp;#34;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;toggleShow&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;设置头像&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/button&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/div&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/template&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;babel-polyfill&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myUpload&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;vue-image-crop-upload&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kr&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;props&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;avatar&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;params&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;headers&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nx&#34;&gt;smail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;*_~&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;s1&#34;&gt;&amp;#39;X-CSRF-TOKEN&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;meta[name=&amp;#34;csrf-token&amp;#34;]&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;attr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;components&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;my-upload&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myUpload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;methods&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;toggleShow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropSuccess&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropUploadSuccess&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;imgDataUrl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;toggleShow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;cropUploadFail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-------- upload fail --------&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nx&#34;&gt;console&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;field: &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yarn run dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十四章-头像上传到七牛&#34;&gt;第四十四章 头像上传到七牛&lt;/h2&gt;
&lt;p&gt;安装扩展包&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/overtrue/laravel-filesystem-qiniu&#34;&gt;https://github.com/overtrue/laravel-filesystem-qiniu&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require &lt;span class=&#34;s2&#34;&gt;&amp;#34;overtrue/laravel-filesystem-qiniu&amp;#34;&lt;/span&gt; -vvv&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// config/app.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// Other service providers...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Overtrue\LaravelFilesystem\Qiniu\QiniuStorageServiceProvider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// config/filesystems.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;disks&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;qiniu&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;driver&amp;#39;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;qiniu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;access_key&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QINIU_ACCESS_KEY&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;xxxxxxxxxxxxxxxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;secret_key&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QINIU_SECRET_KEY&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;xxxxxxxxxxxxxxxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;bucket&amp;#39;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QINIU_BUCKET&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;test&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;s1&#34;&gt;&amp;#39;domain&amp;#39;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;QINIU_DOMAIN&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;xxx.clouddn.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// or host: https://xxxx.clouddn.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/UsersController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;changeAvatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;img&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;avatars/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;md5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;time&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getClientOriginalExtension&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;Storage&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;disk&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;qiniu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;writeStream&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$file&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getRealPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;avatar&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;http://&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;config&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;filesystems.disks.qiniu.domain&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十五章-实现修改密码&#34;&gt;第四十五章 实现修改密码&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;PasswordController@password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password/update&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;PasswordController@update&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;验证密码&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:request ChangePasswordRequest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Requests/ChangePasswordRequest.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Requests&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Foundation\Http\FormRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ChangePasswordRequest&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FormRequest&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;authorize&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;rules&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:6&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;required|min:6|confirmed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;messages&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;原始密码不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;原始密码不能少于6个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password.required&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;新始密码不能为空&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password.min&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;新密码不能少于6个字符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password.confirmed&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;两次输入新密码不符&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller PasswordController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/PasswordController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Hash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Requests\ChangePasswordRequest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PasswordController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users.password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ChangePasswordRequest&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Hash&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;check&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;password&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;bcrypt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;flash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;密码修改成功&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;flash&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;密码修改失败&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;danger&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// resources/views/users/password.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;修改密码&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;flash::message&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-horizontal&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/password/update&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;old_password&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;old_password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-4 control-label&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;原始密码&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;old_password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;old_password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ old(&amp;#39;old_password&amp;#39;) }}&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;old_password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;password&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-4 control-label&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;输入新密码&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password-confirm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-4 control-label&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;确认新密码&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password-confirm&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;password_confirmation&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6 col-md-offset-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary btn-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                        &lt;span class=&#34;nx&#34;&gt;更改密码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十六章-用户个人设置&#34;&gt;第四十六章 用户个人设置&lt;/h2&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes/web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;setting&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SettingController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;setting&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SettingController@store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller SettingController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/SettingController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;SettingController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;view&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;users.setting&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;array_only&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;city&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$casts&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;array&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;默认值&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/Auth/RegisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;city&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;视图&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// /resources/views/users/setting.blade.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;layouts.app&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;row&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-8 col-md-offset-2&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel panel-default&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-heading&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;设置个人信息&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;panel-body&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-horizontal&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;role&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;POST&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/setting&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;csrf_field&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;city&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-4 control-label&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;现居城市&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;city&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;{{ user()-&amp;gt;settings[&amp;#39;city&amp;#39;] }}&amp;#34;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;city&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;city&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group{{ &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$errors-&amp;gt;has&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&amp;#39;city&amp;#39;) ? &amp;#39; has-error&amp;#39; : &amp;#39;&amp;#39; }}&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;bio&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-4 control-label&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;个人简介&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textarea&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;bio&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-control&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;bio&amp;#34;&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;required&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;textarea&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;has&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;help-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{{&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$errors&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strong&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;endif&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;form-group&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;col-md-6 col-md-offset-4&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;btn btn-primary btn-block&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                       &lt;span class=&#34;nx&#34;&gt;更新资料&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;               &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;endsection&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第四十七章-重构用户设置&#34;&gt;第四十七章 重构用户设置&lt;/h2&gt;
&lt;p&gt;控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Http/Controllers/SettingController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;back&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app/Models/User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Setting&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Setting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$allowed&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;city&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bio&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$settings&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_merge&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;array_only&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;allowed&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;settings&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$settings&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel/5.5/&#34;&gt;Laravel 5.5 中文文档&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://laravel-china.org/docs/laravel-specification/5.5&#34;&gt;Laravel 项目开发规范&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://laravist.com/series/build-a-zhihu-website-with-laravel&#34;&gt;Laravel Vuejs 实战：开发知乎&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>阿里云邮件推送 Package</title>
        <link>https://www.bg7pbp.com/p/laravel-aliyun-directmail/</link>
        <pubDate>Tue, 15 Aug 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-aliyun-directmail/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95&#34;&gt;一、安装方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95&#34;&gt;二、配置方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8&#34;&gt;三、基本使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E7%AE%80%E5%8D%95%E5%AE%9E%E4%BE%8B&#34;&gt;四、简单实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;使用阿里云的邮件推送（DirectMail）发送邮件。&lt;/p&gt;
&lt;p&gt;优点是非常简洁，没有引入阿里云全家桶，使用 laravel mailables 发送邮件。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;邮件推送（DirectMail）是一款简单高效的电子邮件发送服务，它构建在可靠稳定的阿里云基础之上，帮助您快速、精准地实现事务邮件、通知邮件和批量邮件的发送。邮件推送历经两年双11考验，在发送速度、系统稳定性和到达率上表现优异；提供丰富的接口和灵活的使用方式，为企业和开发者解决邮件投递的难题，用户无需自建邮件服务器，开通服务即可享受阿里云优质的邮件服务，获得邮件投递的最佳实践。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;DirectMail 官网： &lt;a href=&#34;https://www.aliyun.com/product/directmail&#34;&gt;https://www.aliyun.com/product/directmail&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一安装方法&#34;&gt;一、安装方法&lt;/h2&gt;
&lt;p&gt;项目地址：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wangyan/directmail&#34;&gt;https://github.com/wangyan/directmail&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;在项目目录下执行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer require wang_yan/directmail:dev-master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二配置方法&#34;&gt;二、配置方法&lt;/h2&gt;
&lt;p&gt;修改 &lt;code&gt;config/app.php&lt;/code&gt;，添加服务提供者&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;c1&#34;&gt;// 添加这行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;WangYan\DirectMail\DirectMailTransportProvider&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 &lt;code&gt;.env&lt;/code&gt; 中配置你的密钥， 并修改邮件驱动为 &lt;code&gt;directmail&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MAIL_DRIVER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;directmail
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DIRECT_MAIL_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;# AccessKeyId&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DIRECT_MAIL_SECRET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;# AccessSecret&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三基本使用&#34;&gt;三、基本使用&lt;/h2&gt;
&lt;p&gt;详细用法请参考 laravel 文档：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/mail&#34;&gt;http://d.laravel-china.org/docs/5.4/mail&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;使用演示：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://laravel.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;laravel&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Mail&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;send&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.register&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;us@example.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;foo@example.com&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;subject&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello World&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑邮件模板&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;resources\views\emails\register&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;blade&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四简单实例&#34;&gt;四、简单实例&lt;/h2&gt;
&lt;p&gt;演示怎样发送注册验证邮件，首先初始化&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:auth
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 &lt;code&gt;RegisterController&lt;/code&gt; 控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?php 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// app&lt;span class=&#34;se&#34;&gt;\H&lt;/span&gt;ttp&lt;span class=&#34;se&#34;&gt;\C&lt;/span&gt;ontrollers&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;uth&lt;span class=&#34;se&#34;&gt;\R&lt;/span&gt;egisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    use Illuminate&lt;span class=&#34;se&#34;&gt;\S&lt;/span&gt;upport&lt;span class=&#34;se&#34;&gt;\F&lt;/span&gt;acades&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;ail&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    protected &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; create&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;array &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  User::create&lt;span class=&#34;o&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; str_random&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;40&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; bcrypt&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;-&amp;gt;sendVerifyEmailTo&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    private &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; sendVerifyEmailTo&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;-&amp;gt;name,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; Route&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email.verify&amp;#39;&lt;/span&gt;,&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;-&amp;gt;confirmation_token&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        Mail::send&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;emails.register&amp;#39;&lt;/span&gt;, &lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;, &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; use &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;-&amp;gt;from&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;service@dm.mail.wangyan.org&amp;#39;&lt;/span&gt;, env&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;APP_NAME&amp;#39;&lt;/span&gt;,&lt;span class=&#34;s1&#34;&gt;&amp;#39;Laravel&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;-&amp;gt;to&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;-&amp;gt;email&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;-&amp;gt;subject&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;请验证您的 Email 地址&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;})&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 User 模型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;?php 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;// app&lt;span class=&#34;se&#34;&gt;\U&lt;/span&gt;ser.php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    protected &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;, &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;,&lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加邮件模板&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim resources&lt;span class=&#34;se&#34;&gt;\v&lt;/span&gt;iews&lt;span class=&#34;se&#34;&gt;\e&lt;/span&gt;mails&lt;span class=&#34;se&#34;&gt;\r&lt;/span&gt;egister.blade.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\web.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/email/verify/{token}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;EmailController@verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email.verify&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller EmailController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;EmailController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @param $token
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;verify&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;confirmation_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;first&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;is_active&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;confirmation_token&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;str_random&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;save&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;redirect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/home&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Laravel 5 开发 API 笔记</title>
        <link>https://www.bg7pbp.com/p/laravel-api-development-notes/</link>
        <pubDate>Tue, 01 Aug 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-api-development-notes/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC1%E7%AB%A0-%E5%A1%AB%E5%85%85%E6%B5%8B%E8%AF%95%E6%95%B0%E6%8D%AE&#34;&gt;第1章 填充测试数据&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E7%94%9F%E6%88%90%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A1%A8&#34;&gt;1.1 生成数据库表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-eloquent-%E6%A8%A1%E5%9E%8B%E5%B7%A5%E5%8E%82%E5%A1%AB%E5%85%85%E6%95%B0%E6%8D%AE&#34;&gt;1.2 Eloquent 模型工厂填充数据&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC2%E7%AB%A0-%E5%88%9D%E6%AD%A5%E5%AE%9E%E7%8E%B0-api-%E7%B3%BB%E7%BB%9F&#34;&gt;第2章 初步实现 API 系统&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E6%B3%A8%E5%86%8C%E8%B7%AF%E7%94%B1&#34;&gt;2.1 注册路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E7%BC%96%E8%BE%91%E6%8E%A7%E5%88%B6%E5%99%A8&#34;&gt;2.2 编辑控制器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC3%E7%AB%A0-api-%E5%AD%97%E6%AE%B5%E6%98%A0%E5%B0%84&#34;&gt;第3章 API 字段映射&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E9%99%84%E5%8A%A0%E7%8A%B6%E6%80%81%E5%88%B0-response-%E5%93%8D%E5%BA%94&#34;&gt;3.1 附加状态到 Response 响应&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E9%9A%90%E8%97%8F%E6%95%B0%E6%8D%AE%E5%BA%93%E5%AD%97%E6%AE%B5%E7%BB%93%E6%9E%84&#34;&gt;3.2 隐藏数据库字段结构&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC4%E7%AB%A0-%E9%87%8D%E6%9E%84-api-%E4%BB%A3%E7%A0%81&#34;&gt;第4章 重构 API 代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC5%E7%AB%A0-%E5%A4%84%E7%90%86%E9%94%99%E8%AF%AF%E8%BF%94%E5%9B%9E&#34;&gt;第5章 处理错误返回&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC6%E7%AB%A0-%E5%AF%B9%E8%AF%B7%E6%B1%82api%E7%9A%84%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81&#34;&gt;第6章 对请求API的用户认证&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC7%E7%AB%A0-%E5%BC%95%E5%85%A5-dingo-api--%E5%92%8C-jwt&#34;&gt;第7章 引入 Dingo API  和 JWT&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#71-%E5%BC%95%E5%85%A5-dingo-api&#34;&gt;7.1 引入 Dingo API&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#72-%E5%BC%95%E5%85%A5-jwt&#34;&gt;7.2 引入 JWT&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC8%E7%AB%A0-dingo-api-%E5%88%9D%E6%8E%A2&#34;&gt;第8章 Dingo API 初探&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#81-dingo-api-%E9%85%8D%E7%BD%AE&#34;&gt;8.1 Dingo API 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#82--dingo-api-%E8%B7%AF%E7%94%B1&#34;&gt;8.2  Dingo API 路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#82--dingo-api-%E5%93%8D%E5%BA%94&#34;&gt;8.2  Dingo API 响应&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#821-%E5%88%9B%E5%BB%BA-basecontroller&#34;&gt;8.2.1 创建 BaseController&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#822--%E5%93%8D%E5%BA%94%E4%B8%80%E4%B8%AA%E6%95%B0%E7%BB%84&#34;&gt;8.2.2  响应一个数组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#823--%E5%93%8D%E5%BA%94%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0&#34;&gt;8.2.3  响应一个元素&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#824--%E5%93%8D%E5%BA%94%E4%B8%80%E4%B8%AA%E5%85%83%E7%B4%A0%E9%9B%86%E5%90%88&#34;&gt;8.2.4  响应一个元素集合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#825--%E5%93%8D%E5%BA%94%E5%88%86%E9%A1%B5&#34;&gt;8.2.5  响应分页&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC9%E7%AB%A0-%E5%BC%80%E5%A7%8B%E4%BD%BF%E7%94%A8-jwt&#34;&gt;第9章 开始使用 JWT&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#91-%E8%B7%AF%E7%94%B1&#34;&gt;9.1 路由&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#92-%E5%88%9B%E5%BB%BA--authcontroller&#34;&gt;9.2 创建  AuthController&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#93-%E8%B0%83%E8%AF%95&#34;&gt;9.3 调试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AC%AC10%E7%AB%A0-jwt-%E5%85%B6%E4%BB%96%E7%94%A8%E6%B3%95&#34;&gt;第10章 JWT 其他用法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#101-%E6%A0%B9%E6%8D%AE-token-%E8%BF%94%E5%9B%9E%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF&#34;&gt;10.1 根据 token 返回用户信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#102--%E8%A7%A3%E5%86%B3%E8%AF%B7%E6%B1%82%E5%AD%97%E6%AE%B5%E4%B8%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8D%E4%B8%80%E8%87%B4%E9%97%AE%E9%A2%98&#34;&gt;10.2  解决请求字段与数据库不一致问题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;环境：homestead 5.3.2  &lt;br&gt;
版本：laravel 5.4&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer config -g repo.packagist composer https://packagist.laravel-china.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer create-project --prefer-dist laravel/laravel api 5.4.*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将 &lt;code&gt;App\User&lt;/code&gt; 移动移动到 &lt;code&gt;App\Models\User&lt;/code&gt; 目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// App\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// config\auth.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;users&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;driver&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;eloquent&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;model&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第1章-填充测试数据&#34;&gt;第1章 填充测试数据&lt;/h2&gt;
&lt;h3 id=&#34;11-生成数据库表&#34;&gt;1.1 生成数据库表&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/migrations&#34;&gt;http://d.laravel-china.org/docs/5.4/migrations&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;创建数据库表&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:migration create_lessons_table --create&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;lessons&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;创建模型和控制器（这里将模型放到 Models 目录下）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller LessonController -m Models&lt;span class=&#34;se&#34;&gt;\\&lt;/span&gt;Lesson&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改 migrate&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database\migrations\2017_07_01_182454_create_lessons_table.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lessons&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Blueprint&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;increments&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;id&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;string&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;text&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$table&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;timestamps&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解决导入错误&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Providers\AppServiceProvider.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Support\Facades\Schema&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;boot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Schema&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;defaultStringLength&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;191&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;生成数据表&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan migrate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-eloquent-模型工厂填充数据&#34;&gt;1.2 Eloquent 模型工厂填充数据&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/database-testing#writing-factories&#34;&gt;http://d.laravel-china.org/docs/5.4/database-testing#writing-factories&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;修改 &lt;code&gt;ModelFactory.php&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// database\factories\ModelFactory.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$factory&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;define&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;App\Models\Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Faker\Generator&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;sentence&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;paragraph&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$faker&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法一：使用 tinker 生成数据&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan tinker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt;factory&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;App&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;odels&lt;span class=&#34;se&#34;&gt;\L&lt;/span&gt;esson::class,60&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;-&amp;gt;create&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt;&amp;gt;&amp;gt; quit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：编写 Seeders  生成数据&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/seeding&#34;&gt;http://d.laravel-china.org/docs/5.4/seeding&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:seeder LessonsTableSeeder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//  database\seeds\LessonsTableSeeder.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;factory&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;App\Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan db:seed --class&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;LessonsTableSeeder&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第2章-初步实现-api-系统&#34;&gt;第2章 初步实现 API 系统&lt;/h2&gt;
&lt;h3 id=&#34;21-注册路由&#34;&gt;2.1 注册路由&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/routing&#34;&gt;http://d.laravel-china.org/docs/5.4/routing&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;prefix&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;v1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;Route&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;resource&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lesson&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;LessonController&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看已注册的路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注意这里不是 api:route&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan route:list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/laravel-route.jpg&#34; alt=&#34;查看已注册的路由&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;22-编辑控制器&#34;&gt;2.2 编辑控制器&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/controllers&#34;&gt;http://d.laravel-china.org/docs/5.4/controllers&lt;/a&gt; &lt;br&gt;
&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/eloquent&#34;&gt;http://d.laravel-china.org/docs/5.4/eloquent&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 旧版本
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//return Lesson::findOrfail($id);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;访问：&lt;a href=&#34;http://api.dev/api/v1/lesson&#34;&gt;http://api.dev/api/v1/lesson&lt;/a&gt; 和 &lt;a href=&#34;http://api.dev/api/v1/lesson/1&#34;&gt;http://api.dev/api/v1/lesson/1&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;第3章-api-字段映射&#34;&gt;第3章 API 字段映射&lt;/h2&gt;
&lt;h3 id=&#34;31-附加状态到-response-响应&#34;&gt;3.1 附加状态到 Response 响应&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/responses&#34;&gt;http://d.laravel-china.org/docs/5.4/responses&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-隐藏数据库字段结构&#34;&gt;3.2 隐藏数据库字段结构&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://php.net/manual/zh/function.array-map.php&#34;&gt;http://php.net/manual/zh/function.array-map.php&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transformCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transformCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;transform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;is_free&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第4章-重构-api-代码&#34;&gt;第4章 重构 API 代码&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Transformer\LessonTransfromer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Transformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonTransfromer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Transformer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;is_free&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Transformer\Transformer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Transformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;abstract&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Transformer&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transformCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;transform&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$items&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;abstract&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Transformer\LessonTransfromer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessonTransfromer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 依赖注入
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;LessonTransfromer&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessonTransfromer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lessonTransfromer&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessonTransfromer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lessonTransfromer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transformCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lessonTransfromer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第5章-处理错误返回&#34;&gt;第5章 处理错误返回&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://d.laravel-china.org/docs/5.4/errors&#34;&gt;http://d.laravel-china.org/docs/5.4/errors&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;生成 ApiController&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:controller ApiController&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// App\Http\Controllers\ApiController
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;ApiController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$statusCode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;statusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;setStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$statusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;statusCode&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$statusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;responseNotFound&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Not Found&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;responseError&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;failed&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;s1&#34;&gt;&amp;#39;message&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\Response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$data&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ApiController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lessonTransfromer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transformCollection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status_code&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;200&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;data&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;lessonTransfromer&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Exceptions\Handler.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Database\Eloquent\ModelNotFoundException&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ModelNotFoundException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Exception&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$exception&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$exception&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;instanceof&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;ModelNotFoundException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\App\Http\Controllers\ApiController&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseNotFound&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;404 not found&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;parent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;render&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$exception&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第6章-对请求api的用户认证&#34;&gt;第6章 对请求API的用户认证&lt;/h2&gt;
&lt;p&gt;生成用户验证模块&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan make:auth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\Auth\RegisterController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Http\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;LessonTransfromer&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lessonTransfromer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;middleware&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth.basic&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;only&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;store&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;store&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;422&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;validata fails&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;setStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;201&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;status&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;success&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;message&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lesson created&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Models\Lesson.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Model&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$fillable&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后使用 postman 调试 &lt;code&gt;http://api.dev/api/v1/lesson/&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;第7章-引入-dingo-api--和-jwt&#34;&gt;第7章 引入 Dingo API  和 JWT&lt;/h2&gt;
&lt;h3 id=&#34;71-引入-dingo-api&#34;&gt;7.1 引入 Dingo API&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;官方： &lt;a href=&#34;https://github.com/dingo/api&#34;&gt;https://github.com/dingo/api&lt;/a&gt;  &lt;br&gt;
中文： &lt;a href=&#34;https://github.com/liyu001989/dingo-api-wiki-zh&#34;&gt;https://github.com/liyu001989/dingo-api-wiki-zh&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// api\composer.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;dingo/api&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1.0.*@dev&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注册 &lt;code&gt;provider &lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# config\app.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Dingo&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;pi&lt;span class=&#34;se&#34;&gt;\P&lt;/span&gt;rovider&lt;span class=&#34;se&#34;&gt;\L&lt;/span&gt;aravelServiceProvider::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加 &lt;code&gt;Facades&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# config\app.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;aliases&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;API&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; Dingo&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;pi&lt;span class=&#34;se&#34;&gt;\F&lt;/span&gt;acade&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;PI::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;DingoRoute&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; Dingo&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;pi&lt;span class=&#34;se&#34;&gt;\F&lt;/span&gt;acade&lt;span class=&#34;se&#34;&gt;\R&lt;/span&gt;oute::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;发布配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan vendor:publish --provider&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Dingo\Api\Provider\LaravelServiceProvider&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;72-引入-jwt&#34;&gt;7.2 引入 JWT&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;主页 &lt;a href=&#34;https://github.com/tymondesigns/jwt-auth/&#34;&gt;https://github.com/tymondesigns/jwt-auth/&lt;/a&gt; &lt;br&gt;
安装文档 &lt;a href=&#34;https://github.com/tymondesigns/jwt-auth/wiki/Installation&#34;&gt;https://github.com/tymondesigns/jwt-auth/wiki/Installation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// api\composer.json
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;tymon/jwt-auth&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0.5.*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注册 &lt;code&gt;provider &lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# config\app.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;providers&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Tymon&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth&lt;span class=&#34;se&#34;&gt;\P&lt;/span&gt;roviders&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuthServiceProvider::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加 &lt;code&gt;Facades&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# config\app.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;aliases&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;JWTAuth&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; Tymon&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth&lt;span class=&#34;se&#34;&gt;\F&lt;/span&gt;acades&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;JWTFactory&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; Tymon&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth&lt;span class=&#34;se&#34;&gt;\F&lt;/span&gt;acades&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTFactory::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;发布配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan vendor:publish --provider&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;Tymon\JWTAuth\Providers\JWTAuthServiceProvider&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;生成key&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan jwt:generate&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第8章-dingo-api-初探&#34;&gt;第8章 Dingo API 初探&lt;/h2&gt;
&lt;h3 id=&#34;81-dingo-api-配置&#34;&gt;8.1 Dingo API 配置&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/liyu001989/dingo-api-wiki-zh/blob/master/Configuration.md&#34;&gt;https://github.com/liyu001989/dingo-api-wiki-zh/blob/master/Configuration.md&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# api.dev\.env&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_STANDARDS_TREE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vnd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_PREFIX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;api
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_VERSION&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;v1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;API_DEBUG&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/liyu001989/dingo-api-wiki-zh/blob/master/Authentication.md&#34;&gt;https://github.com/liyu001989/dingo-api-wiki-zh/blob/master/Authentication.md&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# config\api.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    // 仅供参考
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;basic&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; new Dingo&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;pi&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;uth&lt;span class=&#34;se&#34;&gt;\P&lt;/span&gt;rovider&lt;span class=&#34;se&#34;&gt;\B&lt;/span&gt;asic&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; new Dingo&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;pi&lt;span class=&#34;se&#34;&gt;\A&lt;/span&gt;uth&lt;span class=&#34;se&#34;&gt;\P&lt;/span&gt;rovider&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WT&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Tymon\JWTAuth\JWTAuth&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;])&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s1&#34;&gt;&amp;#39;auth&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;basic&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Dingo\Api\Auth\Provider\Basic&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Dingo\Api\Auth\Provider\JWT&amp;#39;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加路由中间件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# app\Http\Kernel.php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    protected &lt;span class=&#34;nv&#34;&gt;$routeMiddleware&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt.auth&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;ymon&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;iddleware&lt;span class=&#34;se&#34;&gt;\G&lt;/span&gt;etUserFromToken::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt.refresh&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&amp;gt; &lt;span class=&#34;se&#34;&gt;\T&lt;/span&gt;ymon&lt;span class=&#34;se&#34;&gt;\J&lt;/span&gt;WTAuth&lt;span class=&#34;se&#34;&gt;\M&lt;/span&gt;iddleware&lt;span class=&#34;se&#34;&gt;\R&lt;/span&gt;efreshToken::class,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;82--dingo-api-路由&#34;&gt;8.2  Dingo API 路由&lt;/h3&gt;
&lt;p&gt;这里的路由就是 &lt;code&gt;Dingo API Endpoints&lt;/code&gt; ，端点是路由的另一种说法,详细用法见下面文档。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/dingo/api/wiki/Creating-API-Endpoints&#34;&gt;https://github.com/dingo/api/wiki/Creating-API-Endpoints&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;请注意：&lt;code&gt;v1&lt;/code&gt; 不能乱用，它已经在你的环境配置中定义好了。 &lt;code&gt;API_VERSION=v1&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Dingo\Api\Routing\Router&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;v1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;namespace&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Api\Controllers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lessons&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;LessonController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看路由,注意区别 &lt;code&gt;route:lists&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php artisan api:route&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;地址是 &lt;code&gt; /api/lessons&lt;/code&gt; 没有 &lt;code&gt;v1&lt;/code&gt; 前缀，访问 &lt;code&gt;http://api.dev/api/lessons/&lt;/code&gt;  看到已经正常。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/laravel-api-route.jpg&#34; alt=&#34;查看已注册的路由&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;82--dingo-api-响应&#34;&gt;8.2  Dingo API 响应&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/dingo/api/wiki/Responses&#34;&gt;https://github.com/dingo/api/wiki/Responses&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;下面例子演示如何使用响应生成器 (Response Builder)&lt;/p&gt;
&lt;h4 id=&#34;821-创建-basecontroller&#34;&gt;8.2.1 创建 BaseController&lt;/h4&gt;
&lt;p&gt;为了使用 &lt;code&gt;Dingo\Api\Routing\Helpers trait&lt;/code&gt; 首先要创建基础控制器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\BaseController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Http\Controllers\Controller&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Dingo\Api\Routing\Helpers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;BaseController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Controller&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Helpers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;822--响应一个数组&#34;&gt;8.2.2  响应一个数组&lt;/h4&gt;
&lt;p&gt;意思是直接以数组形式返回 $lessons 原始数据&lt;/p&gt;
&lt;p&gt;创建 LessonController 继承上面的 BaseController&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;BaseController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;toArray&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://api.dev/api/lessons&#34;&gt;http://api.dev/api/lessons&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;823--响应一个元素&#34;&gt;8.2.3  响应一个元素&lt;/h4&gt;
&lt;p&gt;通过实例化 LessonTransformer 来处理 $lesson 数据，然后再返回经过处理的数据。&lt;/p&gt;
&lt;p&gt;首先，新建 &lt;code&gt;LessonController&lt;/code&gt; 类&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Transformer\LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;BaseController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 通过实例化 LessonTransformer 来处理 $lesson 数据，然后再返回
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * LessonTransformer 类必须继承 TransformerAbstract 抽象类
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 因为 TransformerAbstract 类提供了 item 和 collection 方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 此外 LessonTransformer 类中必须有 transform 方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;findOrFail&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;item&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;接着，新建 &lt;code&gt;LessonTransformer&lt;/code&gt; ，命名空间是 &lt;code&gt;App\Api\Transformer&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Transformer\LessonTransformer.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Transformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;League\Fractal\TransformerAbstract&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonTransformer&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;TransformerAbstract&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;transform&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;title&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;content&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;body&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;is_free&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;boolean&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;free&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;824--响应一个元素集合&#34;&gt;8.2.4  响应一个元素集合&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;collection&lt;/code&gt; 会自动调用  &lt;code&gt;new LessonTransformer()&lt;/code&gt; 中的 &lt;code&gt;transform&lt;/code&gt; 方法&lt;/p&gt;
&lt;p&gt;意思就是上面 &lt;code&gt;LessonTransformer&lt;/code&gt; 类中必须有 &lt;code&gt;transform&lt;/code&gt; 方法&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Transformer\LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\Lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;BaseController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;collection&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;825--响应分页&#34;&gt;8.2.5  响应分页&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\LessonController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Transformer\LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Lesson&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;LessonController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;BaseController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Lesson&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;paginate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;paginator&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$lessons&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;LessonTransformer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;第9章-开始使用-jwt&#34;&gt;第9章 开始使用 JWT&lt;/h2&gt;
&lt;h3 id=&#34;91-路由&#34;&gt;9.1 路由&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;app&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Dingo\Api\Routing\Router&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;version&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;v2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;namespace&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Api\Controllers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user/login&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AuthController@authenticate&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user/register&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AuthController@register&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;middleware&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt.auth&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lessons&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;LessonController@index&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;lesson/{id}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;LessonController@show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;92-创建--authcontroller&#34;&gt;9.2 创建  AuthController&lt;/h3&gt;
&lt;p&gt;定义 user 模型位置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// api\config\jwt.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;App\Models\User&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;创建 AuthController，注意这里 use 了 Request&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// app\Api\Controllers\AuthController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;namespace&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Api\Controllers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App\Models\User&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 注意这里 use 了  Request
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Illuminate\Http\Request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JWTAuth&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tymon\JWTAuth\Exceptions\JWTException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;AuthController&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;extends&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;BaseController&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;authenticate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 返回请求中 email 和 password 的值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;only&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// attempt to verify the credentials and create a token for the user
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JWTAuth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;attempt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;invalid_credentials&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;401&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;JWTException&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;c1&#34;&gt;// something went wrong whilst attempting to encode the token
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;error&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;could_not_create_token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;500&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 登录成功后，以 json 形式返回 token 值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;register&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;Request&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$newUser&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;name&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;User&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$newUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$token&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JWTAuth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;fromUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 注册成功后返回 token
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;93-调试&#34;&gt;9.3 调试&lt;/h3&gt;
&lt;p&gt;登录调试：post 请求，body 携带 emial 和 password 参数&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://api.dev/api/user/login&#34;&gt;http://api.dev/api/user/login&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注册调试：post 请求，body 携带 emial、name 和 password 参数&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://api.dev/api/user/register&#34;&gt;http://api.dev/api/user/register&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;先登录获取 token ，然后显示内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://api.dev/api/lesson/1?token=xxx&#34;&gt;http://api.dev/api/lesson/1?token=xxx&lt;/a&gt;
&lt;a href=&#34;http://api.dev/api/lessons?token=xxx&#34;&gt;http://api.dev/api/lessons?token=xxx&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;第10章-jwt-其他用法&#34;&gt;第10章 JWT 其他用法&lt;/h2&gt;
&lt;h3 id=&#34;101-根据-token-返回用户信息&#34;&gt;10.1 根据 token 返回用户信息&lt;/h3&gt;
&lt;p&gt;路由&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// routes\api.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;middleware&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;jwt.refresh&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;nv&#34;&gt;$api&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user/info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;AuthController@getAuthenticatedUser&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;AuthController&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//app\Api\Controllers\AuthController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tymon\JWTAuth\Exceptions\JWTException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tymon\JWTAuth\Exceptions\TokenExpiredException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Tymon\JWTAuth\Exceptions\TokenInvalidException&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getAuthenticatedUser&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;try&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;JWTAuth&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;parseToken&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;authenticate&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_not_found&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;404&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TokenExpiredException&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token_expired&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;TokenInvalidException&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token_invalid&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;catch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;JWTException&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;token_absent&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getStatusCode&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;response&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;json&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;compact&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;调试：&lt;a href=&#34;http://api.dev/api/user/info?token=xx&#34;&gt;http://api.dev/api/user/info?token=xx&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;102--解决请求字段与数据库不一致问题&#34;&gt;10.2  解决请求字段与数据库不一致问题&lt;/h3&gt;
&lt;p&gt;注意 password 没有变&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//app\Api\Controllers\AuthController.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$credentials&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;user_email&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_email&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$request&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;user_password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;增加  &lt;code&gt;getAuthPassword&lt;/code&gt; 方法&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// api\app\Models\User.php
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getAuthPassword&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;user_password&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;资源：&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://coding.net/u/wangyan/p/laravel-api/git&#34;&gt;https://coding.net/u/wangyan/p/laravel-api/git&lt;/a&gt;
&lt;a href=&#34;https://www.codecasts.com/series/dive-into-restful-api-with-laravel&#34;&gt;https://www.codecasts.com/series/dive-into-restful-api-with-laravel&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>CentOS 升级 OpenSSL 和 OpenSSH</title>
        <link>https://www.bg7pbp.com/p/centos-upgrade-openssl-openssh/</link>
        <pubDate>Sat, 15 Jul 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-upgrade-openssl-openssh/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%9F%A5%E7%9C%8B%E5%BD%93%E5%89%8D%E7%89%88%E6%9C%AC&#34;&gt;一、查看当前版本&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9F%A5%E7%9C%8B%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84rpm%E5%8C%85-%E5%8F%AF%E9%80%89%E4%BB%85%E5%8F%82%E8%80%83&#34;&gt;查看已安装的RPM包 (可选，仅参考)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;二、安装依赖&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85perl-%E5%8F%AF%E9%80%89%E4%BB%85%E5%8F%82%E8%80%83&#34;&gt;安装Perl (可选，仅参考)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85-openssl&#34;&gt;三、安装 OpenSSL&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%8D%B8%E8%BD%BD%E7%8E%B0%E6%9C%89%E7%89%88%E6%9C%AC-%E4%BB%85%E5%8F%82%E8%80%83%E4%B8%8D%E9%9C%80%E8%A6%81%E5%8D%B8%E8%BD%BD&#34;&gt;3.1 卸载现有版本 （仅参考，不需要卸载）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%AE%89%E8%A3%85-openssl&#34;&gt;3.2 安装 OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E6%9B%BF%E6%8D%A2%E6%97%A7%E7%89%88-openssl&#34;&gt;3.3 替换旧版 OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%AE%89%E8%A3%85-openssh&#34;&gt;四、安装 OpenSSH&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E5%8D%B8%E8%BD%BD-openssh-%E6%97%A7%E7%89%88%E6%9C%AC&#34;&gt;4.1 卸载 OpenSSH 旧版本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E5%AE%89%E8%A3%85-openssh&#34;&gt;4.2 安装 OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E6%9B%BF%E6%8D%A2%E6%97%A7%E7%89%88-openssh&#34;&gt;4.3 替换旧版 OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8%E6%96%B9%E6%B3%951%E4%B8%8D%E6%8E%A8%E8%8D%90&#34;&gt;4.4 开机自启动（方法1，不推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#45-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8systemd%E6%8E%A8%E8%8D%90&#34;&gt;4.5 开机自启动（systemd，推荐）&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#451-%E6%96%B9%E6%B3%95%E4%B8%80%E4%BD%BF%E7%94%A8-sshdsocket-%E5%A5%97%E6%8E%A5%E5%AD%97&#34;&gt;4.5.1 方法一：使用 &lt;code&gt;sshd.socket&lt;/code&gt; 套接字&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#452-%E6%96%B9%E6%B3%95%E4%BA%8C%E4%BD%BF%E7%94%A8-sshdservice-%E6%9C%8D%E5%8A%A1&#34;&gt;4.5.2 方法二：使用 &lt;code&gt;sshd.service&lt;/code&gt; 服务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%AE%89%E8%A3%85-telnet-%E5%8F%AF%E9%80%89%E4%BB%85%E5%8F%82%E8%80%83&#34;&gt;五、安装 Telnet (可选，仅参考)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一查看当前版本&#34;&gt;一、查看当前版本&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017 (7.4.1708)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl version
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#OpenSSL 1.0.2k-fips  26 Jan 2017 (7.4.1708)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;查看已安装的rpm包-可选仅参考&#34;&gt;查看已安装的RPM包 (可选，仅参考)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep openssl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssl-libs-1.0.2k-16.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssl-1.0.2k-16.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssl-devel-1.0.2k-16.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep openssh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssh-7.4p1-16.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssh-server-7.4p1-16.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#openssh-clients-7.4p1-16.el7.x86_64&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装依赖&#34;&gt;二、安装依赖&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y wget curl gcc gcc-c++ make zlib-devel pam-devel tcp_wrappers tcp_wrappers-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;安装perl-可选仅参考&#34;&gt;安装Perl (可选，仅参考)&lt;/h3&gt;
&lt;p&gt;via &lt;a href=&#34;http://www.cpan.org/src/&#34;&gt;http://www.cpan.org/src/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://www.cpan.org/src/5.0/perl-5.28.1.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf perl-5.28.1.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; perl-5.28.1 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./Configure -des -Dprefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/perl &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;perl -v&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三安装-openssl&#34;&gt;三、安装 OpenSSL&lt;/h2&gt;
&lt;p&gt;OpenSSL 默认安装在 &lt;code&gt;/usr/local/ssl&lt;/code&gt;，与旧版不冲突，建议不要去卸载旧版，很多软件都依赖旧版的 SSL 库，否则你得要花更多时间去处理相关错误。&lt;/p&gt;
&lt;h3 id=&#34;31-卸载现有版本-仅参考不需要卸载&#34;&gt;3.1 卸载现有版本 （仅参考，不需要卸载）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -e &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep openssh&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -e &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep openssl&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; --nodeps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;若误卸载了，可将下面文件复制到 &lt;code&gt;/usr/lib64/&lt;/code&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;libcrypto.so.10  libcrypto.so.1.0.1e  libssl.so.10  libssl.so.1.0.1e&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;32-安装-openssl&#34;&gt;3.2 安装 OpenSSL&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;注意 &lt;code&gt;openssl-1.1.x&lt;/code&gt; 新版不兼容 openssh ，请用回最新的的 &lt;code&gt;1.0.x&lt;/code&gt; 版本&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://www.openssl.org/source/openssl-1.0.2q.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf openssl-1.0.2q.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; openssl-1.0.2q &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./config shared zlib &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make depend &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-替换旧版-openssl&#34;&gt;3.3 替换旧版 OpenSSL&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /usr/bin/openssl /usr/bin/openssl.backup &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /usr/include/openssl /usr/include/openssl.backup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/ssl/include/openssl/ /usr/include/openssl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/ssl/lib&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; /etc/ld.so.conf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ldconfig &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/sbin/restorecon -v /usr/local/ssl/lib/libcrypto.so.1.0.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四安装-openssh&#34;&gt;四、安装 OpenSSH&lt;/h2&gt;
&lt;h3 id=&#34;41-卸载-openssh-旧版本&#34;&gt;4.1 卸载 OpenSSH 旧版本&lt;/h3&gt;
&lt;p&gt;OpenSSH 建议卸载旧版本，卸载前也可以备份一下。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 备份&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r /usr/bin/ssh /usr/bin/ssh.bak &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r /usr/sbin/sshd /usr/sbin/sshd.bak &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r /usr/libexec/openssh/sftp-server /usr/libexec/openssh/sftp-server.bak &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r /etc/ssh /etc/ssh.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 卸载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# yum remove -y openssh openssh-server openssh-clients&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -e &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep openssh&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; --nodeps&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-安装-openssh&#34;&gt;4.2 安装 OpenSSH&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://ftp.eu.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-7.9p1.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf openssh-7.9p1.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; openssh-7.9p1 &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssh &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --sysconfdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/ssh &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --with-ssl-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --with-pam &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --with-tcp-wrappers &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --with-md5-passwords &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            --with-zlib&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zlib &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/ssl/lib/&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/ld.so.conf.d/openssl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果出现&amp;quot;Your OpenSSL headers do not match your library. &amp;quot;&lt;br&gt;
配置以下三个变量，让其指向新版本的opnessl库文件：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DEFAULT_LIBPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl/include/openssl:/usr/local/ssl/lib/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LIBPATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LIBPATH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEFAULT_LIBPATH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEFAULT_LIBPATH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DEFAULT_LIBPATH&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; LIBPATH LD_LIBRARY_PATH LIBRARY_PATH&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;更新系统库文件(选做)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install mlocate
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;updatedb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-替换旧版-openssh&#34;&gt;4.3 替换旧版 OpenSSH&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/ssh/bin/ssh /usr/bin/ssh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/ssh/sbin/sshd /usr/sbin/sshd &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/libexec/openssh/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/ssh/libexec/sftp-server /usr/libexec/openssh/sftp-server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-开机自启动方法1不推荐&#34;&gt;4.4 开机自启动（方法1，不推荐）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp contrib/redhat/sshd.init /etc/init.d/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/usr\/sbin/usr\/local\/ssh\/sbin/g&amp;#39;&lt;/span&gt; /etc/init.d/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/usr\/bin/usr\/local\/ssh\/bin/g&amp;#39;&lt;/span&gt; /etc/init.d/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /etc/init.d/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig --add sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl reload sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart sshd.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;45-开机自启动systemd推荐&#34;&gt;4.5 开机自启动（systemd，推荐）&lt;/h3&gt;
&lt;h4 id=&#34;451-方法一使用-sshdsocket-套接字&#34;&gt;4.5.1 方法一：使用 &lt;code&gt;sshd.socket&lt;/code&gt; 套接字&lt;/h4&gt;
&lt;p&gt;/usr/lib/systemd/system/sshd.socket&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;OpenSSH Server Socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;man:sshd&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; man:sshd_config&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Conflicts&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sshd.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Wants&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sshd-keygen.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Socket&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ListenStream&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;0.0.0.0:22
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Accept&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Install&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WantedBy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sockets.target&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/usr/lib/systemd/system/sshd-keygen.service&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;OpenSSH Server Key Generation
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ConditionFileNotEmpty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;!/etc/ssh/ssh_host_rsa_key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ConditionFileNotEmpty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;!/etc/ssh/ssh_host_ecdsa_key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ConditionFileNotEmpty&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;!/etc/ssh/ssh_host_ed25519_key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PartOf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sshd.service sshd.socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssh/bin/ssh-keygen
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;oneshot
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;RemainAfterExit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/usr/lib/systemd/system/sshd@.service&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;配置文件，定义服务如何启动&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;OpenSSH per-connection server daemon
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;man:sshd&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; man:sshd_config&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EnvironmentFile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-/etc/sysconfig/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-/usr/local/ssh/sbin/sshd -i &lt;span class=&#34;nv&#34;&gt;$OPTIONS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;StandardInput&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;socket&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/sysconfig/sshd&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Configuration file for the sshd service.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The server keys are automatically generated if they are missing.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# To change the automatic creation uncomment and change the appropriate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# line. Accepted key types are: DSA RSA ECDSA ED25519.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The default is &amp;#34;RSA ECDSA ED25519&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# AUTOCREATE_SERVER_KEYS=&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# AUTOCREATE_SERVER_KEYS=&amp;#34;RSA ECDSA ED25519&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Do not change this option unless you have hardware random&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# generator and you REALLY know what you are doing&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SSH_USE_STRONG_RNG=0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SSH_USE_STRONG_RNG=1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;切换至 &lt;code&gt;sshd.socket&lt;/code&gt; 自启动服务&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop sshd.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable sshd.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#systemctl daemon-reload&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#cat /etc/systemd/system/sockets.target.wants/sshd.socket&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; sshd.socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start sshd.socket&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;452-方法二使用-sshdservice-服务&#34;&gt;4.5.2 方法二：使用 &lt;code&gt;sshd.service&lt;/code&gt; 服务&lt;/h4&gt;
&lt;p&gt;/usr/lib/systemd/system/sshd.service&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Unit&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Description&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;OpenSSH per-connection server daemon
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;Documentation&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;man:sshd&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;8&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; man:sshd_config&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;5&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Service&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EnvironmentFile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-/etc/sysconfig/sshd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ExecStart&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-/usr/local/ssh/sbin/sshd -i &lt;span class=&#34;nv&#34;&gt;$OPTIONS&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;StandardInput&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;socket&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;切换&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl mask --now sshd.socket
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart sshd.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html&#34;&gt;http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zzz.buzz/zh/2015/12/26/configure-port-of-sshd-in-systemd-environment/&#34;&gt;https://zzz.buzz/zh/2015/12/26/configure-port-of-sshd-in-systemd-environment/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.centos.org/HowTos/Network/SecuringSSH&#34;&gt;https://wiki.centos.org/HowTos/Network/SecuringSSH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;五安装-telnet-可选仅参考&#34;&gt;五、安装 Telnet (可选，仅参考)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install xinetd telnet telnet-server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;配置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vi /etc/securetty
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pts/0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pts/1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;关闭 selinux&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/selinux/config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SELINUX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;disabled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;防火墙&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#默认zone为public 可以使用firewall-cmd --get-default-zone 来获取默认zone&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-port&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;23/tcp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;firewall-cmd --reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;自启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; telnet.socket &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start telnet.socket &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; xinetd &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start xinetd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;telnet dmfy@192.168.10.251&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;最后更新：2019.02.13&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;参考文档：&lt;a href=&#34;http://www.omgdba.com/how-to-enable-telnet-on-centos-7.html&#34;&gt;http://www.omgdba.com/how-to-enable-telnet-on-centos-7.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Hexo 使用 Isso 评论系统</title>
        <link>https://www.bg7pbp.com/p/hexo-isso-comment-system/</link>
        <pubDate>Sat, 01 Jul 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/hexo-isso-comment-system/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80isso-%E6%9C%8D%E5%8A%A1%E7%AB%AF&#34;&gt;一、Isso 服务端&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E8%87%AA%E5%AE%9A%E4%B9%89%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;1.1 自定义配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-docker-composeyml&#34;&gt;1.2 docker-compose.yml&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cnginx-%E9%85%8D%E7%BD%AE%E9%80%89%E5%81%9A&#34;&gt;二、Nginx 配置（选做）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%A2%E6%88%B7%E7%AB%AF%E5%BC%95%E5%85%A5-isso&#34;&gt;三、客户端引入 Isso&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E4%B8%80%E8%88%AC%E8%AE%BE%E7%BD%AE&#34;&gt;3.1 一般设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-hexo-%E8%AE%BE%E7%BD%AE&#34;&gt;3.2 Hexo 设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;https://posativ.org/isso/&#34;&gt;Isso&lt;/a&gt; 是基于 Python 写的一套开源评论系统，可以使用 docker 来部署，其安装配置都非常简单，是目前替换 &lt;a href=&#34;https://disqus.com/&#34;&gt;Disqus&lt;/a&gt; 的不二选择。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;官方主页：&lt;a href=&#34;https://posativ.org/isso/&#34;&gt;https://posativ.org/isso/&lt;/a&gt; &lt;br&gt;
Docker 项目: &lt;a href=&#34;https://hub.docker.com/r/wonderfall/isso/&#34;&gt;https://hub.docker.com/r/wonderfall/isso/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一isso-服务端&#34;&gt;一、Isso 服务端&lt;/h2&gt;
&lt;h3 id=&#34;11-自定义配置文件&#34;&gt;1.1 自定义配置文件&lt;/h3&gt;
&lt;p&gt;下面选项需要修改，更多解释请参考官方文档 &lt;a href=&#34;https://posativ.org/isso/docs/configuration/server/&#34;&gt;Server Configuration&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;host&lt;/code&gt; 是你引用 Isso 的 JS 的网站地址，需要写全。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;smtp&lt;/code&gt;  发送评论到你邮箱以及审核评论&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /opt/isso/config/isso.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;general&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;dbpath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /db/comments.db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; https://www.wangyan.cloud/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;max-age &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 1d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;notify&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; smtp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;moderation&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;purge-after &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; 30d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;server&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; http://0.0.0.0:8080/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;smtp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;username&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; noreply@wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;password&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; xxxx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; smtp.exmail.qq.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;security&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; none
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;to&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; service@wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;WangYan BLog&amp;#34;&lt;/span&gt; &amp;lt;noreply@wangyan.org&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;timeout&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;guard&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ratelimit&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;direct-reply &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;reply-to-self &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;require-author &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;require-email &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;markup&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;options&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; strikethrough, superscript, autolink
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allowed-elements &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; img
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;allowed-attributes &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; src&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-docker-composeyml&#34;&gt;1.2 docker-compose.yml&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /opt/isso/docker-compose.yml &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;isso:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    image: wonderfall/isso
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    container_name: isso
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    environment:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - &lt;span class=&#34;nv&#34;&gt;GID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - &lt;span class=&#34;nv&#34;&gt;UID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - &lt;span class=&#34;s2&#34;&gt;&amp;#34;8080:8080&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - /opt/isso/config:/config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        - /opt/isso/db:/db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart: always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后运行 &lt;code&gt;docker-compose up -d&lt;/code&gt; 就 OK 了。&lt;/p&gt;
&lt;h2 id=&#34;二nginx-配置选做&#34;&gt;二、Nginx 配置（选做）&lt;/h2&gt;
&lt;p&gt;为了网址好看些，比如说 &lt;code&gt;isso.wangyan.org&lt;/code&gt; 还需要配置 Nginx&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;nginx&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;80&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;isso.wangyan.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://127.0.0.1:8080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;Host&lt;/span&gt;    &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Real-IP&lt;/span&gt;   &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Forwarded-For&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;listen&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;443&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ssl&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;server_name&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;isso.wangyan.org&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_certificate&lt;/span&gt;  &lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/isso.wangyan.org.pem&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_certificate_key&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/etc/nginx/ssl/isso.wangyan.org.key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_session_timeout&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5m&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_protocols&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TLSv1&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TLSv1.1&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;TLSv1.2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_ciphers&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;ssl_prefer_server_ciphers&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kn&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;/&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_pass&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;http://127.0.0.1:8080&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;Host&lt;/span&gt;    &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Real-IP&lt;/span&gt;   &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Forwarded-For&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;kn&#34;&gt;proxy_set_header&lt;/span&gt;   &lt;span class=&#34;s&#34;&gt;X-Forwarded-Proto&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;https&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三客户端引入-isso&#34;&gt;三、客户端引入 Isso&lt;/h2&gt;
&lt;h3 id=&#34;31-一般设置&#34;&gt;3.1 一般设置&lt;/h3&gt;
&lt;p&gt;在页面的适当位置放下面一段代码&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.wangyan.cloud/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reply&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;100&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nested&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reveal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#f0f0f0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#9abf88 #5698c4 #e279a3 #9163b6 ...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;https://www.wangyan.cloud/js/embed.min.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;isso-thread&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/section&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-hexo-设置&#34;&gt;3.2 Hexo 设置&lt;/h3&gt;
&lt;p&gt;如果是 hexo 可以这样（不同主题放置方法不一样）&lt;/p&gt;
&lt;p&gt;编辑主题配置文件 &lt;code&gt;_config.yml&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;isso_url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//isso.wangyan.org/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑 &lt;code&gt;layout/_partial/component/comments.ejs&lt;/code&gt;  加入一行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;%-&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;partial&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;isso&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后引入 &lt;code&gt;isso.ejs&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;js&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;/* layout/_partial/component/isso.ejs */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;theme&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso_url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;%= theme.isso_url %&amp;gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;css&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reply&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;email&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;100&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;comments&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;nested&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;reveal&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;click&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;true&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#f0f0f0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;avatar&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fg&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;#9abf88 #5698c4 #e279a3 #9163b6 ...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;data&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;isso&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;vote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;false&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;%= theme.isso_url %&amp;gt;js/embed.min.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/script&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;section&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;isso-thread&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;/section&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://posativ.org/isso/docs/&#34;&gt;https://posativ.org/isso/docs/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://sb.sb/debian-8-ubuntu-16-04-install-isso/&#34;&gt;https://sb.sb/debian-8-ubuntu-16-04-install-isso/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://zhangnew.com/isso-open-source-comment-system.html&#34;&gt;https://zhangnew.com/isso-open-source-comment-system.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Docker 中安装配置 Seafile Pro</title>
        <link>https://www.bg7pbp.com/p/docker-seafile-pro-install/</link>
        <pubDate>Thu, 15 Jun 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/docker-seafile-pro-install/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%96%B0%E5%BB%BA-docker-%E5%AE%B9%E5%99%A8%E9%80%89%E5%81%9A&#34;&gt;一、新建 Docker 容器（选做）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-mariadb-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88&#34;&gt;二、安装 mariadb (二进制版)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85-seafile&#34;&gt;三、安装 Seafile&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;3.1 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%AE%89%E8%A3%85-seafile&#34;&gt;3.2 安装 seafile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E9%85%8D%E7%BD%AE-seafile&#34;&gt;3.3 配置 seafile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E5%9C%A8%E7%BA%BF%E9%A2%84%E8%A7%88&#34;&gt;3.4 在线预览&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E8%87%AA%E5%AE%9A%E4%B9%89css&#34;&gt;3.5 自定义CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#36-%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5&#34;&gt;3.6 时间同步&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;环境：ubuntu 16.04 (docker)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一新建-docker-容器选做&#34;&gt;一、新建 Docker 容器（选做）&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run -it --name seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--restart&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;always &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /home/seafile:/opt/seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 8082:8082 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 10080:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 10443:443 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-d ubuntu:16.04 /bin/bash&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;更新源&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/archive.ubuntu.com/mirrors.aliyun.com/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/deb http:\/\/security/#deb http:\/\/security/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/deb-src http:\/\/security/#deb-src http:\/\/security/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装有用工具&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install -y curl wget net-tools vim&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-mariadb-二进制版&#34;&gt;二、安装 mariadb (二进制版)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;参考文档1： &lt;a href=&#34;https://www.wangyan.cloud/centos-mairadb-from-binaries/&#34;&gt;CentOS 从二进制版安装配置 Mariadb&lt;/a&gt; &lt;br&gt;
参考文档2： &lt;a href=&#34;https://www.wangyan.cloud/centos-mariadb-from-yum/&#34;&gt;CentOS 从 Yum 源安装配置 Mariadb&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;安装依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt install -y libaio-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解压&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /opt/seafile/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv mariadb-10.2.6-linux-glibc_214-x86_64 /usr/local/mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新建 mysql 用户&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -g mysql -M -s /sbin/nologin mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装初始化&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/mysql_install_db --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R root . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chown -R mysql data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;支持命令行运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export PATH=$PATH:/usr/local/mysql/bin/&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; .bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;开机启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp support-files/mysql.server /etc/init.d/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d mysql defaults &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service  mysql start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;密码及安全设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysqladmin -u root password &lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解决中文乱码&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/my.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/mysql/conf.d/mariadb.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;character_set_server&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;collation_server&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/installing-mariadb-deb-files/&#34;&gt;官方文档：Installing MariaDB using APT&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三安装-seafile&#34;&gt;三、安装 Seafile&lt;/h2&gt;
&lt;h3 id=&#34;31-安装依赖&#34;&gt;3.1 安装依赖&lt;/h3&gt;
&lt;p&gt;python2.7&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install python &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install python2.7 libpython2.7 python-setuptools python-imaging &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           python-ldap python-mysqldb python-memcache python-urllib3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 JRE&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install openjdk-8-jre &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -sf /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java /usr/bin/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 pdf 全文搜索依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install poppler-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 Python 库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;easy_install pip &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; pip install boto requests&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-安装-seafile&#34;&gt;3.2 安装 seafile&lt;/h3&gt;
&lt;p&gt;准备 seafile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv seafile-pro-server_* seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf seafile-pro-server_*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir installed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv seafile-pro-server_* installed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 seafile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; seafile-pro-server-* &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./setup-seafile-mysql.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cloud
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloud.youdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;8082&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_ccnet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_seahub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-配置-seafile&#34;&gt;3.3 配置 seafile&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /opt/seafile/conf/ccnet.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SERVICE_URL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; https://cloud.youdomain.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /opt/seafile/conf/seahub_settings.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FILE_SERVER_ROOT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cloud.youdomain.com/seafhttp&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /opt/seafile/conf/seafdav.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;WEBDAV&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;fastcgi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;share_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /seafdav&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /opt/seafile/seafile-server-latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./seafile.sh start &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./seahub.sh start-fastcgi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-在线预览&#34;&gt;3.4 在线预览&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install libreoffice libreoffice-script-provider-python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei xfonts-wqy &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install poppler-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-server-latest/seafile.sh restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-server-latest/seahub.sh stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-server-latest/seahub.sh start-fastcgi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35-自定义css&#34;&gt;3.5 自定义CSS&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /opt/seafile/seahub-data/custom
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /opt/seafile/seahub-data/custom /opt/seafile/seafile-server-latest/seahub/media/custom&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;36-时间同步&#34;&gt;3.6 时间同步&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Asia/Shanghai&amp;#34;&lt;/span&gt; &amp;gt; /etc/timezone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -l&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep ntp &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&amp;gt;/dev/null &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; apt-get -y install ntpdate &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PING&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ntpdate -d cn.pool.ntp.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Seafile 参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy_pro/download_and_setup_seafile_professional_server.html&#34;&gt;Setup Seafile Professional Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/using_mysql.html&#34;&gt;Deploying Seafile with MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/deploy_with_nginx.html&#34;&gt;Config Seahub with Nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/https_with_nginx.html&#34;&gt;Enabling Https with Nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/extension/webdav.html&#34;&gt;WebDAV extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual-cn.seafile.com/&#34;&gt;Seafile服务器手册中文版&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>CentOS 安装配置 Seafile Pro</title>
        <link>https://www.bg7pbp.com/p/centos-install-seafile-pro/</link>
        <pubDate>Thu, 01 Jun 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-seafile-pro/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-mariadb-%E4%BA%8C%E8%BF%9B%E5%88%B6%E7%89%88&#34;&gt;一、安装 mariadb (二进制版)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-seafile&#34;&gt;二、安装 Seafile&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;2.1 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85-seafile&#34;&gt;2.2 安装 seafile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E9%85%8D%E7%BD%AE-seafile&#34;&gt;3.3 配置 seafile&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34-%E5%9C%A8%E7%BA%BF%E9%A2%84%E8%A7%88&#34;&gt;3.4 在线预览&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35-%E8%87%AA%E5%AE%9A%E4%B9%89css&#34;&gt;3.5 自定义CSS&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;环境：CentOS 7&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一安装-mariadb-二进制版&#34;&gt;一、安装 mariadb (二进制版)&lt;/h2&gt;
&lt;p&gt;安装依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y libaio-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解压&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt;  /usr/local/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/mariadb-10.2.6-linux-glibc_214-x86_64  /usr/local/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;新建 mysql 用户&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -g mysql -M -s /sbin/nologin mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装初始化&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/mysql_install_db --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R root . &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chown -R mysql data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;支持命令行运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export PATH=$PATH:/usr/local/mysql/bin/&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; .bashrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;开机启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp support-files/mysql.server /etc/init.d/mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig --add mysql &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service  mysql start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;密码及安全设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysqladmin -u root password &lt;span class=&#34;s1&#34;&gt;&amp;#39;新密码&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解决中文乱码&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/my.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/mysql/conf.d/mariadb.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;character_set_server&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;collation_server&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/installing-mariadb-deb-files/&#34;&gt;官方文档：Installing MariaDB using APT&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;二安装-seafile&#34;&gt;二、安装 Seafile&lt;/h2&gt;
&lt;h3 id=&#34;21-安装依赖&#34;&gt;2.1 安装依赖&lt;/h3&gt;
&lt;p&gt;python2.7&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install python-setuptools python-imaging MySQL-python python-memcached python-ldap python-urllib3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 JRE&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install java-1.7.0-openjdk &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 pdf 全文搜索依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install poppler-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 Python 库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;easy_install pip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install boto requests&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装-seafile&#34;&gt;2.2 安装 seafile&lt;/h3&gt;
&lt;p&gt;准备 seafile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv seafile-pro-server_* seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xzf seafile-pro-server_*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir installed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv  seafile-pro-server_* installed&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 seafile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; seafile-pro-server-* &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./setup-seafile-mysql.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Cloud
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cloud.youdomain.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;8082&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;localhost
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;3306&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_ccnet
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_db
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;seafile_seahub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-配置-seafile&#34;&gt;3.3 配置 seafile&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /home/seafile/conf/ccnet.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SERVICE_URL&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; https://cloud.youdomain.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /home/seafile/conf/seahub_settings.py
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FILE_SERVER_ROOT&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;https://cloud.dmfy.gov.cn/seafhttp&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /home/seafile/conf/seafdav.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;WEBDAV&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;8080&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;fastcgi&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;share_name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; /seafdav&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /home/seafile/seafile-server-latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./seafile.sh start &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./seahub.sh start-fastcgi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34-在线预览&#34;&gt;3.4 在线预览&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install libreoffice libreoffice-headless libreoffice-pyuno
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install poppler-utils&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/seafile/seafile-server-latest/seafile.sh restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/seafile/seafile-server-latest/seahub.sh stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/home/seafile/seafile-server-latest/seahub.sh start-fastcgi&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35-自定义css&#34;&gt;3.5 自定义CSS&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /opt/seafile/seahub-data/custom
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /opt/seafile/seahub-data/custom /opt/seafile/seafile-server-latest/seahub/media/custom&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Seafile 参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy_pro/download_and_setup_seafile_professional_server.html&#34;&gt;Setup Seafile Professional Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/using_mysql.html&#34;&gt;Deploying Seafile with MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/deploy_with_nginx.html&#34;&gt;Config Seahub with Nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/deploy/https_with_nginx.html&#34;&gt;Enabling Https with Nginx&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual.seafile.com/extension/webdav.html&#34;&gt;WebDAV extension&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://manual-cn.seafile.com/&#34;&gt;Seafile服务器手册中文版&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>CentOS 从源码安装配置 PHP7.1</title>
        <link>https://www.bg7pbp.com/p/centos-install-php71-source/</link>
        <pubDate>Mon, 15 May 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-php71-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;一、安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-imap&#34;&gt;二、安装 imap&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85-php&#34;&gt;三、安装 PHP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89php-%E9%85%8D%E7%BD%AE&#34;&gt;三、php 配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装依赖&#34;&gt;一、安装依赖&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;libmcrypt-devel&lt;/code&gt; 需要使用 epel 源&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装必须的依赖&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    gcc gcc-c++ &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    freetype-devel libxml2-devel libcurl-devel libjpeg-turbo-devel libpng-devel openssl-devel libicu-devel libxslt-devel &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    libmcrypt-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-imap&#34;&gt;二、安装 imap&lt;/h2&gt;
&lt;p&gt;centOS7 已经没有了 &lt;code&gt;libc-client&lt;/code&gt;，需要编译安装&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注：epel 源可以找到 libc-client-devel uw-imap-devel uw-imap-static uw-imap-utils，但直接安装还是会出现一些问题。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;编译安装&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://files.wangyan.org/src/lemp/imap-2007f.tar.gz&#34;&gt;http://files.wangyan.org/src/lemp/imap-2007f.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf imap-2007f.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; imap-2007f
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make lr5 &lt;span class=&#34;nv&#34;&gt;PASSWDTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;std &lt;span class=&#34;nv&#34;&gt;SSLTYPE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;unix.nopwd &lt;span class=&#34;nv&#34;&gt;EXTRACFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-fPIC &lt;span class=&#34;nv&#34;&gt;IP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;4&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/local/imap-2007f/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;include,lib,c-client&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.h /usr/local/imap-2007f/include/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.c /usr/local/imap-2007f/lib/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/*.c /usr/local/imap-2007f/c-client/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/c-client.a /usr/local/imap-2007f/lib/libc-client.a 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp c-client/c-client.a /usr/local/imap-2007f/c-client/libc-client.a &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;备注：在 64 位下编译时 make 参数需要带 EXTRACFLAGS=-fPIC ，在 32 位下则不需要。&lt;/p&gt;
&lt;h2 id=&#34;三安装-php&#34;&gt;三、安装 PHP&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar zxf php-7.1.6.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; php-7.1.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-config-file-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/etc  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-config-file-scan-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/conf.d  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-curl  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-fpm-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-fpm-group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-freetype-dir  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-gd  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-gettext  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-iconv-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-imap&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/imap-2007f &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-imap-ssl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-jpeg-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-libxml-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-mcrypt &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-mhash &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-mysqli&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-openssl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-pdo-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-png-dir &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-xmlrpc &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-xsl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --with-zlib &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-calendar &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-bcmath &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-exif &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-fpm  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-ftp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-gd-native-ttf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-intl &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-mbstring &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-mysqlnd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-shmop &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-sockets &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-sysvsem &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    --enable-zip
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    make -j4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    make install &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三php-配置&#34;&gt;三、php 配置&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/php/bin/php /usr/bin/php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/local/php/conf.d /tmp/php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp php-7.1.6/php.ini-production /usr/local/php/etc/php.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp php-fpm.conf /usr/local/php/etc/php-fpm.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;php.ini 设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*date.timezone =.*|date.timezone = PRC|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*memory_limit =.*|memory_limit = 512M|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*upload_max_filesize =.*|upload_max_filesize = 128M|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*max_file_uploads =.*|max_file_uploads = 25|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*post_max_size =.*|post_max_size = 256M|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;\s*max_input_vars =.*|max_input_vars = 5000|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i&amp;#34;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|;upload_tmp_dir =.*|upload_tmp_dir = \/tmp\/php|i&amp;#39;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|max_execution_time =.*|max_execution_time = 300|i&amp;#39;&lt;/span&gt; /usr/local/php/etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s|disable_functions =.*|disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server|g&amp;#39;&lt;/span&gt; /usr/local/php/etc/php.ini&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;开机自启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp php-7.1.6/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /etc/init.d/php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig --add php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service php-fpm restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 从 Yum 源安装配置 PHP7.1</title>
        <link>https://www.bg7pbp.com/p/centos-install-php71-yum/</link>
        <pubDate>Mon, 01 May 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-php71-yum/</guid>
        <description>&lt;h2 id=&#34;安装第三方yum源&#34;&gt;安装第三方YUM源&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;安装-php71x&#34;&gt;安装 php7.1.x&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-bcmath &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-common &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-fpm &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-gd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-imap &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-mbstring &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-mcrypt &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-opcache &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-pdo &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-pdo_dblib &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-pear &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-pecl-mongodb &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-xml &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php71w-xmlrpc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装 php5.6.x&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-bcmath &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-common &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-fpm &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-gd &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-imap &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-mbstring &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-mcrypt &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-opcache &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-pear &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-pecl-xdebug &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-pgsql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-xml &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    php56w-xmlrpc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;启动-php&#34;&gt;启动 php&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start php-fpm &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; php-fpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*date.timezone =.*|date.timezone = Asia/Shanghai|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*memory_limit =.*|memory_limit = 512M|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*upload_max_filesize =.*|upload_max_filesize = 128M|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*max_file_uploads =.*|max_file_uploads = 25|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*post_max_size =.*|post_max_size = 256M|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;\s*max_input_vars =.*|max_input_vars = 5000|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|;*cgi.fix_pathinfo=.*|cgi.fix_pathinfo= 0|i&amp;#34;&lt;/span&gt; /etc/php.ini &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://webtatic.com/packages/php71/&#34;&gt;https://webtatic.com/packages/php71/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>CentOS 密码安全策略</title>
        <link>https://www.bg7pbp.com/p/centos-password-security-policy/</link>
        <pubDate>Sat, 15 Apr 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-password-security-policy/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E8%AE%BE%E7%BD%AE%E5%AF%86%E7%A0%81%E9%95%BF%E5%BA%A6%E5%92%8C%E6%9C%89%E6%95%88%E6%9C%9F&#34;&gt;1. 设置密码长度和有效期&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E8%AE%BE%E7%BD%AE%E5%AF%86%E7%A0%81%E5%A4%8D%E6%9D%82%E5%BA%A6&#34;&gt;2. 设置密码复杂度&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E9%85%8D%E7%BD%AE%E7%99%BB%E5%BD%95%E5%A4%B1%E8%B4%A5%E5%A4%84%E7%90%86&#34;&gt;4、配置登录失败处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5%E9%85%8D%E7%BD%AE%E7%94%A8%E6%88%B7%E6%9C%80%E5%A4%A7%E7%99%BB%E5%BD%95%E6%95%B0&#34;&gt;5、配置用户最大登录数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;1-设置密码长度和有效期&#34;&gt;1. 设置密码长度和有效期&lt;/h2&gt;
&lt;p&gt;每180天需要更改密码，并且会提前7天提醒用户密码快到期了。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/login.defs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PASS_MAX_DAYS   &lt;span class=&#34;m&#34;&gt;180&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PASS_MIN_DAYS   &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PASS_MIN_LEN    &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;PASS_WARN_AGE   &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;2-设置密码复杂度&#34;&gt;2. 设置密码复杂度&lt;/h2&gt;
&lt;p&gt;检查是否安装了 cracklib 模块&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep cracklib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/pam.d/system-auth&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参数说明&lt;/p&gt;
&lt;p&gt;retry=N 如果用户输入的密码强度不够可以重复输入的次数，默认值是 1，一般设置为 3。
difok=M 新密码与前一个旧密码之间至少有 M 个字符不相同
minlen=N 密码最小长度
dcredit=N 密码中至少有几个数字（至少 N&amp;lt;0 或至多 N&amp;gt;=0）
ucredit=N 密码中至少有几个大写字母（至少 N&amp;lt;0 或至多 N&amp;gt;=0）
lcredit=N 密码中至少有几个小写字母（至少 N&amp;lt;0 或至多 N&amp;gt;=0）
ocredit=N 密码中至少有几个特殊字符（至少 N&amp;lt;0 或至多 N&amp;gt;=0）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password    requisite     pam_cracklib.so try_first_pass &lt;span class=&#34;nv&#34;&gt;retry&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;difok&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;minlen&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;dcredit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1 &lt;span class=&#34;nv&#34;&gt;ucredit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1 &lt;span class=&#34;nv&#34;&gt;lcredit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1 &lt;span class=&#34;nv&#34;&gt;ocredit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;防止用户再次使用以前使用过的密码remember=3（3次）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;password    sufficient    pam_unix.so sha512 shadow nullok try_first_pass use_authtok &lt;span class=&#34;nv&#34;&gt;remember&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;4配置登录失败处理&#34;&gt;4、配置登录失败处理&lt;/h2&gt;
&lt;p&gt;失败5次后需要180秒才解锁&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auth        required      pam_tally2.so &lt;span class=&#34;nv&#34;&gt;deny&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;unlock_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt; even_deny_root &lt;span class=&#34;nv&#34;&gt;root_unlock_time&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;300&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;5配置用户最大登录数&#34;&gt;5、配置用户最大登录数&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/security/limits.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root – maxlogins &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dmfy – maxlogins &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;登录超时&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/profile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;TMOUT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;600&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;避免普通用户 su 到 root 用户&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/pam.d/su
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auth            sufficient      pam_rootok.so debug
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auth            required        pam_wheel.so &lt;span class=&#34;nv&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wheel
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usermod -G wheel &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;username&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#加入wheel用户组&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 从二进制版安装配置 Mariadb</title>
        <link>https://www.bg7pbp.com/p/centos-install-mariadb-binary/</link>
        <pubDate>Wed, 15 Mar 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-mariadb-binary/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80mariadb-%E5%87%86%E5%A4%87&#34;&gt;一、MariaDB 准备&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E4%B8%8B%E8%BD%BD&#34;&gt;1.1 下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96&#34;&gt;1.2 安装依赖&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;1.3 配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-mariadb&#34;&gt;二、安装 MariaDB&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7%E7%BB%84&#34;&gt;2.1 添加用户组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%AE%89%E8%A3%85&#34;&gt;2.2 安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8&#34;&gt;2.3 开机自启动&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AE%BE%E7%BD%AE-mariadb&#34;&gt;三、设置 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一mariadb-准备&#34;&gt;一、MariaDB 准备&lt;/h2&gt;
&lt;h3 id=&#34;11-下载&#34;&gt;1.1 下载&lt;/h3&gt;
&lt;p&gt;根据系统选择相应版本版本，然后下载解压。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# CentOS 7&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Debian 8+, Ubuntu 15.04+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mariadb-10.2.6-linux-systemd-x86_64.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;下载地址：https://downloads.mariadb.org/&lt;/p&gt;
&lt;h3 id=&#34;12-安装依赖&#34;&gt;1.2 安装依赖&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install libaio-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-配置文件&#34;&gt;1.3 配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除旧的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -f /etc/my.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 复制新的&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-mariadb&#34;&gt;二、安装 MariaDB&lt;/h2&gt;
&lt;h3 id=&#34;21-添加用户组&#34;&gt;2.1 添加用户组&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -g mysql -M -s /sbin/nologin mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-安装&#34;&gt;2.2 安装&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mariadb-10.2.6-linux-glibc_214-x86_64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s mariadb-10.2.6-linux-glibc_214-x86_64 mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./scripts/mysql_install_db --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R root .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R mysql data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-开机自启动&#34;&gt;2.3 开机自启动&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp support-files/mysql.server /etc/init.d/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig mysql on
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service start mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;手动启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PATH&lt;/span&gt;:/usr/local/mysql/bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;export PATH=$PATH:/usr/local/mysql/bin/&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; .bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysqld_safe --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三设置-mariadb&#34;&gt;三、设置 MariaDB&lt;/h2&gt;
&lt;p&gt;安全设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysqladmin -u root password &lt;span class=&#34;s1&#34;&gt;&amp;#39;新密码&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysqladmin -u root -h s1.dmfy.gov.cn password &lt;span class=&#34;s1&#34;&gt;&amp;#39;新密码&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql_secure_installation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;开启远程登录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql -uroot -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;GRANT ALL PRIVILEGES ON *.* TO &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt; IDENTIFIED BY &lt;span class=&#34;s1&#34;&gt;&amp;#39;新密码&amp;#39;&lt;/span&gt; WITH GRANT OPTION&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解决 MariaDB 中文乱码&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&#34;&gt;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/my.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;character_set_server&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;collation_server&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看效果&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql -uroot -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW VARIABLES WHERE Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;character\_set\_%&amp;#39;&lt;/span&gt; OR Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;collation%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/installing-mariadb-binary-tarballs/&#34;&gt;https://mariadb.com/kb/en/mariadb/installing-mariadb-binary-tarballs/&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Linux 服务器运维笔记1：RedHat/CentOS 系统安装与基础配置</title>
        <link>https://www.bg7pbp.com/p/rhel-centos-basic-setup/</link>
        <pubDate>Wed, 15 Mar 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/rhel-centos-basic-setup/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%B3%BB%E7%BB%9F%E5%AE%89%E8%A3%85&#34;&gt;一、系统安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E7%A1%AC%E7%9B%98%E5%88%86%E5%8C%BA%E4%BB%85%E4%BE%9B%E5%8F%82%E8%80%83&#34;&gt;1.1 硬盘分区（仅供参考）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E8%AE%BE%E7%BD%AE-linux-swap-%E7%A9%BA%E9%97%B4%E5%8F%AF%E9%80%89&#34;&gt;1.2 设置 Linux Swap 空间（可选）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cssh-%E8%AF%81%E4%B9%A6%E7%99%BB%E5%BD%95&#34;&gt;二、SSH 证书登录&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E7%94%9F%E6%88%90%E8%AF%81%E4%B9%A6&#34;&gt;2.1 生成证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E7%A6%81%E7%94%A8%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95&#34;&gt;2.2 禁用密码登录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AE&#34;&gt;三、网络设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E4%BD%BF%E7%94%A8%E9%9D%99%E6%80%81ip&#34;&gt;3.1 使用静态IP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E7%A6%81%E7%94%A8ipv6&#34;&gt;3.2 禁用IPV6&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E9%85%8D%E7%BD%AE-yum-%E6%BA%90&#34;&gt;四、配置 yum 源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-centos-7-%E9%85%8D%E7%BD%AE-yum-%E6%BA%90&#34;&gt;4.1 CentOS 7 配置 Yum 源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#411-%E5%A4%87%E4%BB%BD&#34;&gt;4.1.1 备份&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#412-%E4%BD%BF%E7%94%A8-163-%E6%BA%90&#34;&gt;4.1.2 使用 163 源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-rhel-7-%E9%85%8D%E7%BD%AE-yum-%E6%BA%90&#34;&gt;4.2 RHEL 7 配置 Yum 源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#421-%E6%9F%A5%E8%AF%A2%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84-yum-%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;4.2.1 查询已安装的 yum 软件包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#422-%E5%88%A0%E9%99%A4%E5%B7%B2%E5%AE%89%E8%A3%85%E7%9A%84-yum-%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;4.2.2 删除已安装的 yum 软件包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#423-%E5%A4%87%E4%BB%BD%E5%8E%9F%E6%9C%89-yum-%E9%85%8D%E7%BD%AE&#34;&gt;4.2.3 备份原有 yum 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#424-%E5%AE%89%E8%A3%85%E6%96%B0%E7%9A%84-yum-%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;4.2.4 安装新的 yum 软件包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#425-%E4%BD%BF%E7%94%A8-163-%E6%BA%90&#34;&gt;4.2.5 使用 163 源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E4%BD%BF%E7%94%A8-epel-%E6%BA%90&#34;&gt;4.3 使用 epel 源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-%E7%94%9F%E6%88%90%E7%BC%93%E5%AD%98&#34;&gt;4.4 生成缓存&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%85%B6%E4%BB%96%E7%B3%BB%E7%BB%9F%E9%85%8D%E7%BD%AE&#34;&gt;五、其他系统配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E4%BF%AE%E6%94%B9%E4%B8%BB%E6%9C%BA%E5%90%8D&#34;&gt;5.1 修改主机名&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52%E5%AE%89%E8%A3%85%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7&#34;&gt;5.2.安装常用工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53%E4%B8%8D%E5%8D%87%E7%BA%A7%E5%86%85%E6%A0%B8%E7%B3%BB%E7%BB%9F&#34;&gt;5.3.不升级内核、系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#54-%E7%A6%81%E7%94%A8%E9%98%B2%E7%81%AB%E5%A2%99-%E4%B8%8D%E5%BB%BA%E8%AE%AE&#34;&gt;5.4 禁用防火墙 (不建议)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#55-%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E9%85%8D%E7%BD%AE-%E9%80%89%E5%81%9A&#34;&gt;5.5 时间同步配置 (选做)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#56-%E7%A6%81%E7%94%A8-selinux&#34;&gt;5.6 禁用 SELinux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#57-%E4%BF%AE%E6%94%B9%E6%9C%80%E5%A4%A7%E6%96%87%E4%BB%B6%E9%99%90%E5%88%B6%E6%95%B0-ulimit&#34;&gt;5.7 修改最大文件限制数 ulimit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#58-%E5%85%B3%E9%97%AD%E4%B8%8D%E9%9C%80%E8%A6%81%E7%9A%84%E6%9C%8D%E5%8A%A1-%E9%80%89%E5%81%9A&#34;&gt;5.8 关闭不需要的服务 (选做)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#59-%E6%9B%B4%E6%96%B0%E7%B3%BB%E7%BB%9F&#34;&gt;5.9 更新系统&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 《Linux 服务器运维笔记》第1篇，本节内容包括 Linux Swap 设置、SSH 证书登录、网络设置、Yum 源配置等系统基础配置。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;操作环境：Red Hat Enterprise Linux 7.6.0&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一系统安装&#34;&gt;一、系统安装&lt;/h2&gt;
&lt;h3 id=&#34;11-硬盘分区仅供参考&#34;&gt;1.1 硬盘分区（仅供参考）&lt;/h3&gt;
&lt;p&gt;分区格式是 &lt;code&gt;xfs&lt;/code&gt; ，详见下图&lt;/p&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/partition.jpg&#34;&gt;
    &lt;img src=&#34;https://img.cdn.wangyan.cloud/p/partition.jpg&#34; width=&#34;300&#34; /&gt;
&lt;/a&gt;
&lt;h3 id=&#34;12-设置-linux-swap-空间可选&#34;&gt;1.2 设置 Linux Swap 空间（可选）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# M=Mebibytes, G=Gibibytes&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# dd if=/dev/zero of=/swapfile bs=1M cout=2048&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fallocate -l 2G /swapfile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 格式化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkswap /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;swapon /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 开机启用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/swapfile none swap defaults &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 删除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;swapoff -a
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /swapfile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;swapon -s
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;free -m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设备UUID&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lsblk -no UUID /dev/xxx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二ssh-证书登录&#34;&gt;二、SSH 证书登录&lt;/h2&gt;
&lt;h3 id=&#34;21-生成证书&#34;&gt;2.1 生成证书&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t rsa -b &lt;span class=&#34;m&#34;&gt;4096&lt;/span&gt; -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;wangyan&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/.ssh&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; vi ~/.ssh/authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;700&lt;/span&gt; -R ~/.ssh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; ~/.ssh/authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;文件权限：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root    &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; Mar  &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; 22:19 authorized_keys
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw------- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;3243&lt;/span&gt; Mar  &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; 22:46 id_rsa
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-rw-r--r-- &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root  &lt;span class=&#34;m&#34;&gt;733&lt;/span&gt; Mar  &lt;span class=&#34;m&#34;&gt;7&lt;/span&gt; 22:46 id_rsa.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-禁用密码登录&#34;&gt;2.2 禁用密码登录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vi /etc/ssh/sshd_config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#PermitRootLogin no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#PasswordAuthentication no&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#AuthorizedKeysFile      .ssh/authorized_keys&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#systemctl restart sshd.socket&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三网络设置&#34;&gt;三、网络设置&lt;/h2&gt;
&lt;h3 id=&#34;31-使用静态ip&#34;&gt;3.1 使用静态IP&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /etc/sysconfig/network-scripts/ifcfg-em1 /etc/sysconfig/network-scripts/ifcfg-em1.bak&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：下面的 IP GATEWAY UUID 都要修改&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/sysconfig/network-scripts/ifcfg-em1&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;TYPE=Ethernet
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;BOOTPROTO=static
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;DEFROUTE=yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;IPV4_FAILURE_FATAL=no
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;NAME=em1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;UUID=9ba3101c-ded9-4726-a533-de584cc28ed5
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;DEVICE=em1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ONBOOT=yes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;IPADDR=192.168.10.246
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;PREFIX=24
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;NETMASK=255.255.255.0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;GATEWAY=192.168.10.1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;PEERDNS=no
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;DNS1=114.114.114.114
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-禁用ipv6&#34;&gt;3.2 禁用IPV6&lt;/h3&gt;
&lt;p&gt;临时禁用&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -w net.ipv6.conf.all.disable_ipv6&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -w net.ipv6.conf.default.disable_ipv6&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;CentOS 7&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vi /etc/sysctl.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;net.ipv6.conf.all.disable_ipv6 &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;net.ipv6.conf.default.disable_ipv6 &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -p&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Red Hat Enterprise Linux 7&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/usr/lib/sysctl.d/50-default.conf&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# Disable IPv6
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;net.ipv6.conf.all.disable_ipv6 = 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;net.ipv6.conf.default.disable_ipv6 = 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;生效&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sysctl -p&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四配置-yum-源&#34;&gt;四、配置 yum 源&lt;/h2&gt;
&lt;h3 id=&#34;41-centos-7-配置-yum-源&#34;&gt;4.1 CentOS 7 配置 Yum 源&lt;/h3&gt;
&lt;p&gt;via &lt;a href=&#34;http://mirrors.163.com/.help/centos.html&#34;&gt;http://mirrors.163.com/.help/centos.html&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;411-备份&#34;&gt;4.1.1 备份&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;412-使用-163-源&#34;&gt;4.1.2 使用 163 源&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/yum.repos.d/CentOS7-Base-163.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[base]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-$releasever - Base - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/$releasever/os/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[updates]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-$releasever - Updates - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/$releasever/updates/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[extras]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-$releasever - Extras - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/$releasever/extras/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[centosplus]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-$releasever - Plus - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-rhel-7-配置-yum-源&#34;&gt;4.2 RHEL 7 配置 Yum 源&lt;/h3&gt;
&lt;h4 id=&#34;421-查询已安装的-yum-软件包&#34;&gt;4.2.1 查询已安装的 yum 软件包&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep yum&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;yum-3.4.3-161.el7.noarch&lt;/li&gt;
&lt;li&gt;yum-rhn-plugin-2.0.1-10.el7.noarch&lt;/li&gt;
&lt;li&gt;yum-metadata-parser-1.1.4-10.el7.x86_64&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;422-删除已安装的-yum-软件包&#34;&gt;4.2.2 删除已安装的 yum 软件包&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# args可以将输入内容（通常通过命令行管道传递），转成后续命令的参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -I &amp;#39;{}&amp;#39;表示将后面命令行的{}替换成前面解析出来的参数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -aq&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep yum&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;xargs -t -I &lt;span class=&#34;s1&#34;&gt;&amp;#39;{}&amp;#39;&lt;/span&gt; rpm -e &lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; --nodeps
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep yum &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;rpm -e yum-3.4.3-161.el7.noarch &amp;ndash;nodeps&lt;/li&gt;
&lt;li&gt;rpm -e yum-rhn-plugin-2.0.1-10.el7.noarch &amp;ndash;nodeps&lt;/li&gt;
&lt;li&gt;rpm -e yum-metadata-parser-1.1.4-10.el7.x86_64 &amp;ndash;nodeps&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;423-备份原有-yum-配置&#34;&gt;4.2.3 备份原有 yum 配置&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;whereis yum
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /etc/yum /etc/yum.rhel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;424-安装新的-yum-软件包&#34;&gt;4.2.4 安装新的 yum 软件包&lt;/h4&gt;
&lt;p&gt;下载&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/&#34;&gt;http://mirrors.163.com/centos/7/os/x86_64/Packages/&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-3.4.3-161.el7.centos.noarch.rpm&#34;&gt;yum-3.4.3-161.el7.centos.noarch.rpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-cron-3.4.3-161.el7.centos.noarch.rpm&#34;&gt;yum-cron-3.4.3-161.el7.centos.noarch.rpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-metadata-parser-1.1.4-10.el7.x86_64.rpm&#34;&gt;yum-metadata-parser-1.1.4-10.el7.x86_64.rpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm&#34;&gt;yum-plugin-fastestmirror-1.1.31-50.el7.noarch.rpm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://mirrors.163.com/centos/7/os/x86_64/Packages/yum-utils-1.1.31-50.el7.noarch.rpm&#34;&gt;yum-utils-1.1.31-50.el7.noarch.rpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -ivh *
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -qa &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;grep yum &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;配置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch /etc/yum/pluginconf.d/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;product-id.conf,search-disabled-repos.conf,subscription-manager.conf&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;425-使用-163-源&#34;&gt;4.2.5 使用 163 源&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/yum.repos.d/CentOS7-Base-163.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[base]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-7 - Base - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/7/os/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[updates]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-7 - Updates - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/7/updates/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[extras]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-7 - Extras - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/7/extras/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[centosplus]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=CentOS-7 - Plus - 163.com
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://mirrors.163.com/centos/7/centosplus/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=http://mirrors.163.com/centos/RPM-GPG-KEY-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者直接下载&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -o /etc/yum.repos.d/CentOS7-Base-163.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s2&#34;&gt;&amp;#34;s|\$releasever|7|i&amp;#34;&lt;/span&gt; /etc/yum.repos.d/CentOS7-Base-163.repo&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-使用-epel-源&#34;&gt;4.3 使用 epel 源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y epel-release&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-生成缓存&#34;&gt;4.4 生成缓存&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum clean all &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; yum makecache&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五其他系统配置&#34;&gt;五、其他系统配置&lt;/h2&gt;
&lt;h3 id=&#34;51-修改主机名&#34;&gt;5.1 修改主机名&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hostnamectl status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hostnamectl set-hostname s1&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52安装常用工具&#34;&gt;5.2.安装常用工具&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install vim curl wget net-tools kernel-headers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;53不升级内核系统&#34;&gt;5.3.不升级内核、系统&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 当前内核&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Linux 3.10.0-514.el7.x86_64&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uname -rs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 发行版&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#CentOS Linux release 7.3.1611 (Core)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /etc/centos-release
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 排除内核和系统版本更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/yum.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;exclude&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;kernel* centos-release* redhat-release* &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;54-禁用防火墙-不建议&#34;&gt;5.4 禁用防火墙 (不建议)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop firewalld.service &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable firewalld.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;55-时间同步配置-选做&#34;&gt;5.5 时间同步配置 (选做)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install ntp -y &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-timezone Asia/Shanghai &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-ntp yes &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; ntpd.service &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start ntpd.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;56-禁用-selinux&#34;&gt;5.6 禁用 SELinux&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/selinux/config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SELINUX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;disabled&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;57-修改最大文件限制数-ulimit&#34;&gt;5.7 修改最大文件限制数 ulimit&lt;/h3&gt;
&lt;p&gt;避免 too many open files 错误&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# bash 级限制 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;ulimit&lt;/span&gt; -n &lt;span class=&#34;m&#34;&gt;1000000&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/etc/security/limits.conf&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 用户级限制&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* soft nofile &lt;span class=&#34;m&#34;&gt;1000001&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* hard nofile &lt;span class=&#34;m&#34;&gt;1000002&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root soft nofile &lt;span class=&#34;m&#34;&gt;1000001&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root hard nofile &lt;span class=&#34;m&#34;&gt;1000002&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;/proc/sys/fs/file-max&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 系统级限制&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /proc/sys/fs/file-max&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;58-关闭不需要的服务-选做&#34;&gt;5.8 关闭不需要的服务 (选做)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;netstat -tulpn &lt;span class=&#34;c1&#34;&gt;# 查看&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum remove package_name &lt;span class=&#34;c1&#34;&gt;# 删除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl stop postfix.service  &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl disable postfix.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;59-更新系统&#34;&gt;5.9 更新系统&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 从 Yum 源安装配置 Mariadb</title>
        <link>https://www.bg7pbp.com/p/centos-install-mariadb-yum/</link>
        <pubDate>Wed, 01 Mar 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-mariadb-yum/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-mariadb&#34;&gt;一、安装 MariaDB&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%B7%BB%E5%8A%A0-mariadb-yum-%E6%BA%90&#34;&gt;1.添加 MariaDB Yum 源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%AE%89%E8%A3%85-mariadb&#34;&gt;2.安装 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%90%AF%E5%8A%A8-mariadb&#34;&gt;3.启动 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%AE%BE%E7%BD%AE-mariadb&#34;&gt;二、设置 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%B5%8B%E8%AF%95-mariadb&#34;&gt;三、测试 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E8%A7%A3%E5%86%B3-mariadb-%E4%B8%AD%E6%96%87%E4%B9%B1%E7%A0%81&#34;&gt;四、解决 MariaDB 中文乱码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装-mariadb&#34;&gt;一、安装 MariaDB&lt;/h2&gt;
&lt;h3 id=&#34;1添加-mariadb-yum-源&#34;&gt;1.添加 MariaDB Yum 源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/yum.repos.d/MariaDB.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[mariadb]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name = MariaDB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl = http://yum.mariadb.org/10.1/centos7-amd64
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2安装-mariadb&#34;&gt;2.安装 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y MariaDB-server MariaDB-client&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3启动-mariadb&#34;&gt;3.启动 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start mariadb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; mariadb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二设置-mariadb&#34;&gt;二、设置 MariaDB&lt;/h2&gt;
&lt;p&gt;mysql_secure_installation&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/i/install-mariadb-centos7.jpg&#34; alt=&#34;install-mariadb-centos7&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;初始密码为空，直接回车。&lt;/li&gt;
&lt;li&gt;设置 root 密码&lt;/li&gt;
&lt;li&gt;是否移除匿名用户&lt;/li&gt;
&lt;li&gt;是否禁止 root 远程登录&lt;/li&gt;
&lt;li&gt;是否删除 &amp;rsquo;test&amp;rsquo; 测试数据库&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;三测试-mariadb&#34;&gt;三、测试 MariaDB&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysqladmin -u root -p version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/i/install-mariadb-centos7-2.jpg&#34; alt=&#34;install-mariadb-centos7-2&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;四解决-mariadb-中文乱码&#34;&gt;四、解决 MariaDB 中文乱码&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&#34;&gt;https://mariadb.com/kb/en/mariadb/setting-character-sets-and-collations/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;character-set-server  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;collation-server      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;character_set_server&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;collation_server&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; utf8_general_ci
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;测试&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SHOW VARIABLES WHERE Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;character\_set\_%&amp;#39;&lt;/span&gt; OR Variable_name LIKE &lt;span class=&#34;s1&#34;&gt;&amp;#39;collation%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://mariadb.com/kb/en/mariadb/yum/&#34;&gt;https://mariadb.com/kb/en/mariadb/yum/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-centos-7&#34;&gt;https://www.digitalocean.com/community/tutorials/how-to-install-mariadb-on-centos-7&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://downloads.mariadb.org/mariadb/repositories/&#34;&gt;https://downloads.mariadb.org/mariadb/repositories/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>CentOS 从源码安装 Nginx</title>
        <link>https://www.bg7pbp.com/p/centos-install-nginx-source/</link>
        <pubDate>Wed, 15 Feb 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-nginx-source/</guid>
        <description>&lt;p&gt;Nginx 安装过程比较简单，详见自动安装脚本&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; PATH
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CUR_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;pwd&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;id -u&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;printf&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error: You must be root to run this script!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SSL_VER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;openssl-1.0.2l
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;pcre-8.40
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NGINX_VER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx-1.12.0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DownloadOpenSSL&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SSL_VER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget https://www.openssl.org/source/&lt;span class=&#34;nv&#34;&gt;$SSL_VER&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SSL_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SSL_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    tar -zxf &lt;span class=&#34;nv&#34;&gt;$SSL_VER&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DownloadPcre&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; wget https://ftp.pcre.org/pub/pcre/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; rm -rf &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    tar -zxf &lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;InstallNginx&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    uninstall
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    groupadd www
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    useradd -g www -M -s /sbin/nologin www
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;---------- Download OpenSSL ----------&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    DownloadOpenSSL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;---------- Download Pcre ----------&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    DownloadPcre
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;---------- Nginx Install ----------&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NGINX_VER&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;.tar.gz&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;  wget http://nginx.org/download/&lt;span class=&#34;nv&#34;&gt;$NGINX_VER&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    tar -zxf &lt;span class=&#34;nv&#34;&gt;$NGINX_VER&lt;/span&gt;.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$NGINX_VER&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ./configure &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_ssl_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_v2_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_realip_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_sub_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_gzip_static_module &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-http_stub_status_module  &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CUR_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;SSL_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --with-pcre&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;CUR_DIR&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;/&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PCRE_VER&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --http-client-body-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/client_body &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --http-proxy-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/proxy &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --http-fastcgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/fastcgi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --http-uwsgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/uwsgi &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        --http-scgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/temp/scgi
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ln -sf /usr/local/nginx/sbin/nginx /usr/sbin/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir -p /usr/local/nginx/temp/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;client_body,proxy,fastcgi,uwsgi,scgi&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;---------- Nginx Config ----------&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir -p /usr/local/nginx/conf/sites-enabled/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir -p /usr/local/nginx/conf/sites-available/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod &lt;span class=&#34;m&#34;&gt;711&lt;/span&gt; /usr/local/nginx/conf/sites-*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mv /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;se&#34;&gt;\c&lt;/span&gt;p -r &lt;span class=&#34;nv&#34;&gt;$CUR_DIR&lt;/span&gt;/conf/* /usr/local/nginx/conf/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /usr/local/nginx/conf/*.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    cp &lt;span class=&#34;nv&#34;&gt;$CUR_DIR&lt;/span&gt;/html/* /usr/local/nginx/html
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /usr/local/nginx/conf/sites-enabled/* /usr/local/nginx/html/*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mkdir /usr/local/nginx/conf/ssl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod &lt;span class=&#34;m&#34;&gt;711&lt;/span&gt; /usr/local/nginx/conf/ssl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/usr/lib/systemd/system/nginx.service&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Unit]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Description=nginx - high performance web server
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Documentation=http://nginx.org/en/docs/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;After=network.target remote-fs.target nss-lookup.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Service]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;Type=forking
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;PIDFile=/run/nginx.pid
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ExecReload=/bin/kill -s HUP $MAINPID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;ExecStop=/bin/kill -s QUIT $MAINPID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;PrivateTmp=true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Install]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;WantedBy=multi-user.target
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    chmod +x /usr/lib/systemd/system/nginx.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; nginx.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    systemctl start nginx.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;uninstall&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    groupdel www
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    userdel -f www
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; ! -d &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/nginx_backup&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mkdir -p /usr/local/nginx_backup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mv /usr/local/nginx/html /usr/local/nginx/conf /usr/local/nginx_backup
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm -rf /usr/local/nginx /usr/sbin/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    systemctl disable nginx.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm -f /usr/lib/systemd/system/nginx.service
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm -f /tmp/nginx_install.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;read&lt;/span&gt; -p &lt;span class=&#34;s2&#34;&gt;&amp;#34;Are you sure install nginx[y/n]?&amp;#34;&lt;/span&gt; ANSWER
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ANSWER&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;y&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Fine,continue!!!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   InstallNginx 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a /tmp/nginx_install.log &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;n&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;It is dangerous,bye!!!&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;u&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   uninstall 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Error choice&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 从 Yum 源安装 Nginx</title>
        <link>https://www.bg7pbp.com/p/centos-install-nginx-yum/</link>
        <pubDate>Wed, 01 Feb 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-nginx-yum/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-nginx&#34;&gt;一、安装 Nginx&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%B7%BB%E5%8A%A0-nginx-yum-%E6%BA%90&#34;&gt;1.添加 Nginx Yum 源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%AE%89%E8%A3%85-mariadb&#34;&gt;2.安装 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%90%AF%E5%8A%A8-mariadb&#34;&gt;3.启动 MariaDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E9%98%B2%E7%81%AB%E5%A2%99%E8%AE%BE%E7%BD%AE&#34;&gt;4.防火墙设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%AE%BE%E7%BD%AE-nginx&#34;&gt;二、设置 Nginx&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E7%BD%91%E5%9D%80&#34;&gt;1. 网址：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84&#34;&gt;2. 配置文件路径&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装-nginx&#34;&gt;一、安装 Nginx&lt;/h2&gt;
&lt;h3 id=&#34;1添加-nginx-yum-源&#34;&gt;1.添加 Nginx Yum 源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/yum.repos.d/nginx.repo &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[nginx]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=nginx repo
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=http://nginx.org/packages/centos/7/$basearch/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2安装-mariadb&#34;&gt;2.安装 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3启动-mariadb&#34;&gt;3.启动 MariaDB&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl start nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;4防火墙设置&#34;&gt;4.防火墙设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;http
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --permanent --zone&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;public --add-service&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo firewall-cmd --reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二设置-nginx&#34;&gt;二、设置 Nginx&lt;/h2&gt;
&lt;h3 id=&#34;1-网址&#34;&gt;1. 网址：&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://server_domain_name_or_IP/&#34;&gt;http://server_domain_name_or_IP/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ip addr show eth0 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep inet &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{ print $2; }&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\/.*$//&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2-配置文件路径&#34;&gt;2. 配置文件路径&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;默认网站根目录 &lt;code&gt;/usr/share/nginx/html&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;默认网站根配置文件 &lt;code&gt;/etc/nginx/conf.d/default.conf&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;其他网站配置文件 &lt;code&gt;/etc/nginx/conf.d/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;全局配置文件 &lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;p&gt;-. &lt;a href=&#34;http://nginx.org/en/linux_packages.html&#34;&gt;http://nginx.org/en/linux_packages.html&lt;/a&gt; &lt;br&gt;
-. &lt;a href=&#34;https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7&#34;&gt;https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-7&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>CentOS 安装配置 Docker 和 Docker Compose</title>
        <link>https://www.bg7pbp.com/p/centos-install-docker/</link>
        <pubDate>Sun, 15 Jan 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-install-docker/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-docker-engine&#34;&gt;一、安装 Docker Engine&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%9B%B4%E6%96%B0&#34;&gt;1.更新&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E6%B7%BB%E5%8A%A0yum%E6%BA%90&#34;&gt;2.添加YUM源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%AE%89%E8%A3%85-docker-engine&#34;&gt;3.安装 Docker Engine&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E5%BC%80%E5%90%AF%E6%9C%8D%E5%8A%A1&#34;&gt;4.开启服务&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5%E5%90%AF%E5%8A%A8&#34;&gt;5.启动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#6docker-%E7%94%A8%E6%88%B7%E7%BB%84&#34;&gt;6.docker 用户组&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-docker-compose&#34;&gt;二、安装 docker-compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE-docker-%E5%8A%A0%E9%80%9F%E5%99%A8&#34;&gt;三、配置 Docker 加速器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E9%85%8D%E7%BD%AE-docker-ssh-%E5%B7%A5%E5%85%B7&#34;&gt;四、配置 docker-ssh 工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94volume-%E6%8F%92%E4%BB%B6&#34;&gt;五、volume 插件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E5%AE%B9%E5%99%A8%E5%A4%87%E4%BB%BD&#34;&gt;六、容器备份&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一安装-docker-engine&#34;&gt;一、安装 Docker Engine&lt;/h2&gt;
&lt;h3 id=&#34;1更新&#34;&gt;1.更新&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2添加yum源&#34;&gt;2.添加YUM源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tee /etc/yum.repos.d/docker.repo &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[dockerrepo]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=Docker Repository
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=https://yum.dockerproject.org/repo/main/centos/7/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;enabled=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=https://yum.dockerproject.org/gpg
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3安装-docker-engine&#34;&gt;3.安装 Docker Engine&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.docker.com/engine/installation/linux/centos/&#34;&gt;https://docs.docker.com/engine/installation/linux/centos/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install -y docker-engine&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;4开启服务&#34;&gt;4.开启服务&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; docker.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;5启动&#34;&gt;5.启动&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;6docker-用户组&#34;&gt;6.docker 用户组&lt;/h3&gt;
&lt;p&gt;docker 运行需要ROOT权限，其他用户运行docker命令需要使用sudo。因此需要创建非root用户添加到docker组&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd docker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;usermod -aG docker dmfy&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-docker-compose&#34;&gt;二、安装 docker-compose&lt;/h2&gt;
&lt;p&gt;via &lt;a href=&#34;https://docs.docker.com/compose/compose-file/&#34;&gt;https://docs.docker.com/compose/compose-file/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;国外主机&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -s&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;-&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -m&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &amp;gt; /usr/local/bin/docker-compose &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/bin/docker-compose&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;国内主机&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -L https://get.daocloud.io/docker/compose/releases/download/1.9.0/docker-compose-&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -s&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;-&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uname -m&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &amp;gt; /usr/bin/docker-compose &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +x /usr/bin/docker-compose&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查看版本&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose --version&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三配置-docker-加速器&#34;&gt;三、配置 Docker 加速器&lt;/h2&gt;
&lt;p&gt;阿里云加速（推荐）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /etc/docker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tee /etc/docker/daemon.json &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-&amp;#39;EOF&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;  &amp;#34;registry-mirrors&amp;#34;: [&amp;#34;https://rvg03xpp.mirror.aliyuncs.com&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重启&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl daemon-reload
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Daocloud 加速&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sSL https://get.daocloud.io/daotools/set_mirror.sh &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh -s http://56c3a7e7.m.daocloud.io
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl restart docker&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四配置-docker-ssh-工具&#34;&gt;四、配置 docker-ssh 工具&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/phusion/baseimage-docker&#34;&gt;https://github.com/phusion/baseimage-docker&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl --fail -L -O https://github.com/phusion/baseimage-docker/archive/master.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xzf master.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ./baseimage-docker-master/install-tools.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;工具二：docker-ssh&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/jpetazzo/nsenter/blob/master/docker-enter&#34;&gt;https://github.com/jpetazzo/nsenter/blob/master/docker-enter&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;下载配置文件：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://files.wangyan.org/conf/bashrc-docker.zip&#34;&gt;http://files.wangyan.org/conf/bashrc-docker.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Source docker-ssh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f ~/.bashrc_docker &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        . ~/.bashrc_docker
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五volume-插件&#34;&gt;五、volume 插件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/engine/extend/legacy_plugins/&#34;&gt;https://docs.docker.com/engine/extend/legacy_plugins/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/rancher/convoy&#34;&gt;https://github.com/rancher/convoy&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;六容器备份&#34;&gt;六、容器备份&lt;/h2&gt;
&lt;p&gt;提交镜像&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker commit -p 35d86f745776 dmfy-mariadb-20170321&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;保存镜像&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker save dmfy-mariadb-20170321 &amp;gt; ~/dmfy-mariadb-20170321&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;载入镜像&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker load -i ~/dmfy-mariadb-20170321&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：&lt;/p&gt;
&lt;p&gt;导出容器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker &lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; 70fbab60962d &amp;gt; ~/seafile-container-20160811.tar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;导入容器为一个镜像&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat ~/seafile-container-20160811.tar &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; docker import - seafile:latest &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>PHP 匿名函数和闭包</title>
        <link>https://www.bg7pbp.com/p/php-closures/</link>
        <pubDate>Sun, 01 Jan 2017 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-closures/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E9%97%AD%E5%8C%85%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%94%A8%E6%B3%95&#34;&gt;一、闭包的基本用法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E7%A4%BA%E4%BE%8B1%E4%BD%9C%E4%B8%BA%E5%8F%98%E9%87%8F%E7%9A%84%E5%80%BC%E6%9D%A5%E4%BD%BF%E7%94%A8&#34;&gt;1.1 示例1：作为变量的值来使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E7%A4%BA%E4%BE%8B2%E4%BD%9C%E4%B8%BA%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E5%8F%82%E6%95%B0%E7%9A%84%E5%80%BC&#34;&gt;1.2 示例2：作为回调函数参数的值&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E7%A4%BA%E4%BE%8B3%E4%BB%8E%E7%88%B6%E4%BD%9C%E7%94%A8%E5%9F%9F%E7%BB%A7%E6%89%BF%E5%8F%98%E9%87%8F&#34;&gt;1.3 示例3：从父作用域继承变量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cclosure-%E9%97%AD%E5%8C%85%E7%B1%BB&#34;&gt;二、Closure 闭包类&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-closurebindto&#34;&gt;2.1 Closure::bindTo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-closurebind&#34;&gt;2.2 Closure::bind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%97%AD%E5%8C%85%E7%9A%84%E4%BD%9C%E7%94%A8&#34;&gt;三、闭包的作用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E8%AF%BB%E5%8F%96%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F&#34;&gt;3.1 读取局部变量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E4%BD%BF%E7%94%A8-bindto-%E6%88%96%E8%80%85-closurebind&#34;&gt;3.2 使用 bindTo() 或者 Closure::bind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;匿名函数（Anonymous functions），也叫闭包函数（closures），允许临时创建一个没有指定名称的函数。闭包和匿名函数在 &lt;code&gt;PHP5.3.0&lt;/code&gt; 中引入的。&lt;/p&gt;
&lt;p&gt;闭包和匿名函数看起来像是函数，实际上他们是 &lt;code&gt;Closure&lt;/code&gt; 类的一个实例，数据类型是对象。&lt;/p&gt;
&lt;p&gt;参考链接：&lt;a href=&#34;%5Bhttp://php.net/manual/zh/functions.anonymous.php%5D&#34;&gt;匿名函数&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一闭包的基本用法&#34;&gt;一、闭包的基本用法&lt;/h2&gt;
&lt;h3 id=&#34;11-示例1作为变量的值来使用&#34;&gt;1.1 示例1：作为变量的值来使用&lt;/h3&gt;
&lt;p&gt;闭包可以作为变量的值来使用，因为闭包实际是 PHP 内置类 &lt;code&gt;Closure&lt;/code&gt; 的对象实例，数据类型是对象，因此我们可以把一个 &lt;code&gt;closure&lt;/code&gt; 对象赋值给一个变量。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 闭包赋值给 $clousre 变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$clousre&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 可以用&amp;#34;变量名+括号&amp;#34;的形式调用，是因为 Closure 类中有 __invoke() 魔术方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 当尝试以调用函数的方式调用一个对象时，__invoke() 方法会被自动调用。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// nesfo 会传递给 $name 变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$closure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;nesfo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;%5Bhttp://php.net/manual/zh/language.oop5.magic.php#object.invok%5D&#34;&gt;__invoke() 魔术方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;%5Bhttp://php.net/manual/zh/class.closure.php%5D&#34;&gt;Closure 类 &lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;12-示例2作为回调函数参数的值&#34;&gt;1.2 示例2：作为回调函数参数的值&lt;/h3&gt;
&lt;p&gt;闭包经常作为回调函数（callback）参数的值来使用&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 根据第一个参数给出的规则，使用一个回调函数替换第三个参数给出的内容。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 注意回调函数的参数($match)是一个数组，其最后返回真正参与替换的字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// $match[1] 的值是 -w
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;preg_replace_callback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;~-([a-z])~&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$match&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 将 -w 转换成大写 W
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;strtoupper&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$match&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;},&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello-world&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 输出 helloWorld
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;%5Bhttp://php.net/manual/zh/function.preg-replace-callback.php%5D&#34;&gt;preg_replace_callback 函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;13-示例3从父作用域继承变量&#34;&gt;1.3 示例3：从父作用域继承变量&lt;/h3&gt;
&lt;p&gt;闭包可以从父作用域中继承变量，但是需要使用 &lt;code&gt;use&lt;/code&gt; 来传递进去。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 没有 &amp;#34;use&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//输出为null，匿名函数无法继承外部变量 $message，因为没有 &amp;#34;use&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用 &lt;code&gt;use&lt;/code&gt; 传递父作用域 &lt;code&gt;$message&lt;/code&gt; 变量&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 继承 $message
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//输出 string &amp;#39;hello&amp;#39; (length=5)，使用关键词 use 后，
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//匿名函数可以获取到外部变量 $message.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;引用继承，原理是匿名函数在定义时（不是在调用时）会获取其所继承的变量的值&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 引用继承，注意 &amp;amp;message
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$message&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;world&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$example&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//输出 string &amp;#39;world&amp;#39; (length=5),
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二closure-闭包类&#34;&gt;二、Closure 闭包类&lt;/h2&gt;
&lt;p&gt;前面说过，闭包是 &lt;code&gt;Closure&lt;/code&gt; 类的一个实例&lt;/p&gt;
&lt;p&gt;Closure 类定义了三种方法：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Closure::__construct&lt;/code&gt; — 构造函数，定义了 Closure 类禁止实例化。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Closure::bindTo&lt;/code&gt; — 复制当前闭包对象内容，并给这个闭包绑定一个新的对象和类作用域&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Closure::bind&lt;/code&gt; — 复制一个闭包对象内容，并给这个闭包绑定一个新的对象和类作用域&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;21-closurebindto&#34;&gt;2.1 Closure::bindTo&lt;/h3&gt;
&lt;p&gt;复制当前闭包对象（创建并返回一个新的闭包），并给这个闭包绑定一个新的对象($newthis)，并且可以为这个闭包指定类作用域($newscope)。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// newthis 绑定给匿名函数的一个对象，或者 NULL 来取消绑定。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// newscope 为这个新闭包指定类作用域，或者 &amp;#39;static&amp;#39; 保持当前状态。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 返回新创建的 Closure 对象 或者在失败时返回 FALSE
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bindTo&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$newthis&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$newscope&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;static&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;如果你只是想要复制一个闭包，不需要绑定新到对象，可以用 cloning 代替。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;bindTo 示例：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;A&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;fm&#34;&gt;__construct&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;getClosure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//returns closure bound to this object and scope
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$ob1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$ob2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 返回一个闭包对象，注意这里的 $this 指向的是 $ob1 对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ob1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;getClosure&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$cl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//结果是 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 复制上面 $cl 这个闭包对象内容，将 $this 绑定到了 $ob2 对象
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cl&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$cl&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bindTo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ob2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$cl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//结果是 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;%5Bhttp://php.net/manual/zh/closure.bindto.php%5D&#34;&gt;Closure::bindTo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-closurebind&#34;&gt;2.2 Closure::bind&lt;/h3&gt;
&lt;p&gt;这个方法是 &lt;code&gt;Closure::bindTo()&lt;/code&gt; 的静态版本。&lt;/p&gt;
&lt;p&gt;语法结构：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bind&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$closure&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;object&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$newthis&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$newscope&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;static&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;closure&lt;/code&gt; 需要绑定的匿名函数&lt;/li&gt;
&lt;li&gt;&lt;code&gt;newthis&lt;/code&gt; 需要绑定到匿名函数的对象，或者 NULL 创建未绑定的闭包&lt;/li&gt;
&lt;li&gt;&lt;code&gt;newscope&lt;/code&gt; 想要绑定给闭包的类作用域，或者 &amp;lsquo;static&amp;rsquo; 表示不改变&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;bind 示例：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;A&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$sfoo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;private&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ifoo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 注意 $cl1 是 static 静态版闭包
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cl1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$sfoo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// $ifoo 是非静态属性，使用  $this-&amp;gt;ifoo 访问
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cl2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ifoo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 复制 $cl1 闭包，不绑定新对象，作用域 class A
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$bcl1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$cl1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 复制 $cl2 闭包，绑定到 new A() 对象，作用域 class A
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 这里必须要为 $this 绑定到一个对象，而上面的 $cl1 是静态的，可以直接 A::$sfoo 访问，不需要绑定对象。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$bcl2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$cl2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$bcl1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$bcl2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(),&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\n&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考链接：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;%5Bhttp://php.net/manual/zh/closure.bind.php%5D&#34;&gt;Closure::bind&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;三闭包的作用&#34;&gt;三、闭包的作用&lt;/h2&gt;
&lt;h3 id=&#34;31-读取局部变量&#34;&gt;3.1 读取局部变量&lt;/h3&gt;
&lt;p&gt;通过闭包可以读取其他函数的内部变量&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$n&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// 通过闭包函数 $f2 使用 use 关键字获取外部变量 $n
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$f2&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;use&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$f2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$n&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// null, 因为 $n 是函数内的局部变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$f&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;());&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//int 2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-使用-bindto-或者-closurebind&#34;&gt;3.2 使用 bindTo() 或者 Closure::bind&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;bindTo&lt;/code&gt; 或者 &lt;code&gt;Closure::bind&lt;/code&gt; 方法可以把闭包的 &lt;code&gt;$this&lt;/code&gt; 绑定到其他对象上，这样闭包就可以访问那个对象中受保护和私有的成员变量。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;App&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$routes&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$responseStatus&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;200 OK&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$responseContentType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;protected&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$responseBody&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;Hello world&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;addRoute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$routePath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$routeCallback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;routes&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$routePath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Closure&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;::&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;bind&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$routeCallback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;no&#34;&gt;__CLASS__&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;//$this-&amp;gt;routes[$routePath] = $routeCallback-&amp;gt;bindTo($this, __CLASS__);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;dispatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$currentPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;routes&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$routePath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$callback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$routePath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$currentPath&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;// 闭包中的 __invoke() 方法会被自动调用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;c1&#34;&gt;// $callback(5); 闭包可以加参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nv&#34;&gt;$callback&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// $this-&amp;gt;responseBody 原来值是 Hello world
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;// 闭包绑定到 App 后，默认值修改为 {&amp;#34;name&amp;#34;: &amp;#34;nesfo&amp;#34;}
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;HTTP/1.1&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseStatus&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-type: &amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseContentType&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;header&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Content-length&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;.&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mb_strlen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseBody&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseBody&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;App&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;addRoute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/user/nesfo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseContentType&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;application/json; charset=utf8&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;responseBody&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;{&amp;#34;name&amp;#34;: &amp;#34;nesfo&amp;#34;}&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;test&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$app&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;dispatch&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/user/nesfo&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://dasheyuan.com/post/php-closure/&#34;&gt;学习PHP闭包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;《Modern PHP》&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Laravel 5.3 中文文档：快速入门——安装</title>
        <link>https://www.bg7pbp.com/p/laravel-5-3-installation/</link>
        <pubDate>Wed, 21 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-5-3-installation/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85-1&#34;&gt;安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83%E8%A6%81%E6%B1%82&#34;&gt;运行环境要求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85-laravel&#34;&gt;安装 Laravel&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%9A%E8%BF%87-laravel-%E5%AE%89%E8%A3%85%E5%B7%A5%E5%85%B7&#34;&gt;通过 Laravel 安装工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%9A%E8%BF%87-composer-create-project&#34;&gt;通过 Composer Create-Project&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9C%AC%E5%9C%B0%E5%BC%80%E5%8F%91%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;本地开发服务器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%85%8D%E7%BD%AE%E4%BF%A1%E6%81%AF&#34;&gt;配置信息&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#public-%E7%9B%AE%E5%BD%95&#34;&gt;Public 目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%9B%AE%E5%BD%95%E6%9D%83%E9%99%90&#34;&gt;目录权限&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E5%AF%86%E9%92%A5&#34;&gt;应用程序密钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%B6%E5%AE%83%E8%AE%BE%E7%BD%AE&#34;&gt;其它设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;电子文档：&lt;a href=&#34;https://laravel.book.wangyan.org/5.3/&#34;&gt;https://laravel.book.wangyan.org/5.3/&lt;/a&gt;
文章合集：&lt;a href=&#34;http://www.wangyan.cloud/tag/#laravel-5.3&#34;&gt;http://www.wangyan.cloud/tag/#laravel-5.3&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;安装&#34;&gt;安装&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#installation&#34;&gt;安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#server-requirements&#34;&gt;运行环境要求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#installing-laravel&#34;&gt;安装 Laravel&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#configuration&#34;&gt;配置信息&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;installation&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装-1&#34;&gt;安装&lt;/h2&gt;
&lt;p&gt;&lt;a name=&#34;server-requirements&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;运行环境要求&#34;&gt;运行环境要求&lt;/h3&gt;
&lt;p&gt;Laravel 框架会有一些系统上的要求。当然，这些要求在 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-homestead&#34;&gt;Laravel Homestead&lt;/a&gt; 虚拟机上都已经完全配置好了，强烈建议使用 Homestead 作为本地开发环境。&lt;/p&gt;
&lt;p&gt;不过，如果你没有使用 Homestead，那么需要保证运行环境满足以下要求：&lt;/p&gt;
&lt;div class=&#34;content-list&#34; markdown=&#34;1&#34;&gt;
- PHP &gt;= 5.6.4
- OpenSSL PHP Extension
- PDO PHP Extension
- Mbstring PHP Extension
- Tokenizer PHP Extension
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;译者注：强烈推荐使用 Homestead 作为开发环境，尤其是新手，可以避免很多不必要的麻烦。线上环境可以参考 &lt;a href=&#34;https://github.com/laravel/settler/blob/master/scripts/provision.sh&#34;&gt;Homestead 的环境部署脚本&lt;/a&gt; 进行部署。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a name=&#34;installing-laravel&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;安装-laravel&#34;&gt;安装 Laravel&lt;/h3&gt;
&lt;p&gt;Laravel 使用 &lt;a href=&#34;http://getcomposer.org&#34;&gt;Composer&lt;/a&gt; 来管理代码依赖。所以，在使用 Laravel 之前，请先确认你的电脑上安装了 Composer。&lt;/p&gt;
&lt;h4 id=&#34;通过-laravel-安装工具&#34;&gt;通过 Laravel 安装工具&lt;/h4&gt;
&lt;p&gt;首先，通过 Composer 安装 Laravel 安装工具：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer global require &amp;quot;laravel/installer&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;请确保 &lt;code&gt;~/.composer/vendor/bin&lt;/code&gt; 目录 (或者你操作系统类似的目录) 在你的系统环境变量中，这样 &lt;code&gt;laravel&lt;/code&gt; 才可以在你系统任意路径调用运行。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;译者注：例如 windwos 系统，该目录是 &lt;code&gt;C:/Users/xxxx/AppData/Roaming/Composer&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;一旦安装完成，就可以使用 &lt;code&gt;laravel new&lt;/code&gt; 命令在指定目录创建一个新的 Laravel 项目，例如：&lt;code&gt;laravel new blog&lt;/code&gt; 将会在当前目录下创建一个叫 &lt;code&gt;blog&lt;/code&gt; 的新应用，此目录里面存放着新安装的 Laravel 和代码依赖。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;laravel new blog
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;译者注：通过这种方式安装，速度要比通过 Composer 安装要快上许多，因为代码依赖是直接一起打包安装的。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;通过-composer-create-project&#34;&gt;通过 Composer Create-Project&lt;/h4&gt;
&lt;p&gt;除此之外，你也可以通过 Composer 在命令行运行 &lt;code&gt;create-project&lt;/code&gt; 命令来安装 Laravel：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer create-project --prefer-dist laravel/laravel blog
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;译者注：如果要下载其他版本，比如 5.1 LTS 版本，可以使用这个命令：&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre&gt;&lt;code&gt;composer create-project --prefer-dist laravel/laravel blog 5.1.*
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 id=&#34;本地开发服务器&#34;&gt;本地开发服务器&lt;/h4&gt;
&lt;p&gt;如果你在本地安装了 PHP ，想使用 PHP 内置的 Web 服务器访问应用。你需要使用 &lt;code&gt;serve&lt;/code&gt; Artisan 命令。这个命令会启动 PHP 内置的开发服务器，通过 &lt;code&gt;http://localhost:8000&lt;/code&gt; 访问。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php artisan serve
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，了解更多本地开发选项，请阅读文档 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-homestead&#34;&gt;Homestead&lt;/a&gt; 和 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-valet&#34;&gt;Valet&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;configuration&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;配置信息&#34;&gt;配置信息&lt;/h3&gt;
&lt;h4 id=&#34;public-目录&#34;&gt;Public 目录&lt;/h4&gt;
&lt;p&gt;安装完成后，你应该指定 Web 服务器的网站根目录到 &lt;code&gt;public&lt;/code&gt; 文件夹上。在这个文件夹下的 &lt;code&gt;index.php&lt;/code&gt; 文件是所有 HTTP 请求的入口控制文件。&lt;/p&gt;
&lt;h4 id=&#34;配置文件&#34;&gt;配置文件&lt;/h4&gt;
&lt;p&gt;所有 Laravel 框架的配置文件都放置在 &lt;code&gt;config&lt;/code&gt; 目录下。每个选项都有说明，请仔细阅读这些说明，并熟悉这些选项配置。&lt;/p&gt;
&lt;h4 id=&#34;目录权限&#34;&gt;目录权限&lt;/h4&gt;
&lt;p&gt;安装 Laravel 之后，你必须设置一些文件目录权限。&lt;code&gt;storage&lt;/code&gt; 和 &lt;code&gt;bootstrap/cache&lt;/code&gt; 目录必须让 Web 服务有写入权限。否则 laravel 将无法运行。如果你使用 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-homestead&#34;&gt;Homestead&lt;/a&gt; 虚拟机，那么这些权限已经被设置好了。&lt;/p&gt;
&lt;h4 id=&#34;应用程序密钥&#34;&gt;应用程序密钥&lt;/h4&gt;
&lt;p&gt;安装完 Laravel 后，下一步要做的事情是将应用程序密钥设置为一个随机字符串。假设你是通过 Composer 或是 Laravel 安装工具安装的 Laravel，那么这个密钥已经通过 &lt;code&gt;key:generate&lt;/code&gt; 命令帮你设置完成。&lt;/p&gt;
&lt;p&gt;这个密钥可以被设置在 &lt;code&gt;.env&lt;/code&gt; 环境文件中。如果你还没将 &lt;code&gt;.env.example&lt;/code&gt; 文件重命名为 &lt;code&gt;.env&lt;/code&gt;，那么你现在应该去设置下。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;如果应用程序密钥没有被设置的话，你的用户 Session 和其它的加密数据都是不安全的！&lt;/strong&gt;&lt;/p&gt;
&lt;h4 id=&#34;其它设置&#34;&gt;其它设置&lt;/h4&gt;
&lt;p&gt;Laravel 几乎不需做任何其它设置就可以马上使用，但是建议你先浏览 &lt;code&gt;config/app.php&lt;/code&gt; 文件和对应的文档，这里面包含着一些选项，如 &lt;code&gt;时区&lt;/code&gt; 和 &lt;code&gt;语言环境&lt;/code&gt;，你可以根据应用程序的情况来修改。&lt;/p&gt;
&lt;p&gt;你也可以设置 Laravel 的几个附加组件，像是：&lt;/p&gt;
&lt;div class=&#34;content-list&#34; markdown=&#34;1&#34;&gt;
- [缓存](/laravel-5.3-cache#configuration)
- [数据库](/laravel-5.3-database#configuration)
- [Session](/laravel-5.3-session#configuration)
&lt;/div&gt;
&lt;p&gt;一旦 Laravel 安装完成，你应该立即 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-installation#environment-configuration&#34;&gt;设置本机环境&lt;/a&gt;。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后更新：2016.09.21&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Laravel 5.3 中文文档：序言——贡献指南</title>
        <link>https://www.bg7pbp.com/p/laravel-5-3-contribution-guide/</link>
        <pubDate>Tue, 20 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-5-3-contribution-guide/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bug-%E5%8F%8D%E9%A6%88-bug-reports&#34;&gt;Bug 反馈 (Bug Reports)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%A0%B8%E5%BF%83%E5%BC%80%E5%8F%91%E8%AE%A8%E8%AE%BA-core-development-discussion&#34;&gt;核心开发讨论 (Core Development Discussion)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%89%E6%8B%A9%E5%88%86%E6%94%AF-which-branch&#34;&gt;选择分支 (Which Branch?)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E-security-vulnerabilities&#34;&gt;安全漏洞 (Security Vulnerabilities)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%96%E7%A0%81%E9%A3%8E%E6%A0%BC-coding-style&#34;&gt;编码风格 (Coding Style)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#phpdoc&#34;&gt;PHPDoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#styleci&#34;&gt;StyleCI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;电子文档：&lt;a href=&#34;https://laravel.book.wangyan.org/5.3/&#34;&gt;https://laravel.book.wangyan.org/5.3/&lt;/a&gt;
文章合集：&lt;a href=&#34;http://www.wangyan.cloud/tag/#laravel-5.3&#34;&gt;http://www.wangyan.cloud/tag/#laravel-5.3&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;贡献指南-contribution-guide&#34;&gt;贡献指南 (Contribution Guide)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#bug-%E5%8F%8D%E9%A6%88-bug-reports&#34;&gt;Bug 反馈 (Bug Reports)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%A0%B8%E5%BF%83%E5%BC%80%E5%8F%91%E8%AE%A8%E8%AE%BA-core-development-discussion&#34;&gt;核心开发讨论 (Core Development Discussion)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%89%E6%8B%A9%E5%88%86%E6%94%AF-which-branch&#34;&gt;选择分支 (Which Branch?)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E5%85%A8%E6%BC%8F%E6%B4%9E-security-vulnerabilities&#34;&gt;安全漏洞 (Security Vulnerabilities)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%96%E7%A0%81%E9%A3%8E%E6%A0%BC-coding-style&#34;&gt;编码风格 (Coding Style)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#phpdoc&#34;&gt;PHPDoc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#styleci&#34;&gt;StyleCI&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;bug-reports&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;bug-反馈-bug-reports&#34;&gt;Bug 反馈 (Bug Reports)&lt;/h2&gt;
&lt;p&gt;为了提倡积极协作，&lt;a href=&#34;http://laravelacademy.org/tags/laravel&#34;&gt;Laravel&lt;/a&gt; 强烈鼓励使用 &lt;a href=&#34;http://laravelacademy.org/tags/github&#34;&gt;GitHub&lt;/a&gt; 的 &lt;code&gt;pull requests&lt;/code&gt;，而不是仅仅报告 Bug，「Bug 反馈」可以以一个包含失败测试的 Pull Request 的形式发送。&lt;/p&gt;
&lt;p&gt;假如你提交了「Bug 反馈」，那么反馈中应该包含着标题和详尽的问题描述，并尽可能多的提供相关的信息和该 Bug 的代码示例。这样做的主要目的是让自己和其他人可以简单地重现并修复该 Bug。&lt;/p&gt;
&lt;p&gt;请记住，「Bug 反馈」的初衷是让其它有相同问题的人可以协作解决问题。不要期望反馈 Bug 后，马上就会有人修复了它。创建「Bug 反馈」主要是为了能帮助你自己和其他人开始着手修复问题。&lt;/p&gt;
&lt;p&gt;Laravel 源代码托管在 GitHub 上面，并且每一个 Laravel 项目都有其对应的代码仓库：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/framework&#34;&gt;Laravel Framework&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/laravel&#34;&gt;Laravel Application&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/docs&#34;&gt;Laravel Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/cashier&#34;&gt;Laravel Cashier&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/cashier-braintree&#34;&gt;Laravel Cashier for Braintree&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/envoy&#34;&gt;Laravel Envoy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/homestead&#34;&gt;Laravel Homestead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/settler&#34;&gt;Laravel Homestead Build Scripts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/laravel.com&#34;&gt;Laravel Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/laravel/art&#34;&gt;Laravel Art&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;core-development-discussion&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;核心开发讨论-core-development-discussion&#34;&gt;核心开发讨论 (Core Development Discussion)&lt;/h2&gt;
&lt;p&gt;你可以在 Laravel 讨论组 &lt;a href=&#34;https://github.com/laravel/internals/issues&#34;&gt;issue board&lt;/a&gt; 提出新特性或者改进。如果你提出了新的特性，请至少附上完成新特性需要的相关代码。&lt;/p&gt;
&lt;p&gt;有关错误、新功能和现有功能的实现讨论会在 Slack 的 &lt;a href=&#34;http://larachat.co&#34;&gt;LaraChat&lt;/a&gt; 群组上的 &lt;code&gt;#internals&lt;/code&gt; 频道中进行。Laravel 的维护者 Taylor Otwell 在工作日的上午8点到下午5点（西六区或美国芝加哥时间）通常会出现在频道上，其它时间也可能偶尔在线。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;which-branch&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;选择分支-which-branch&#34;&gt;选择分支 (Which Branch?)&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;所有的&lt;/strong&gt; Bug 修复应该提交到 &lt;code&gt;latest stable&lt;/code&gt; 稳定分支上。Bug 修复 &lt;strong&gt;永远不要&lt;/strong&gt; 提交到 &lt;code&gt;master&lt;/code&gt; 分支，除非它修复的功能只存在下一版的发布中。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;次要的&lt;/strong&gt; 且与现有的 Laravel 发布版本 &lt;strong&gt;完全向下兼容&lt;/strong&gt; 的功能可以发送到最新的稳定分支。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;主要的&lt;/strong&gt; 新功能应该都发送到 &lt;code&gt;master&lt;/code&gt; 分支，它包含下一版的 Laravel 发布内容。&lt;/p&gt;
&lt;p&gt;如果不确定你的功能是主要的还是次要的，请在 Slack 的 &lt;a href=&#34;http://larachat.co&#34;&gt;LaraChat&lt;/a&gt; 群组上的 &lt;code&gt;#internals&lt;/code&gt; 频道询问 Taylor Otwell。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;security-vulnerabilities&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;安全漏洞-security-vulnerabilities&#34;&gt;安全漏洞 (Security Vulnerabilities)&lt;/h2&gt;
&lt;p&gt;如果你发现 Laravel 存在安全漏洞，请发送电子邮件到 &lt;a href=&#34;mailto:taylor@laravel.com&#34;&gt;&lt;a href=&#34;mailto:taylor@laravel.com&#34;&gt;taylor@laravel.com&lt;/a&gt;&lt;/a&gt; 给 Taylor Otwell。所有的安全漏洞将会被及时解决。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;coding-style&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;编码风格-coding-style&#34;&gt;编码风格 (Coding Style)&lt;/h2&gt;
&lt;p&gt;Laravel 遵守 &lt;a href=&#34;https://phphub.org/topics/2079&#34;&gt;PSR-2&lt;/a&gt; 编码规范和 &lt;a href=&#34;https://phphub.org/topics/2081&#34;&gt;PSR-4&lt;/a&gt; 自动加载规范。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;译者注：扩展阅读 - &lt;a href=&#34;https://psr.phphub.org/&#34;&gt;所有 PSR 的标准规范&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a name=&#34;phpdoc&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;phpdoc&#34;&gt;PHPDoc&lt;/h3&gt;
&lt;p&gt;下面是一个示范文档单元。请注意 &lt;code&gt;@param&lt;/code&gt; 属性后有是有两个空格，参数类型两个以上空格，最后是变量类型名称。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * 为服务容器注册一个绑定
 *
 * @param  string|array  $abstract
 * @param  \Closure|string|null  $concrete
 * @param  bool  $shared
 * @return void
 */
public function bind($abstract, $concrete = null, $shared = false)
{
    //
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name=&#34;styleci&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;styleci&#34;&gt;StyleCI&lt;/h3&gt;
&lt;p&gt;如果你的编码风格不完美，别着急！当你 &lt;code&gt;pull requests&lt;/code&gt; 到 Laravel  版本库后， &lt;a href=&#34;https://styleci.io/&#34;&gt;StyleCI&lt;/a&gt; 可以自动合并修复任何风格。这使我们能够专注于内容的贡献，而不是编码风格 。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后更新：2016.09.21&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Laravel 5.3 中文文档：序言——版本说明</title>
        <link>https://www.bg7pbp.com/p/laravel-5-3-release-notes/</link>
        <pubDate>Mon, 19 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/laravel-5-3-release-notes/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%94%AF%E6%8C%81%E6%94%BF%E7%AD%96-support-policy&#34;&gt;支持政策 (Support Policy)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-53&#34;&gt;Laravel 5.3&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%B6%88%E6%81%AF%E9%80%9A%E7%9F%A5-notifications&#34;&gt;消息通知 (Notifications)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#websockets--%E4%BA%8B%E4%BB%B6%E5%B9%BF%E6%92%AD-event-broadcasting&#34;&gt;WebSockets / 事件广播 (Event Broadcasting)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-passport-oauth2-%E8%AE%A4%E8%AF%81%E6%9C%8D%E5%8A%A1&#34;&gt;Laravel Passport (OAuth2 认证服务)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%90%9C%E7%B4%A2%E7%B3%BB%E7%BB%9F-laravel-scout&#34;&gt;搜索系统 (Laravel Scout)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mailable-%E5%AF%B9%E8%B1%A1-mailable-objects&#34;&gt;Mailable 对象 (Mailable Objects)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AD%98%E5%82%A8%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6-storing-uploaded-files&#34;&gt;存储上传文件 (Storing Uploaded Files)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#webpack--laravel-elixir&#34;&gt;Webpack &amp;amp; Laravel Elixir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%89%8D%E7%AB%AF%E6%9E%B6%E6%9E%84-frontend-structure&#34;&gt;前端架构 (Frontend Structure)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%B7%AF%E7%94%B1%E6%96%87%E4%BB%B6-routes-files&#34;&gt;路由文件 (Routes Files)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%97%AD%E5%8C%85%E6%8E%A7%E5%88%B6%E5%8F%B0%E5%91%BD%E4%BB%A4-closure-console-commands&#34;&gt;闭包控制台命令 (Closure Console Commands)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#blade-%E4%B8%AD%E7%9A%84-loop-%E5%8F%98%E9%87%8F-the-loop-variable&#34;&gt;Blade 中的 &lt;code&gt;$loop&lt;/code&gt; 变量 (The &lt;code&gt;$loop&lt;/code&gt; Variable)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-52&#34;&gt;Laravel 5.2&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81%E9%A9%B1%E5%8A%A8--%E5%A4%9A%E8%AE%A4%E8%AF%81%E7%B3%BB%E7%BB%9F-multi-auth&#34;&gt;用户认证驱动 / &amp;ldquo;多认证系统 (Multi-Auth)&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%94%A8%E6%88%B7%E8%AE%A4%E8%AF%81%E8%84%9A%E6%89%8B%E6%9E%B6-authentication-scaffolding&#34;&gt;用户认证脚手架 (Authentication Scaffolding)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%9A%90%E5%BC%8F%E6%A8%A1%E5%9E%8B%E7%BB%91%E5%AE%9A-implicit-model-binding&#34;&gt;隐式模型绑定 (Implicit Model Binding)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%AD%E9%97%B4%E4%BB%B6%E7%BE%A4%E7%BB%84-middleware-groups&#34;&gt;中间件群组 (Middleware Groups)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%AE%BF%E9%97%AE%E9%A2%91%E7%8E%87%E9%99%90%E5%88%B6-rate-limiting&#34;&gt;访问频率限制 (Rate Limiting)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%95%B0%E7%BB%84%E8%BE%93%E5%85%A5%E9%AA%8C%E8%AF%81-array-validation&#34;&gt;数组输入验证 (Array Validation)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#bail-%E8%AE%A4%E8%AF%81%E8%A7%84%E5%88%99-bail-validation-rule&#34;&gt;Bail 认证规则 (Bail Validation Rule)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#eloquent-%E5%85%A8%E5%B1%80%E4%BD%9C%E7%94%A8%E5%9F%9F%E4%BC%98%E5%8C%96-eloquent-global-scope-improvements&#34;&gt;Eloquent 全局作用域优化 (Eloquent Global Scope Improvements)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-51&#34;&gt;Laravel 5.1&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#php-559&#34;&gt;PHP 5.5.9+&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#lts&#34;&gt;LTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#psr-2&#34;&gt;PSR-2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%87%E6%A1%A3-documentation&#34;&gt;文档 (Documentation)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8B%E4%BB%B6%E5%B9%BF%E6%92%AD-event-broadcasting&#34;&gt;事件广播 (Event Broadcasting)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%AD%E9%97%B4%E4%BB%B6%E5%8F%82%E6%95%B0-middleware-parameters&#34;&gt;中间件参数 (Middleware Parameters)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%B5%8B%E8%AF%95%E6%94%B9%E8%BF%9B-testing-overhaul&#34;&gt;测试改进 (Testing Overhaul)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%A8%A1%E5%9E%8B%E5%B7%A5%E5%8E%82-model-factories&#34;&gt;模型工厂 (Model Factories)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#artisan-%E7%9A%84%E6%94%B9%E8%BF%9B-artisan-improvements&#34;&gt;Artisan 的改进 (Artisan Improvements)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%87%E4%BB%B6%E5%A4%B9%E7%BB%93%E6%9E%84-folder-structure&#34;&gt;文件夹结构 (Folder Structure)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8A%A0%E5%AF%86-encryption&#34;&gt;加密 (Encryption)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-50&#34;&gt;Laravel 5.0&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B0%E7%9A%84%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84-new-folder-structure&#34;&gt;新的目录结构 (New Folder Structure)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%A5%91%E7%BA%A6-contracts&#34;&gt;契约 (Contracts)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%B7%AF%E7%94%B1%E7%BC%93%E5%AD%98-route-cache&#34;&gt;路由缓存 (Route Cache)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%B7%AF%E7%94%B1%E4%B8%AD%E9%97%B4%E4%BB%B6-route-middleware&#34;&gt;路由中间件 (Route Middleware)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%8E%A7%E5%88%B6%E5%99%A8%E6%96%B9%E6%B3%95%E6%B3%A8%E5%85%A5-controller-method-injection&#34;&gt;控制器方法注入 (Controller Method Injection)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%AE%A4%E8%AF%81%E5%9F%BA%E6%9C%AC%E6%9E%B6%E6%9E%84-authentication-scaffolding&#34;&gt;认证基本架构 (Authentication Scaffolding)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8B%E4%BB%B6%E5%AF%B9%E8%B1%A1-event-objects&#34;&gt;事件对象 (Event Objects)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%91%BD%E4%BB%A4%E5%8F%8A%E9%98%9F%E5%88%97-commands--queueing&#34;&gt;命令及队列 (Commands / Queueing)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%98%9F%E5%88%97-database-queue&#34;&gt;数据库队列 (Database Queue)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-%E8%B0%83%E5%BA%A6%E5%99%A8-laravel-scheduler&#34;&gt;Laravel 调度器 (Laravel Scheduler)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#tinker--psysh&#34;&gt;Tinker / Psysh&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#dotenv&#34;&gt;DotEnv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-elixir&#34;&gt;Laravel Elixir&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-socialite&#34;&gt;Laravel Socialite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E9%9B%86%E6%88%90-flysystem-integration&#34;&gt;文件系统集成 (Flysystem Integration)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%A1%A8%E5%8D%95%E8%AF%B7%E6%B1%82-form-requests&#34;&gt;表单请求 (Form Requests)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AE%80%E6%98%93%E6%8E%A7%E5%88%B6%E5%99%A8%E8%AF%B7%E6%B1%82%E9%AA%8C%E8%AF%81-simple-controller-request-validation&#34;&gt;简易控制器请求验证 (Simple Controller Request Validation)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B0%E7%9A%84%E7%94%9F%E6%88%90%E5%99%A8-new-generators&#34;&gt;新的生成器 (New Generators)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E7%BC%93%E5%AD%98-configuration-cache&#34;&gt;配置文件缓存 (Configuration Cache)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#symfony-vardumper&#34;&gt;Symfony VarDumper&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-42&#34;&gt;Laravel 4.2&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#php-54-%E9%9C%80%E6%B1%82&#34;&gt;PHP 5.4 需求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-forge&#34;&gt;Laravel Forge&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-homestead&#34;&gt;Laravel Homestead&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-%E6%94%B6%E9%93%B6%E5%8F%B0-laravel-cashier&#34;&gt;Laravel 收银台 (Laravel Cashier)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%B8%B8%E9%A9%BB%E7%A8%8B%E5%BA%8F-daemon-queue-workers&#34;&gt;常驻程序 (Daemon Queue Workers)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mail-api-drivers&#34;&gt;Mail API Drivers&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BD%AF%E5%88%A0%E9%99%A4-traits-soft-deleting-traits&#34;&gt;软删除 Traits (Soft Deleting Traits)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#convenient-auth--remindable-traits&#34;&gt;Convenient Auth &amp;amp; Remindable Traits&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%AE%80%E6%98%93%E5%88%86%E9%A1%B5-simple-paginate&#34;&gt;&amp;ldquo;简易分页 (Simple Paginate)&amp;rdquo;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%BF%81%E7%A7%BB%E7%A1%AE%E8%AE%A4-migration-confirmation&#34;&gt;迁移确认 (Migration Confirmation)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-41&#34;&gt;Laravel 4.1&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%8C%E6%95%B4%E6%9B%B4%E5%8A%A8%E5%88%97%E8%A1%A8-full-change-list&#34;&gt;完整更动列表 (Full Change List)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B0%E7%9A%84-ssh-%E7%BB%84%E4%BB%B6-new-ssh-component&#34;&gt;新的 SSH 组件 (New SSH Component)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#boris-in-tinker&#34;&gt;Boris In Tinker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#eloquent-%E5%BC%BA%E5%8C%96-eloquent-improvements&#34;&gt;Eloquent 强化 (Eloquent Improvements)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AF%BB%E5%86%99%E5%88%86%E7%A6%BB-database-read--write-connections&#34;&gt;数据库读写分离 (Database Read / Write Connections)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%98%9F%E5%88%97%E6%8E%92%E5%BA%8F-queue-priority&#34;&gt;队列排序 (Queue Priority)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%A4%B1%E8%B4%A5%E9%98%9F%E5%88%97%E4%BD%9C%E4%B8%9A%E5%A4%84%E7%90%86--failed-queue-job-handling&#34;&gt;失败队列作业处理 ( Failed Queue Job Handling)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%93%E5%AD%98%E6%A0%87%E7%AD%BE-cache-tags&#34;&gt;缓存标签 (Cache Tags)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9B%B4%E5%85%B7%E5%BC%B9%E6%80%A7%E7%9A%84%E5%AF%86%E7%A0%81%E6%8F%90%E9%86%92-flexible-password-reminders&#34;&gt;更具弹性的密码提醒 (Flexible Password Reminders)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BC%BA%E5%8C%96%E8%B7%AF%E7%94%B1%E5%BC%95%E6%93%8E-improved-routing-engine&#34;&gt;强化路由引擎 (Improved Routing Engine)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BC%BA%E5%8C%96-session-%E5%BC%95%E6%93%8E-improved-session-engine&#34;&gt;强化 Session 引擎 (Improved Session Engine)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#doctrine-dbal&#34;&gt;Doctrine DBAL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;电子文档：&lt;a href=&#34;https://laravel.book.wangyan.org/5.3/&#34;&gt;https://laravel.book.wangyan.org/5.3/&lt;/a&gt;
文章合集：&lt;a href=&#34;http://www.wangyan.cloud/tag/#laravel-5.3&#34;&gt;http://www.wangyan.cloud/tag/#laravel-5.3&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h1 id=&#34;版本说明-release-notes&#34;&gt;版本说明 (Release Notes)&lt;/h1&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#support-policy&#34;&gt;支持政策&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.3&#34;&gt;Laravel 5.3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.2&#34;&gt;Laravel 5.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.1.11&#34;&gt;Laravel 5.1.11&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.1.4&#34;&gt;Laravel 5.1.4&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.1&#34;&gt;Laravel 5.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-5.0&#34;&gt;Laravel 5.0&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-4.2&#34;&gt;Laravel 4.2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#laravel-4.1&#34;&gt;Laravel 4.1&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;support-policy&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;支持政策-support-policy&#34;&gt;支持政策 (Support Policy)&lt;/h2&gt;
&lt;p&gt;对于 LTS 版本，比如 Laravel 5.1，会提供为期两年的 bug 修复和三年的安全修复支持。LTS 版本是 Laravel 能提供的维护时间最长的发行版。&lt;/p&gt;
&lt;p&gt;对于其他通用版本，只提供六个月的 bug 修复和一年的安全修复支持。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://phphub.org/topics/2594&#34;&gt;Laravel 的发布路线图&lt;/a&gt; - by &lt;a href=&#34;http://github.com/summerblue&#34;&gt;Summer&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a name=&#34;laravel-5.3&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-53&#34;&gt;Laravel 5.3&lt;/h2&gt;
&lt;p&gt;Laravel 5.3 在 5.2 基础上进行了优化，新特性包括以下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-notifications&#34;&gt;消息通知 Laravel Notifications&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-broadcasting&#34;&gt;事件广播 Laravel Echo&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-passport&#34;&gt;OAuth2 授权认证 Laravel Passport&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-scout&#34;&gt;全文搜索引擎 Laravel Scout&lt;/a&gt;；&lt;/li&gt;
&lt;li&gt;Laravel Elixir 开始支持 Webpack；&lt;/li&gt;
&lt;li&gt;Mail 操作类 Laravel Mailable；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;web&lt;/code&gt; 和 &lt;code&gt;api&lt;/code&gt; 的路由分离；&lt;/li&gt;
&lt;li&gt;基于闭包的控制台命令；&lt;/li&gt;
&lt;li&gt;更加易用的辅助函数，用于存储上传的文件；&lt;/li&gt;
&lt;li&gt;支持 POPO 和单动作控制；&lt;/li&gt;
&lt;li&gt;优化默认的前端脚手架，等等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;消息通知-notifications&#34;&gt;消息通知 (Notifications)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此新特性的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/9&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laravel Notifications 提供了简单、优雅的 API 支持你通过不同的渠道发送通知，例如电子邮件、Slack、手机短信等等。&lt;/p&gt;
&lt;p&gt;例如，你可以定义一个单据 (invoice)，当该单据被付款后，则通过邮件和手机短信发送提醒通知：&lt;/p&gt;
&lt;p&gt;你可用通过下面这个简单的方法来实现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$user-&amp;gt;notify(new InvoicePaid($invoice));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&#34;http://laravel-notification-channels.com&#34;&gt;Laravel 社区&lt;/a&gt; 已经为通知系统编写了各式的驱动，甚至包括对 iOS 和 Android 通知的支持，更多关于通知系统的信息，请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-notifications&#34;&gt;完整的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;websockets--事件广播-event-broadcasting&#34;&gt;WebSockets / 事件广播 (Event Broadcasting)&lt;/h3&gt;
&lt;p&gt;事件广播在之前版本的 Laravel 中已经存在，Laravel 5.3 现支持对私有和已存在的 WebSocket 频道添加频道级认证：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/*
 * Authenticate the channel subscription...
 */
Broadcast::channel(&#39;orders.*&#39;, function ($user, $orderId) {
    return $user-&amp;gt;placedOrder($orderId);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Laravel Echo 是一个可通过 NPM 安装的全新的 JavaScript 包，会随 Laravel 5.3 一起发布。Echo 提供了简单、优雅的 API 接口，支持你在 JavaScript 客户端应用中，订阅频道和监听服务器端事件。&lt;/p&gt;
&lt;p&gt;Echo 提供的支持包括 &lt;a href=&#34;https://pusher.com&#34;&gt;Pusher&lt;/a&gt; 以及 &lt;a href=&#34;http://socket.io&#34;&gt;Socket.io&lt;/a&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Echo.channel(&#39;orders.&#39; + orderId)
    .listen(&#39;ShippingStatusUpdated&#39;, (e) =&amp;gt; {
        console.log(e.description);
    });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;除了订阅到传统频道上，Laravel Echo 也让频道的监听与管理变得更加简单：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Echo.join(&#39;chat.&#39; + roomId)
    .here((users) =&amp;gt; {
        //
    })
    .joining((user) =&amp;gt; {
        console.log(user.name);
    })
    .leaving((user) =&amp;gt; {
        console.log(user.name);
    });
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;了解更多关于 Echo 和事件广播(event broadcasting)的信息，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-broadcasting&#34;&gt;完整文档&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&#34;laravel-passport-oauth2-认证服务&#34;&gt;Laravel Passport (OAuth2 认证服务)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此功能的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/13&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laravel 5.3 的 Passport 让 API 认证变得简单。Laravel Passport 可以让你在几分钟内为应用程序创建一个完整的 OAuth2 认证服务，Passport 基于 Alex Bilbie 的 &lt;a href=&#34;https://github.com/thephpleague/oauth2-server&#34;&gt;League OAuth2 server&lt;/a&gt; 实现。&lt;/p&gt;
&lt;p&gt;Passport 让发放 OAuth2 令牌（Access Token）变得轻松，你还可以允许用户通过 Web 界面创建 &lt;code&gt;个人访问令牌 (personal access tokens)&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;为了方便提高开发效率，Passport 内置了一个 Vue 组件，该组件提供了 OAuth2 后台界面功能，允许用户创建客户端、撤销访问令牌，以及更多其他功能：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;passport-clients&amp;gt;&amp;lt;/passport-clients&amp;gt;
&amp;lt;passport-authorized-clients&amp;gt;&amp;lt;/passport-authorized-clients&amp;gt;
&amp;lt;passport-personal-access-tokens&amp;gt;&amp;lt;/passport-personal-access-tokens&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果你不想使用 Vue 组件，你可以自由的定制用于管理客户端和访问令牌(access tokens)的前端及后台。Passport 提供了一个简单的 JSON API，你可以在前端使用任何 JavaScript 框架与之集成。&lt;/p&gt;
&lt;p&gt;当然，Passport 还提供了方便的 API 让你定制「Token 访问域 (access token scopes)」：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Passport::tokensCan([
    &#39;place-orders&#39; =&amp;gt; &#39;Place new orders&#39;,
    &#39;check-status&#39; =&amp;gt; &#39;Check order status&#39;,
]);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;此外，Passport 还包含了一个用于检查「Token 访问域 (access token scopes)」访问权限的中间件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Route::get(&#39;/orders/{order}/status&#39;, function (Order $order) {
    // Access token has &amp;quot;check-status&amp;quot; scope...
})-&amp;gt;middleware(&#39;scope:check-status&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后，Passport 还支持从 JavaScript 应用访问你的 API，而不必担心访问令牌传输。&lt;/p&gt;
&lt;p&gt;Passport 通过加密 JWT cookies 和同步「CSRF 令牌」来实现此功能，让你专注于业务开发。&lt;/p&gt;
&lt;p&gt;更多关于 Passport 信息，请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-passport&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;搜索系统-laravel-scout&#34;&gt;搜索系统 (Laravel Scout)&lt;/h3&gt;
&lt;p&gt;Laravel Scout 提供了一个简单的、基于驱动的、针对 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-eloquent&#34;&gt;Eloquent&lt;/a&gt; 模型的全文搜索解决方案。&lt;/p&gt;
&lt;p&gt;通过模型观察者(model observers)，Scout 会自动同步更新 Eloquent 的搜索索引，目前，Scout使用 &lt;a href=&#34;https://www.algolia.com/&#34;&gt;Algolia&lt;/a&gt; 驱动，你可以自由的编写自己驱动来扩展 Scout。&lt;/p&gt;
&lt;p&gt;你只需要添加 &lt;code&gt;Searchable trait&lt;/code&gt; 到模型中，就能让模型支持搜索：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

namespace App;

use Laravel\Scout\Searchable;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use Searchable;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在你在模型中添加 trait 以后，数据会在 &lt;code&gt;save&lt;/code&gt; 的时候自动保持同步：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$order = new Order;

// ...

$order-&amp;gt;save();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在模型被成功索引以后，可以很轻松的使用全文搜索，你甚至可以为索引的结果进行分页操作：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;return Order::search(&#39;Star Trek&#39;)-&amp;gt;get();

return Order::search(&#39;Star Trek&#39;)-&amp;gt;where(&#39;user_id&#39;, 1)-&amp;gt;paginate();
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多 Scout 功能，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-scout&#34;&gt;Scout 的完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;mailable-对象-mailable-objects&#34;&gt;Mailable 对象 (Mailable Objects)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此功能的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/6&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laravel 5.3 Mailable 是一个崭新的 Mail 操作类，通过一种更加优雅的方式发送邮件，而不再需要在闭包中自定义邮件信息。&lt;/p&gt;
&lt;p&gt;例如，定义一个简单的邮寄对象用作发送欢迎邮件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class WelcomeMessage extends Mailable
{
    use Queueable, SerializesModels;

    /**
     * Build the message.
     *
     * @return $this
     */
    public function build()
    {
        return $this-&amp;gt;view(&#39;emails.welcome&#39;);
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mailable 对象被创建以后，你可以使用一个简单、优雅的 API 将其发送给用户：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Mail::to($user)-&amp;gt;send(new WelcomeMessage);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Mailable 还支持队列操作，只需要在类声明里实现 &lt;code&gt;ShouldQueue&lt;/code&gt; 即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;class WelcomeMessage extends Mailable implements ShouldQueue
{
    //
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多关于 Mailable 的信息，请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-mail&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;存储上传文件-storing-uploaded-files&#34;&gt;存储上传文件 (Storing Uploaded Files)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此功能的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/12&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;存储用户上传文件，在 Web 开发中是一个很常见的任务。Laravel 5.3 提供了一个便捷的 &lt;code&gt;store&lt;/code&gt; 方法，只需要对上传文件对象调用此方法，并传参准备存储的路径即可：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * Update the avatar for the user.
 *
 * @param  Request  $request
 * @return Response
 */
public function update(Request $request)
{
    $path = $request-&amp;gt;file(&#39;avatar&#39;)-&amp;gt;store(&#39;avatars&#39;, &#39;s3&#39;);

    return $path;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多上传文件信息，请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-filesystem#file-uploads&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;webpack--laravel-elixir&#34;&gt;Webpack &amp;amp; Laravel Elixir&lt;/h3&gt;
&lt;p&gt;Laravel Elixir 6.0 与 Laravel 5.3 共同发布，内置了 Webpack 和 Rollup JavaScript。&lt;/p&gt;
&lt;p&gt;默认情况下，Laravel 5.3 的 &lt;code&gt;gulpfile.js&lt;/code&gt; 使用 Webpack 来编译你的 JavaScript 文件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;elixir(mix =&amp;gt; {
    mix.sass(&#39;app.scss&#39;)
       .webpack(&#39;app.js&#39;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;完整文档请见 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-elixir&#34;&gt;Laravel Elixir&lt;/a&gt; 。&lt;/p&gt;
&lt;h3 id=&#34;前端架构-frontend-structure&#34;&gt;前端架构 (Frontend Structure)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此功能的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5-3/episodes/4&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Laravel 5.3 提供了一个更加现代的前端架构。这主要会影响 &lt;code&gt;make:auth&lt;/code&gt; 命令生成认证相关的前端脚手架(scaffolding)代码，不再从 CDN 中加载前端资源，所有依赖被定义在默认的 package.json 文件中，你可以自行修改。&lt;/p&gt;
&lt;p&gt;此外，支持单文件的 &lt;a href=&#34;https://vuejs.org&#34;&gt;Vue 组件&lt;/a&gt; 现在直接开箱即用， &lt;code&gt;resources/assets/js/components&lt;/code&gt; 目录下包含了一个简单的示例 &lt;code&gt;Example.vue&lt;/code&gt;，新的 &lt;code&gt;resources/assets/js/app.js&lt;/code&gt; 用来配置 JavaScript 类库依赖和 Vue 子模块。&lt;/p&gt;
&lt;p&gt;这种架构对开始开发现代的、强大的 JavaScript 应用提供了更好的支持，而不需要要求应用使用任何特定 JavaScript 或者 CSS 框架。&lt;/p&gt;
&lt;p&gt;更多信息，请查看对应文档 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-frontend&#34;&gt;前端文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;路由文件-routes-files&#34;&gt;路由文件 (Routes Files)&lt;/h3&gt;
&lt;p&gt;默认情况下，新安装的 Laravel 5.3 应用在新的顶级目录 &lt;code&gt;routes&lt;/code&gt; 下包含了 &lt;code&gt;web.php&lt;/code&gt; 和 &lt;code&gt;api.php&lt;/code&gt; 两个 &lt;code&gt;HTTP&lt;/code&gt; 路由文件，你也可以按照此方法自行扩展。&lt;/p&gt;
&lt;p&gt;API 相关的路由在 &lt;code&gt;RouteServiceProvider&lt;/code&gt; 中指定了自动添加 &lt;code&gt;api&lt;/code&gt; 前缀。&lt;/p&gt;
&lt;h3 id=&#34;闭包控制台命令-closure-console-commands&#34;&gt;闭包控制台命令 (Closure Console Commands)&lt;/h3&gt;
&lt;p&gt;除了通过命令类定义之外，Artisan 命令现支持在 &lt;code&gt;app/Console/Kernel.php&lt;/code&gt; 文件中使用简单闭包的方式定义。&lt;/p&gt;
&lt;p&gt;在新安装的 Laravel 5.3 应用中，&lt;code&gt;commands&lt;/code&gt; 方法会加载 &lt;code&gt;routes/console.php&lt;/code&gt; 文件，从而允许你基于闭包、以路由风格定义控制台命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Artisan::command(&#39;build {project}&#39;, function ($project) {
    $this-&amp;gt;info(&#39;Building project...&#39;);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多信息请参见 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-artisan#closure-commands&#34;&gt;Artisan 文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;blade-中的-loop-变量-the-loop-variable&#34;&gt;Blade 中的 &lt;code&gt;$loop&lt;/code&gt; 变量 (The &lt;code&gt;$loop&lt;/code&gt; Variable)&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;{video} Laracasts 上关于此功能的免费视频 &lt;a href=&#34;https://laracasts.com/series/whats-new-in-laravel-5.3/episodes/7&#34;&gt;video tutorial&lt;/a&gt;。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;当我们在 Blade 模板中循环遍历的时候，&lt;code&gt;$loop&lt;/code&gt; 魔术变量将会在循环中生效。通过该变量可以访问很多有用的信息，比如当前循环索引值，以及当前循环是第一个还是最后一个：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;@foreach ($users as $user)
    @if ($loop-&amp;gt;first)
        This is the first iteration.
    @endif

    @if ($loop-&amp;gt;last)
        This is the last iteration.
    @endif

    &amp;lt;p&amp;gt;This is user {{ $user-&amp;gt;id }}&amp;lt;/p&amp;gt;
@endforeach
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多信息请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-blade#the-loop-variable&#34;&gt;Blade 文档&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;laravel-5.2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-52&#34;&gt;Laravel 5.2&lt;/h2&gt;
&lt;p&gt;Laravel 5.2 在 Laravel 5.1 的基础上进行了优化，新特性包括以下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持更多样的用户认证驱动；&lt;/li&gt;
&lt;li&gt;隐式数据模型绑定；&lt;/li&gt;
&lt;li&gt;简化 Eloquent 全局作用域；&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;/ul&gt;
&lt;h3 id=&#34;用户认证驱动--多认证系统-multi-auth&#34;&gt;用户认证驱动 / &amp;ldquo;多认证系统 (Multi-Auth)&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;在之前的 Laravel 版本中，框架只支持默认的、基于 session 的认证驱动，且在单个应用中只能拥有一个认证模型类。&lt;/p&gt;
&lt;p&gt;Laravel 5.2 对此进行了改进，你可以定义多个认证驱动，还支持多个可认证的数据模型以及用户表，并且可以独立控制其认证。&lt;/p&gt;
&lt;p&gt;例如，如果你的应用中有一张「admin」数据库用户表，一张「student」数据库用户表（一个后台管理员用户表和一个前台学生用户表），现在你可以使用  &lt;code&gt;Auth&lt;/code&gt; 方法来实现后台用户和学生用户的独立登录而不相互影响。&lt;/p&gt;
&lt;h3 id=&#34;用户认证脚手架-authentication-scaffolding&#34;&gt;用户认证脚手架 (Authentication Scaffolding)&lt;/h3&gt;
&lt;p&gt;此前 Laravel 后端认证处理已经是相当容易了，现在 Laravel 5.2 提供了一个更加便捷、快速的方法来创建前台认证视图，只需要简单的在终端执行 &lt;code&gt;make:auth&lt;/code&gt; 命令即可。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php artisan make:auth
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;该命令会生成纯文本的、兼容 Bootstrap 样式的视图用于登录、注册和密码重置。该命令还会顺带在路由文件中增加对应的授权路由。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;{note} 该功能特性只能用于新创建的应用，不能用于升级后的应用。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;隐式模型绑定-implicit-model-binding&#34;&gt;隐式模型绑定 (Implicit Model Binding)&lt;/h3&gt;
&lt;p&gt;隐式模型绑定使得在路由和控制器中注入模型实例更加便捷。例如，假设你定义了一个如下的路由：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;use App\User;

Route::get(&#39;/user/{user}&#39;, function (User $user) {
    return $user;
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 Laravel 5.1 中，你通常需要通过 &lt;code&gt;Route::model&lt;/code&gt; 方法告诉 Laravel 注入 &lt;code&gt;App\User&lt;/code&gt; 实例以匹配路由定义中的 &lt;code&gt;{user}&lt;/code&gt; 参数。&lt;/p&gt;
&lt;p&gt;现在，在 Laravel 5.2 中，框架将会基于相应 URI 判断 &lt;strong&gt;自动&lt;/strong&gt; 注入模型，从而允许你快速访问需要的模型实例。&lt;/p&gt;
&lt;p&gt;如路由参数片段 &lt;code&gt;{user}&lt;/code&gt; 匹配到 &lt;code&gt;路由闭包&lt;/code&gt; 或 &lt;code&gt;控制器方法&lt;/code&gt; 中对应参数 &lt;code&gt;$user&lt;/code&gt;，且类型提示为 Eloquent 数据模型的话，Laravel 将会自动注入该模型。&lt;/p&gt;
&lt;p&gt;更多隐式模型绑定信息，请查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-routing#Route-Model-Binding&#34;&gt;HTTP 路由模型绑定部分&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;中间件群组-middleware-groups&#34;&gt;中间件群组 (Middleware Groups)&lt;/h3&gt;
&lt;p&gt;中间件群组允许你将多个路由中间件组织到单一、方便的键 （即群组名称）下面，从而可以为某个路由一次指派多个中间件。例如，在同一个应用中构建 Web UI 或 API 时，这一特性很有用。例如，你可以將 session 及 CSRF 路由組合成一個 &lt;code&gt;web&lt;/code&gt; 群組，并将访问频率限制分组到 &lt;code&gt;api&lt;/code&gt;群组。&lt;/p&gt;
&lt;p&gt;实际上，默认的 Laravel 5.2 应用结构采用的正是这种方法。例如，在默认的 &lt;code&gt;App\Http\Kernel.php&lt;/code&gt;  文件中你会看到如下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * The application&#39;s route middleware groups.
 *
 * @var array
 */
protected $middlewareGroups = [
    &#39;web&#39; =&amp;gt; [
        \App\Http\Middleware\EncryptCookies::class,
        \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
        \Illuminate\Session\Middleware\StartSession::class,
        \Illuminate\View\Middleware\ShareErrorsFromSession::class,
        \App\Http\Middleware\VerifyCsrfToken::class,
    ],

    &#39;api&#39; =&amp;gt; [
        &#39;throttle:60,1&#39;,
    ],
];
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后，&lt;code&gt;web&lt;/code&gt; 组可以这样指定给路由：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Route::group([&#39;middleware&#39; =&amp;gt; [&#39;web&#39;]], function () {
    //
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;默认的，所有的 &lt;code&gt;app/Http/routes.php&lt;/code&gt; 中的路由 &lt;strong&gt;已经&lt;/strong&gt; 在 &lt;code&gt;RouteServiceProvider&lt;/code&gt; 的 &lt;code&gt;mapWebRoutes&lt;/code&gt; 方法中指定了 &lt;code&gt;web&lt;/code&gt; 中间件组，所以你不必重复指定。&lt;/p&gt;
&lt;h3 id=&#34;访问频率限制-rate-limiting&#34;&gt;访问频率限制 (Rate Limiting)&lt;/h3&gt;
&lt;p&gt;框架现在内置了一个新的访问频率限制中间件，允许你轻松控制给定 IP 地址在指定时间内对某个路由发起请求的数目。&lt;/p&gt;
&lt;p&gt;例如，要限制某个 IP 地址每分钟只能访问某个路由 60 次，你可以这么做：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Route::get(&#39;/api/users&#39;, [&#39;middleware&#39; =&amp;gt; &#39;throttle:60,1&#39;, function () {
    //
}]);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;数组输入验证-array-validation&#34;&gt;数组输入验证 (Array Validation)&lt;/h3&gt;
&lt;p&gt;在 Laravel 5.2 中，可轻松验证表单中的每一个数组输入字段。例如，要验证指定数组输入字段中每一个 email 是否唯一，可以这么实现：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$validator = Validator::make($request-&amp;gt;all(), [
    &#39;person.*.email&#39; =&amp;gt; &#39;email|unique:users&#39;
]);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;同样的，你可以使用「 *」 符号来指定要验证数组字段，自定义验证数组字段的错误消息提醒：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&#39;custom&#39; =&amp;gt; [
    &#39;person.*.email&#39; =&amp;gt; [
        &#39;unique&#39; =&amp;gt; &#39;Each person must have a unique e-mail address&#39;,
    ]
],
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;bail-认证规则-bail-validation-rule&#34;&gt;Bail 认证规则 (Bail Validation Rule)&lt;/h3&gt;
&lt;p&gt;Laravel 5.2 新添加了一个 &lt;code&gt;bail&lt;/code&gt; 认证规则，此规则会在第一个失败认证后停止后面的其他认证检查。例如：你想在 &lt;code&gt;integer&lt;/code&gt; 数值检查失败后停止对 &lt;code&gt;unique&lt;/code&gt; 唯一性的检查：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$this-&amp;gt;validate($request, [
    &#39;user_id&#39; =&amp;gt; &#39;bail|integer|unique:users&#39;
]);
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;eloquent-全局作用域优化-eloquent-global-scope-improvements&#34;&gt;Eloquent 全局作用域优化 (Eloquent Global Scope Improvements)&lt;/h3&gt;
&lt;p&gt;在之前的 Laravel 版本，Eloquent 全局作用域的实现是复杂且容易出错的，但在 Laravel 5.2 中，全局查询作用域只需实现一个简单的方法 &lt;code&gt;apply&lt;/code&gt; 即可。&lt;/p&gt;
&lt;p&gt;更多关于全局作用域(global scopes)的信息请查阅完整的 &lt;a href=&#34;https://www.laravel.com/docs/5.2/eloquent#global-scopes&#34;&gt;Eloquent 文件&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;laravel-5.1&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-51&#34;&gt;Laravel 5.1&lt;/h2&gt;
&lt;p&gt;Laravel 5.1 由 Laravel 5.0 改进而成，变更包括但是不限于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;采用 PSR-2 规范&lt;/li&gt;
&lt;li&gt;支持添加事件广播&lt;/li&gt;
&lt;li&gt;中间件参数&lt;/li&gt;
&lt;li&gt;Artisan 的改进等等。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;php-559&#34;&gt;PHP 5.5.9+&lt;/h3&gt;
&lt;p&gt;由于 PHP 5.4 将在九月「结束寿命」，PHP 开发团队不再提供安全性更新，所以 Laravel 要求 PHP 5.5.9 或更高的版本。&lt;/p&gt;
&lt;p&gt;PHP 5.5.9 同时也是最新版本的 PHP 函数库，像是 Guzzle 及 AWS SDK 需要的最小版本需要。&lt;/p&gt;
&lt;h3 id=&#34;lts&#34;&gt;LTS&lt;/h3&gt;
&lt;p&gt;Laravel 5.1 是 Laravel 生态系统中第一个 &lt;strong&gt;长期支持&lt;/strong&gt; 版本。Laravel 5.1 会获得两年的 BUG 修复及三年的安全性修复，此策略也使 Laravel 能更好的服务于较大型的企业客户及消费者。&lt;/p&gt;
&lt;h3 id=&#34;psr-2&#34;&gt;PSR-2&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://phphub.org/topics/2079&#34;&gt;PSR-2 代码风格指南&lt;/a&gt; 已经被 Laravel 框架采用为默认的代码风格指南。此外，所有的生成器都已进行更新，生成的文件将兼容 PSR-2 规范。&lt;/p&gt;
&lt;h3 id=&#34;文档-documentation&#34;&gt;文档 (Documentation)&lt;/h3&gt;
&lt;p&gt;Laravel 文档的每一页已被精心审阅，并得到显著的改善。所有的代码例子也进行了严密检查，使其有更高的上下文关联性。&lt;/p&gt;
&lt;h3 id=&#34;事件广播-event-broadcasting&#34;&gt;事件广播 (Event Broadcasting)&lt;/h3&gt;
&lt;p&gt;WebSockets 技术越来越多的被现代 Web 应用使用，当服务器上一些数据更新，WebSocket 会实时发送一个消息给客户端，实现即时更新用户状态功能。&lt;/p&gt;
&lt;p&gt;Laravel 的事件广播机制很好的支持了此类应用的开发，广播事件允许服务器端代码和 JavaScript 框架间分享相同的事件名称。&lt;/p&gt;
&lt;p&gt;了解更多关于事件广播，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-events#broadcasting-events&#34;&gt;事件的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;中间件参数-middleware-parameters&#34;&gt;中间件参数 (Middleware Parameters)&lt;/h3&gt;
&lt;p&gt;中间件支持接收自定义传参，例如要在运行特定操作之前，检查当前登录的用户是否具备「某角色」，可以创建 &lt;code&gt;RoleMiddleware&lt;/code&gt; 来接收角色名称作为传参：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    /**
     * 运行请求过滤。
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string  $role
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (! $request-&amp;gt;user()-&amp;gt;hasRole($role)) {
            // 重定向...
        }

        return $next($request);
    }

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在路由中使用冒号 &lt;code&gt;:&lt;/code&gt; 来区隔中间件名称与参数，多个参数可使用逗号作为分隔：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Route::put(&#39;post/{id}&#39;, [&#39;middleware&#39; =&amp;gt; &#39;role:editor&#39;, function ($id) {
    //
}]);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关于中间件的更多信息，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-middleware&#34;&gt;中间件的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;测试改进-testing-overhaul&#34;&gt;测试改进 (Testing Overhaul)&lt;/h3&gt;
&lt;p&gt;Laravel 内置的测试功能已得到显著的改善，新版本提供了简明的接口与应用程序进行交互，响应检查也变得更加轻松。&lt;/p&gt;
&lt;p&gt;例如下方的测试：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function testNewUserRegistration()
{
    $this-&amp;gt;visit(&#39;/register&#39;)
         -&amp;gt;type(&#39;Taylor&#39;, &#39;name&#39;)
         -&amp;gt;check(&#39;terms&#39;)
         -&amp;gt;press(&#39;Register&#39;)
         -&amp;gt;seePageIs(&#39;/dashboard&#39;);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;关于测试的更多信息，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-testing&#34;&gt;测试的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;模型工厂-model-factories&#34;&gt;模型工厂 (Model Factories)&lt;/h3&gt;
&lt;p&gt;Laravel 的 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-testing#model-factories&#34;&gt;模型工厂&lt;/a&gt; 提供一种简单的方式来创建仿真 Eloquent 模型。&lt;/p&gt;
&lt;p&gt;在为 Eloquent 模型定义一组「默认」填充字段后，即可为测试，或者数据填充生成测试模型实例。&lt;/p&gt;
&lt;p&gt;另外，模型工厂支持使用 &lt;a href=&#34;https://github.com/fzaninotto/Faker&#34;&gt;Faker&lt;/a&gt; 来生成随机数据：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$factory-&amp;gt;define(App\User::class, function ($faker) {
    return [
        &#39;name&#39; =&amp;gt; $faker-&amp;gt;name,
        &#39;email&#39; =&amp;gt; $faker-&amp;gt;email,
        &#39;password&#39; =&amp;gt; str_random(10),
        &#39;remember_token&#39; =&amp;gt; str_random(10),
    ];
});
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多关于模型工厂的信息，请查阅 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-testing#model-factories&#34;&gt;它的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;artisan-的改进-artisan-improvements&#34;&gt;Artisan 的改进 (Artisan Improvements)&lt;/h3&gt;
&lt;p&gt;Artisan 命令现支持类似于命名路由的定义，以简单易懂的形式来定义命令行的参数及选项。&lt;/p&gt;
&lt;p&gt;举个例子，你可以定义一个简单的命令及它的参数和选项，如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/**
 * 命令行的名字及署名。
 *
 * @var string
 */
protected $signature = &#39;email:send {user} {--force}&#39;;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多关于定义 Artisan 命令的消息，请参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-artisan&#34;&gt;Artisan 的文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;文件夹结构-folder-structure&#34;&gt;文件夹结构 (Folder Structure)&lt;/h3&gt;
&lt;p&gt;为了更方便理解，&lt;code&gt;app/Commands&lt;/code&gt; 目录已经被更名为 &lt;code&gt;app/Jobs&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;此外，&lt;code&gt;app/Handler&lt;/code&gt; 目录已经被合并成一个只包含事件侦听器的 &lt;code&gt;app/Listeners&lt;/code&gt; 目录中。&lt;/p&gt;
&lt;p&gt;这不是一个重大的改变，你不必更新成新的文件夹结构也能使用 Laravel 5.1。&lt;/p&gt;
&lt;h3 id=&#34;加密-encryption&#34;&gt;加密 (Encryption)&lt;/h3&gt;
&lt;p&gt;在 Laravel 之前的版本，加密是通过 &lt;code&gt;mcrypt&lt;/code&gt; PHP 扩展进行处理。不过，从 Laravel 5.1 起，加密将采用更积极维护的 &lt;code&gt;openssl&lt;/code&gt; 扩展进行处理。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;laravel-5.0&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-50&#34;&gt;Laravel 5.0&lt;/h2&gt;
&lt;p&gt;Laravel 5.0 引进了新的应用程序架构。新架构允许 Laravel 创建更加健壮的应用程序，新架构全面采用新的自动加载标准（PSR-4）。&lt;/p&gt;
&lt;p&gt;以下是一些主要变化：&lt;/p&gt;
&lt;h3 id=&#34;新的目录结构-new-folder-structure&#34;&gt;新的目录结构 (New Folder Structure)&lt;/h3&gt;
&lt;p&gt;旧的 &lt;code&gt;app/models&lt;/code&gt; 目录已经完全被移除。对应的，你所有的代码都放在 &lt;code&gt;app&lt;/code&gt; 目录下。&lt;/p&gt;
&lt;p&gt;默认情况下使用 &lt;code&gt;App&lt;/code&gt; 命名空间。可以使用 &lt;code&gt;app:name&lt;/code&gt; Artisan 命令对默认命名空间进行修改。&lt;/p&gt;
&lt;p&gt;控制器、中间件，以及表单请求（Laravel 5.0 中新型态的类），分门别类的放在 &lt;code&gt;app/Http&lt;/code&gt; 目录下，因为他们都与应用程序的 HTTP 传输层相关。除了一个路由设置的文件外，所有中间件现都分开为独自的类文件。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;app/Providers&lt;/code&gt; 目录取代了旧版 Laravel 4.x &lt;code&gt;app/start&lt;/code&gt; 里的文件。这些服务提供者为应用程序提供了各种引导功能，像是错误处理，日志纪录，路由加载等等。当然，你可以任意的创建新的服务提供者。&lt;/p&gt;
&lt;p&gt;应用程序的语言文件和视图都被移到 &lt;code&gt;resources&lt;/code&gt; 目录下。&lt;/p&gt;
&lt;h3 id=&#34;契约-contracts&#34;&gt;契约 (Contracts)&lt;/h3&gt;
&lt;p&gt;所有 Laravel 组件实现所用的接口都放在 &lt;code&gt;illuminate/contracts&lt;/code&gt; 文件夹中，他们没有其他依赖。这些方便集成的接口，让依赖注入变得低耦合，可简单作为 Laravel Facades 的替代选项。&lt;/p&gt;
&lt;p&gt;更多关于 contracts 的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-contracts&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;路由缓存-route-cache&#34;&gt;路由缓存 (Route Cache)&lt;/h3&gt;
&lt;p&gt;如果你的应用程序全部使用控制器路由，新的 &lt;code&gt;route:cache&lt;/code&gt; Artisan 命令可大幅度地优化路由注册寻找速度。&lt;/p&gt;
&lt;p&gt;这对于拥有 100 个以上路由规则的应用程序来说很有用，可以 &lt;strong&gt;大幅度地&lt;/strong&gt; 加快应用程序路由部分的处理速度。&lt;/p&gt;
&lt;h3 id=&#34;路由中间件-route-middleware&#34;&gt;路由中间件 (Route Middleware)&lt;/h3&gt;
&lt;p&gt;除了像 Laravel 4 风格的路由「过滤器」，Laravel 5 现在有 HTTP 中间件，而原本的认证和 CSRF 「过滤器」已经改写成中间件。中间件提供了单个、一致的接口取代了各种过滤器，让你在请求进到应用程序前，可以简单地检查甚至拒绝请求。&lt;/p&gt;
&lt;p&gt;更多关于中间件的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-middleware&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;控制器方法注入-controller-method-injection&#34;&gt;控制器方法注入 (Controller Method Injection)&lt;/h3&gt;
&lt;p&gt;除了之前有的类的构造函数注入外，你现在可以在控制器方法中使用依赖注入。&lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-container&#34;&gt;服务容器&lt;/a&gt; 会自动注入依赖，即使路由包含了其它参数也不成问题：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function createPost(Request $request, PostRepository $posts)
{
    //
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;认证基本架构-authentication-scaffolding&#34;&gt;认证基本架构 (Authentication Scaffolding)&lt;/h3&gt;
&lt;p&gt;认证系统默认包含了用户注册，认证，以及重设密码的控制器，还有对应的视图，视图文件存放在 &lt;code&gt;resources/views/auth&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;除此之外，「users」数据表迁移也默认包含在框架中。这些简单的资源，可以让你把心思放在产品开发上，而不用陷在编写认证模板的泥潭。&lt;/p&gt;
&lt;p&gt;认证相关的视图可以通过 &lt;code&gt;auth/login&lt;/code&gt; 以及 &lt;code&gt;auth/register&lt;/code&gt; 路由访问。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;App\Services\Auth\Registrar&lt;/code&gt; 会负责处理用户认证和注册用户的相关逻辑。&lt;/p&gt;
&lt;h3 id=&#34;事件对象-event-objects&#34;&gt;事件对象 (Event Objects)&lt;/h3&gt;
&lt;p&gt;你现在可以将事件定义成对象，而不是仅使用字符串。例：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

class PodcastWasPurchased
{
    public $podcast;

    public function __construct(Podcast $podcast)
    {
        $this-&amp;gt;podcast = $podcast;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个事件可以像一般使用那样被派发：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Event::fire(new PodcastWasPurchased($podcast));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，你的事件处理会收到事件的对象而不是数据的列表：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

class ReportPodcastPurchase
{
    public function handle(PodcastWasPurchased $event)
    {
        //
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多关于使用事件的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-events&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;命令及队列-commands--queueing&#34;&gt;命令及队列 (Commands / Queueing)&lt;/h3&gt;
&lt;p&gt;除了 Laravel 4 形式的队列任务，Laravel 5 还支持命令对象直接作为队列任务。这些命令放在 &lt;code&gt;app/Commands&lt;/code&gt; 目录下。下面是个例子的命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

class PurchasePodcast extends Command implements SelfHandling, ShouldBeQueued
{

    use SerializesModels;

    protected $user, $podcast;

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct(User $user, Podcast $podcast)
    {
        $this-&amp;gt;user = $user;
        $this-&amp;gt;podcast = $podcast;
    }

    /**
     * Execute the command.
     *
     * @return void
     */
    public function handle()
    {
        // Handle the logic to purchase the podcast...
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Laravel 的基底控制器使用了新的 &lt;code&gt;DispatchesCommands&lt;/code&gt; trait，让你可以简单的派发命令运行：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$this-&amp;gt;dispatch(new PurchasePodcastCommand($user, $podcast));
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，你也可以将命令视为同步运行（而不会被放到队列里）的任务。事实上，「命令总线」是个不错的设计模式，可以封装应用程序需要运行的复杂任务。更多相关的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-bus&#34;&gt;command bus&lt;/a&gt; 文档。&lt;/p&gt;
&lt;h3 id=&#34;数据库队列-database-queue&#34;&gt;数据库队列 (Database Queue)&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;database&lt;/code&gt; 队列驱动现在已经包含在 Laravel 中了，提供了简单的本地端队列驱动，除了数据库相关软件外不需安装其它扩展包，完全开箱即用。&lt;/p&gt;
&lt;h3 id=&#34;laravel-调度器-laravel-scheduler&#34;&gt;Laravel 调度器 (Laravel Scheduler)&lt;/h3&gt;
&lt;p&gt;在过去，开发者是在 crontab 里配置任务调度的。然而，这是件很头痛的事情，因为你的命令行调度不在版本控制中，并且必须登录到服务器里才能添加新的 Cron 设置。&lt;/p&gt;
&lt;p&gt;Laravel 命令行调度的存在，就是为了改变这一情况。&lt;/p&gt;
&lt;p&gt;命令行调度系统让你在 Laravel 里定义富有表达性的命令调度，而且只需要在服务器里设置一个 Cron 设置即可。&lt;/p&gt;
&lt;p&gt;看起来如下：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$schedule-&amp;gt;command(&#39;artisan:command&#39;)-&amp;gt;dailyAt(&#39;15:00&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-artisan#scheduling-artisan-commands&#34;&gt;完整文档&lt;/a&gt; 学习所有调度相关知识。&lt;/p&gt;
&lt;h3 id=&#34;tinker--psysh&#34;&gt;Tinker / Psysh&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;php artisan tinker&lt;/code&gt; 命令现在使用 Justin Hileman 的 &lt;a href=&#34;https://github.com/bobthecow/psysh&#34;&gt;Psysh&lt;/a&gt;，一个 PHP 更强大的 REPL。如果你喜欢 Laravel 4 的 Boris，你也会喜欢上 Psysh。更好的是，它可以在 Windows 上运行！&lt;/p&gt;
&lt;p&gt;赶快尝试下吧：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;php artisan tinker
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;dotenv&#34;&gt;DotEnv&lt;/h3&gt;
&lt;p&gt;比起一堆令人困惑的、嵌套的环境配置文件，Laravel 5 现在使用了 Vance Lucas 的 &lt;a href=&#34;https://github.com/vlucas/phpdotenv&#34;&gt;DotEnv&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;这个扩展包提供了超级简单的方式管理配置文件，并且让 Laravel 5 环境侦测变得轻松。更多的细节，参考完整的 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-configuration#environment-configuration&#34;&gt;配置文件文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;laravel-elixir&#34;&gt;Laravel Elixir&lt;/h3&gt;
&lt;p&gt;Jeffrey Way 的 Laravel Elixir 提供了一个流畅、口语化的接口，可以编译以及合并静态资源。如果你曾经因为学习 Grunt 或 Gulp 而被吓到，不必再害怕了。Elixir 让使用 Gulp 编译 Less、Sass 及 CoffeeScript 变得简单。它甚至可以帮你运行测试！&lt;/p&gt;
&lt;p&gt;更多关于 Elixir 的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-elixir&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;laravel-socialite&#34;&gt;Laravel Socialite&lt;/h3&gt;
&lt;p&gt;Laravel Socialite 是可选的，兼容 Laravel 5.0 以上的 OAuth 认证扩展包。目前 Socialite 支持 Facebook、Twitter、Google 以及 GitHub。它写起来是这样的：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function redirectForAuth()
{
    return Socialize::with(&#39;twitter&#39;)-&amp;gt;redirect();
}

public function getUserFromProvider()
{
    $user = Socialize::with(&#39;twitter&#39;)-&amp;gt;user();
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;不再需要花上数小时编写 OAuth 的认证流程，只要几分钟！查看 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-authentication#social-authentication&#34;&gt;完整文档&lt;/a&gt; 里有所有的细节。&lt;/p&gt;
&lt;h3 id=&#34;文件系统集成-flysystem-integration&#34;&gt;文件系统集成 (Flysystem Integration)&lt;/h3&gt;
&lt;p&gt;Laravel 现在包含了强大的 &lt;a href=&#34;https://github.com/thephpleague/flysystem&#34;&gt;Flysystem 文件系统&lt;/a&gt;（一个文件系统的抽象函数库）。&lt;/p&gt;
&lt;p&gt;文件系统以抽象的概念，把本地端文件系统、Amazon S3 和 Rackspace 云存储集成在一起，统一且优雅的 API！&lt;/p&gt;
&lt;p&gt;现在要将文件存到 Amazon S3 相当简单：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Storage::put(&#39;file.txt&#39;, &#39;contents&#39;);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多关于 Laravel 文件系统集成，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-filesystem&#34;&gt;完整文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;表单请求-form-requests&#34;&gt;表单请求 (Form Requests)&lt;/h3&gt;
&lt;p&gt;Laravel 5.0 引进了 &lt;strong&gt;form requests&lt;/strong&gt;，是继承自 &lt;code&gt;Illuminate\Foundation\Http\FormRequest&lt;/code&gt; 的类。这些 request 对象可以和控制器方法依赖注入结合使用，提供一个不需模版的方法，来验证用户输入。让我们深入点，看一个 &lt;code&gt;FormRequest&lt;/code&gt; 的例子：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php

namespace App\Http\Requests;

class RegisterRequest extends FormRequest
{
    public function rules()
    {
        return [
            &#39;email&#39; =&amp;gt; &#39;required|email|unique:users&#39;,
            &#39;password&#39; =&amp;gt; &#39;required|confirmed|min:8&#39;,
        ];
    }

    public function authorize()
    {
        return true;
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;定义好类后，我们可以在控制器动作里使用类型提示进行依赖注入：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function register(RegisterRequest $request)
{
    var_dump($request-&amp;gt;input());
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当 Laravel 的服务容器辨别出要注入的类是个 &lt;code&gt;FormRequest&lt;/code&gt; 实例，该请求将会被 &lt;strong&gt;自动验证&lt;/strong&gt;。意味着，框架会自动根据你在 form request 类里自定的规则，对请求进行检验。当控制器动作调用时，你可以安全的假设 HTTP 的请求输入己被验证过。&lt;/p&gt;
&lt;p&gt;甚至，若这个请求验证不通过，一个 HTTP 重定向（可以自定义），会自动发出，错误消息可以被闪存到 session 中或是转换成 JSON 返回。&lt;strong&gt;表单验证再简单不过了。&lt;/strong&gt; 更多关于 &lt;code&gt;FormRequest&lt;/code&gt; 验证，请参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-validation#form-request-validation&#34;&gt;文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;简易控制器请求验证-simple-controller-request-validation&#34;&gt;简易控制器请求验证 (Simple Controller Request Validation)&lt;/h3&gt;
&lt;p&gt;Laravel 5 基底控制器包含一个 &lt;code&gt;ValidatesRequests&lt;/code&gt; trait。这个 trait 包含了一个简单的 &lt;code&gt;validate&lt;/code&gt; 方法可以验证请求。如果对你的应用程序来说 &lt;code&gt;FormRequests&lt;/code&gt; 太复杂了，可以考虑使用手动验证方法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;public function createPost(Request $request)
{
    $this-&amp;gt;validate($request, [
        &#39;title&#39; =&amp;gt; &#39;required|max:255&#39;,
        &#39;body&#39; =&amp;gt; &#39;required&#39;,
    ]);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果验证失败，会抛出异常以及返回适当的 HTTP 响应到浏览器。验证错误信息会被闪存到 session 里！而如果请求是 AJAX 请求，Laravel 会自动返回 JSON 格式的验证错误信息。&lt;/p&gt;
&lt;p&gt;更多关于这个新方法的信息，参考 &lt;a href=&#34;https://www.bg7pbp.com/laravel-5.3-validation#controller-validation&#34;&gt;这个文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;新的生成器-new-generators&#34;&gt;新的生成器 (New Generators)&lt;/h3&gt;
&lt;p&gt;为了响应新的应用程序默认架构，框架新增了许多 Artisan generator 命令。使用 &lt;code&gt;php artisan list&lt;/code&gt; 查看完整的命令列表。&lt;/p&gt;
&lt;h3 id=&#34;配置文件缓存-configuration-cache&#34;&gt;配置文件缓存 (Configuration Cache)&lt;/h3&gt;
&lt;p&gt;你现在可以通过 &lt;code&gt;config:cache&lt;/code&gt; 命令将所有的配置文件缓存在单个文件中，这样在一定程度上会加快框架的启动效率。&lt;/p&gt;
&lt;h3 id=&#34;symfony-vardumper&#34;&gt;Symfony VarDumper&lt;/h3&gt;
&lt;p&gt;广为使用的 &lt;code&gt;dd&lt;/code&gt; 辅助函数，用作在调试时输出变量信息，现采用令人惊艳的 Symfony VarDumper 扩展包。它提供了颜色标记的输出，甚至数组可以自动缩合。在项目中试试下列代码：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;dd([1, 2, 3]);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a name=&#34;laravel-4.2&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-42&#34;&gt;Laravel 4.2&lt;/h2&gt;
&lt;p&gt;此发行版本的完整的变更列表可以通过运行 &lt;code&gt;php artisan changes&lt;/code&gt; 命令来获取，或者 &lt;a href=&#34;https://github.com/laravel/framework/blob/4.2/src/Illuminate/Foundation/changes.json&#34;&gt;Github 上的更动纪录&lt;/a&gt;。此纪录仅含括主要更新和此发行的更动部分。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;附注:&lt;/strong&gt; 在 4.2 开发期间，许多小的 BUG 修正与功能强化被整合至各个 4.1 的子发行版本中。所以，也请一并检查 Laravel 4.1 版本的更新列表。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;php-54-需求&#34;&gt;PHP 5.4 需求&lt;/h3&gt;
&lt;p&gt;Laravel 4.2 需要 PHP 5.4 以上的版本。此 PHP 更新版本让我们可以使用 PHP 的新功能：traits 来为像是 &lt;a href=&#34;https://www.bg7pbp.com/docs/billing&#34;&gt;Laravel 收银台&lt;/a&gt; 来提供更具表达力的接口。PHP 5.4 也比 PHP 5.3 带来显著的速度及性能提升。&lt;/p&gt;
&lt;h3 id=&#34;laravel-forge&#34;&gt;Laravel Forge&lt;/h3&gt;
&lt;p&gt;Larvel Forge，一个网页应用程序，提供一个简单的接口让你创建管理云端上的 PHP 服务器，像是 Linode、DigitalOcean、Rackspace 和 Amazon EC2。&lt;/p&gt;
&lt;p&gt;支持自动化 nginx 设置、SSH 密钥管理、Cron job 自动化、通过 NewRelic &amp;amp; Papertrail 服务器监控、「推送部署」、Laravel queue worker 设置等等。Forge 提供最简单且更实惠的方式来部署所有你的 Laravel 应用程序。&lt;/p&gt;
&lt;p&gt;默认 Laravel 4.2 的安装里，&lt;code&gt;app/config/database.php&lt;/code&gt; 配置文件已为 Forge 设置完成，让你更方便的完成新平台上的全新应用程序的部署。&lt;/p&gt;
&lt;p&gt;关于 Laravel Forge 的更多信息可以在 &lt;a href=&#34;https://forge.laravel.com&#34;&gt;官方 Forge 网站&lt;/a&gt; 上找到。&lt;/p&gt;
&lt;h3 id=&#34;laravel-homestead&#34;&gt;Laravel Homestead&lt;/h3&gt;
&lt;p&gt;Laravel Homestead 是一个健全的 Laravel 和 PHP 应用程序 Vagrant 环境。软件依赖都已提前准备好，可以极快的被启用。&lt;/p&gt;
&lt;p&gt;Homestead 包含 Nginx 1.6、PHP 5.5.12、MySQL、Postres、Redis、Memcached、Beanstalk、Node、Gulp、Grunt 和 Bower。Homestead 包含一个简单的 &lt;code&gt;Homestead.yaml&lt;/code&gt; 配置文件，允许你在单个封装包中管理多个 Laravel 应用程序。&lt;/p&gt;
&lt;p&gt;默认的 Laravel 4.2 安装中包含的 &lt;code&gt;app/config/local/database.php&lt;/code&gt; 配置文件已经为你配置好了 Homestead 的数据库连接。让 Laravel 初始化安装与设置更为方便。&lt;/p&gt;
&lt;p&gt;官方文档已经更新并包含在 &lt;a href=&#34;https://www.bg7pbp.com/docs/homestead&#34;&gt;Homestead 文档&lt;/a&gt; 中。&lt;/p&gt;
&lt;h3 id=&#34;laravel-收银台-laravel-cashier&#34;&gt;Laravel 收银台 (Laravel Cashier)&lt;/h3&gt;
&lt;p&gt;Laravel 收银台是一个简单、具表达性的资源库，用来管理 Stripe 的订阅服务。虽然安装此组件是可选的，我们仍然将收银台文档包含在主要 Laravel 文档中。新版本的收银台带来了数个错误修正、多货币支持还有支持了最新的 Stripe API。&lt;/p&gt;
&lt;h3 id=&#34;常驻程序-daemon-queue-workers&#34;&gt;常驻程序 (Daemon Queue Workers)&lt;/h3&gt;
&lt;p&gt;Artisan &lt;code&gt;queue:work&lt;/code&gt; 命令现在支持 &lt;code&gt;--daemon&lt;/code&gt; 参数让 worker 可以作为「常驻程序」启用。代表 worker 可以持续的处理队列工作，而不需要重启框架。这让一个复杂的应用程序对 CPU 的使用率有显著的降低。&lt;/p&gt;
&lt;p&gt;更多关于 Queue Workers 常驻程序信息请详阅 &lt;a href=&#34;https://www.bg7pbp.com/docs/queues#daemon-queue-worker&#34;&gt;queue 文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;mail-api-drivers&#34;&gt;Mail API Drivers&lt;/h3&gt;
&lt;p&gt;Laravel 4.2 为 &lt;code&gt;Mail&lt;/code&gt; 类采用了新的 Mailgun 和 Mandrill API 驱动。对许多应用程序而言，他提供了比 SMTP 更快也更可靠的方法来递送邮件。新的驱动使用了 Guzzle 4 HTTP 资源库。&lt;/p&gt;
&lt;h3 id=&#34;软删除-traits-soft-deleting-traits&#34;&gt;软删除 Traits (Soft Deleting Traits)&lt;/h3&gt;
&lt;p&gt;PHP 5.4 的 &lt;code&gt;traits&lt;/code&gt; 提供了一个更加简洁的软删除架构和全局作用域，这些新架构为框架提供了更有扩展性的功能，并且让框架更加简洁。&lt;/p&gt;
&lt;p&gt;更多关于软删除的文档请见: &lt;a href=&#34;https://www.bg7pbp.com/docs/eloquent#soft-deleting&#34;&gt;Eloquent documentation&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;convenient-auth--remindable-traits&#34;&gt;Convenient Auth &amp;amp; Remindable Traits&lt;/h3&gt;
&lt;p&gt;得益于 PHP 5.4 traits，我们有了一个更简洁的用户认证和密码提醒接口，这也让 &lt;code&gt;User&lt;/code&gt; 模型文档更加精简。&lt;/p&gt;
&lt;h3 id=&#34;简易分页-simple-paginate&#34;&gt;&amp;ldquo;简易分页 (Simple Paginate)&amp;rdquo;&lt;/h3&gt;
&lt;p&gt;一个新的 &lt;code&gt;simplePaginate&lt;/code&gt; 方法已被加入到查找以及 Eloquent 查找器中。让你在分页视图中，使用简单的「上一页」和「下一页」链接查找更为高效。&lt;/p&gt;
&lt;h3 id=&#34;迁移确认-migration-confirmation&#34;&gt;迁移确认 (Migration Confirmation)&lt;/h3&gt;
&lt;p&gt;在正式环境中，破坏性的迁移动作将会被再次确认。如果希望取消提示字符确认请使用 &lt;code&gt;--force&lt;/code&gt; 参数。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;laravel-4.1&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;laravel-41&#34;&gt;Laravel 4.1&lt;/h2&gt;
&lt;h3 id=&#34;完整更动列表-full-change-list&#34;&gt;完整更动列表 (Full Change List)&lt;/h3&gt;
&lt;p&gt;此发行版本的完整更动列表，可以在版本 4.1 的安装中命令行运行 &lt;code&gt;php artisan changes&lt;/code&gt; 获取，或者浏览 &lt;a href=&#34;https://github.com/laravel/framework/blob/4.1/src/Illuminate/Foundation/changes.json&#34;&gt;Github 更新文件中&lt;/a&gt; 中了解。其中只记录了该版本比较主要的强化功能和更动。&lt;/p&gt;
&lt;h3 id=&#34;新的-ssh-组件-new-ssh-component&#34;&gt;新的 SSH 组件 (New SSH Component)&lt;/h3&gt;
&lt;p&gt;一个全新的 &lt;code&gt;SSH&lt;/code&gt; 组件在此发行版本中登场。此功能让你可以轻易的 SSH 至远程服务器并运行命令。更多信息，可以参阅 &lt;a href=&#34;https://www.bg7pbp.com/docs/ssh&#34;&gt;SSH 组件文档&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;新的 &lt;code&gt;php artisan tail&lt;/code&gt; 命令就是使用这个新的 SSH 组件。更多的信息，请参阅 &lt;code&gt;tail&lt;/code&gt; &lt;a href=&#34;http://laravel.com/docs/ssh#tailing-remote-logs&#34;&gt;命令集文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;boris-in-tinker&#34;&gt;Boris In Tinker&lt;/h3&gt;
&lt;p&gt;如果你的系统支持 &lt;a href=&#34;https://github.com/d11wtq/boris&#34;&gt;Boris REPL&lt;/a&gt;，&lt;code&gt;php artisan thinker&lt;/code&gt; 命令将会使用到它。系统中也必须先行安装好 &lt;code&gt;readline&lt;/code&gt; 和 &lt;code&gt;pcntl&lt;/code&gt; 两个 PHP 扩展包。如果你没这些扩展包，从 4.0 之后将会使用到它。&lt;/p&gt;
&lt;h3 id=&#34;eloquent-强化-eloquent-improvements&#34;&gt;Eloquent 强化 (Eloquent Improvements)&lt;/h3&gt;
&lt;p&gt;Eloquent 添加了新的 &lt;code&gt;hasManyThrough&lt;/code&gt; 关系链。想要了解更多，请参见 &lt;a href=&#34;https://www.bg7pbp.com/docs/eloquent#has-many-through&#34;&gt;Eloquent 文档&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;一个新的 &lt;code&gt;whereHas&lt;/code&gt; 方法也同时登场，他将允许 &lt;a href=&#34;https://www.bg7pbp.com/docs/eloquent#querying-relations&#34;&gt;检索基于关系模型&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;数据库读写分离-database-read--write-connections&#34;&gt;数据库读写分离 (Database Read / Write Connections)&lt;/h3&gt;
&lt;p&gt;Query Builder 和 Eloquent 目前通过数据库层，已经可以自动做到读写分离。更多的信息，请参考 &lt;a href=&#34;https://www.bg7pbp.com/docs/database#read-write-connections&#34;&gt;文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;队列排序-queue-priority&#34;&gt;队列排序 (Queue Priority)&lt;/h3&gt;
&lt;p&gt;队列排序已经被支持，只要在 &lt;code&gt;queue:listen&lt;/code&gt; 命令后将队列以逗号分隔送出。&lt;/p&gt;
&lt;h3 id=&#34;失败队列作业处理--failed-queue-job-handling&#34;&gt;失败队列作业处理 ( Failed Queue Job Handling)&lt;/h3&gt;
&lt;p&gt;现在队列将会自动处理失败的作业，只要在 &lt;code&gt;queue:listen&lt;/code&gt; 后加上 &lt;code&gt;--tries&lt;/code&gt; 即可。更多的失败作业处理可以参见 &lt;a href=&#34;https://www.bg7pbp.com/docs/queues#failed-jobs&#34;&gt;队列文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;缓存标签-cache-tags&#34;&gt;缓存标签 (Cache Tags)&lt;/h3&gt;
&lt;p&gt;缓存「区块」已经被「标签」取代。缓存标签允许你将多个「标签」指向同一个缓存对象，而且可以清空所有被指定某个标签的所有对象。更多使用缓存标签信息请见 &lt;a href=&#34;https://www.bg7pbp.com/docs/cache#cache-tags&#34;&gt;缓存文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;更具弹性的密码提醒-flexible-password-reminders&#34;&gt;更具弹性的密码提醒 (Flexible Password Reminders)&lt;/h3&gt;
&lt;p&gt;密码提醒引擎已经可以提供更强大的开发弹性，如：认证密码、显示状态消息等等。使用强化的密码提醒引擎，更多的信息 &lt;a href=&#34;https://www.bg7pbp.com/docs/security#password-reminders-and-reset&#34;&gt;请参阅文档&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;强化路由引擎-improved-routing-engine&#34;&gt;强化路由引擎 (Improved Routing Engine)&lt;/h3&gt;
&lt;p&gt;Laravel 4.1 拥有一个完全重新编写的路由层。API 一样不变。然而与 4.0 相比，速度快上 100%。整个引擎大幅的简化，且路由表达式大大减少对 Symfony Routing 的依赖。&lt;/p&gt;
&lt;h3 id=&#34;强化-session-引擎-improved-session-engine&#34;&gt;强化 Session 引擎 (Improved Session Engine)&lt;/h3&gt;
&lt;p&gt;此发行版本中，我们亦发布了全新的 Session 引擎。如同路由增进的部分，新的 Session 层更加简化且更快速。我们不再使用 Symfony 的 Session 处理工具，并且使用更简单、更容易维护的自定义解法。&lt;/p&gt;
&lt;h3 id=&#34;doctrine-dbal&#34;&gt;Doctrine DBAL&lt;/h3&gt;
&lt;p&gt;如果你有在你的迁移中使用到 &lt;code&gt;renameColumn&lt;/code&gt;，之后你必须在 &lt;code&gt;composer.json&lt;/code&gt; 里加 &lt;code&gt;doctrine/dbal&lt;/code&gt; 进依赖扩展包中。此扩展包不再默认包含在 Laravel 之中。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;最后更新：2016.09.21&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Docker volume 数据卷</title>
        <link>https://www.bg7pbp.com/p/docker-volume/</link>
        <pubDate>Thu, 08 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/docker-volume/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%88%9B%E5%BB%BA%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%AE%B9%E5%99%A8&#34;&gt;一、创建数据卷容器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80%E6%95%B0%E6%8D%AE%E5%8D%B7dbdata&#34;&gt;方法一（数据卷&lt;code&gt;/dbdata&lt;/code&gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C%E5%AE%B9%E5%99%A8%E4%B8%8D%E8%BF%90%E8%A1%8C&#34;&gt;方法二(容器不运行)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%89%E6%98%A0%E5%B0%84%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6&#34;&gt;方法三（映射本地文件）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E5%9B%9B%E6%8E%A8%E8%8D%90&#34;&gt;方法四（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%8C%82%E8%BD%BD%E6%95%B0%E6%8D%AE%E5%8D%B7%E5%AE%B9%E5%99%A8&#34;&gt;二、挂载数据卷容器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%8D%B7%E4%B8%AD%E7%9A%84%E5%86%85%E5%AE%B9&#34;&gt;三、备份数据卷中的内容&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%A4%8D%E5%88%B6%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%8D%B7&#34;&gt;四、复制文件到数据卷&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E6%95%B0%E6%8D%AE%E5%8D%B7%E6%8F%92%E4%BB%B6&#34;&gt;五、数据卷插件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一创建数据卷容器&#34;&gt;一、创建数据卷容器&lt;/h2&gt;
&lt;h3 id=&#34;方法一数据卷dbdata&#34;&gt;方法一（数据卷&lt;code&gt;/dbdata&lt;/code&gt;)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run -it -v /dbdata --name dbstore ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;方法二容器不运行&#34;&gt;方法二(容器不运行)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker create -v /dbdata --name dbstore ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;方法三映射本地文件&#34;&gt;方法三（映射本地文件）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;docker run -it -v $(pwd):/dbdata --name dbstore ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;方法四推荐&#34;&gt;方法四（推荐）&lt;/h3&gt;
&lt;p&gt;创建数据卷&lt;code&gt;dbdata&lt;/code&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume create --name dbdata
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;创建数据卷容器&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -it -v dbdata:/dbdata --name dbstore ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;删除&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume rm dbstore
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查看&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume ls
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;二挂载数据卷容器&#34;&gt;二、挂载数据卷容器&lt;/h2&gt;
&lt;p&gt;将上面创建的&lt;code&gt;dbstore&lt;/code&gt;容器挂载到新容器&lt;code&gt;dbstore2&lt;/code&gt;上面&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run -it --volumes-from dbstore --name dbstore2 ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 删除容器不会删除数据卷，但是。。如果删除了数据卷容器后，要找到无主的数据卷就稍有点麻烦了。&lt;/p&gt;
&lt;p&gt;通过下面命令找回数据卷&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker volume ls #列出全部数据卷
docker run -it -v xxxx:/dbdata --name dbstore ubuntu /bin/bash #创建数据卷容器
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;三备份数据卷中的内容&#34;&gt;三、备份数据卷中的内容&lt;/h2&gt;
&lt;p&gt;备份数据卷容器&lt;code&gt;dbstore&lt;/code&gt;中的数据卷&lt;code&gt;/dbdata&lt;/code&gt;内容。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
&lt;/code&gt;&lt;/pre&gt;
&lt;ol&gt;
&lt;li&gt;启动一个临时容器，挂载&lt;code&gt;dbstore&lt;/code&gt;容器的数据卷。&lt;/li&gt;
&lt;li&gt;将当前目录挂载到这个临时容器的&lt;code&gt;/backup&lt;/code&gt;目录&lt;/li&gt;
&lt;li&gt;最后将dbstore容器中的数据卷&lt;code&gt;/dbdata&lt;/code&gt;备份到&lt;code&gt;/backup&lt;/code&gt;（即当前目录）&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;四复制文件到数据卷&#34;&gt;四、复制文件到数据卷&lt;/h2&gt;
&lt;p&gt;将宿主机的文件复制到数据卷(/dbdata)中&lt;/p&gt;
&lt;p&gt;首先新建一个数据卷（数据卷在卷容器dbstore中）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run -itd -v /dbdata --name dbstore ubuntu /bin/bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;然后新建一个临时容器，挂载刚才创建的数据卷容器(dbstore)
接着将当前目录映射为这个临时容器的/backup目录最后，将当前目录下的backup.tar解压到数据卷(/dbdata)中&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$ docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu bash -c &amp;quot;cd /dbdata &amp;amp;&amp;amp; tar xvf /backup/backup.tar --strip 1
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;五数据卷插件&#34;&gt;五、数据卷插件&lt;/h2&gt;
&lt;p&gt;所有可用插件：&lt;a href=&#34;https://docs.docker.com/engine/extend/plugins/&#34;&gt;https://docs.docker.com/engine/extend/plugins/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://docs.clusterhq.com/en/latest/docker-integration/install-client.html#installing-on-other-linux-distributions&#34;&gt;Flocker 插件安装&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;其他：略&lt;/p&gt;
&lt;p&gt;参考文档：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/engine/tutorials/dockervolumes/&#34;&gt;https://docs.docker.com/engine/tutorials/dockervolumes/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.dockerinfo.net/406.html&#34;&gt;http://www.dockerinfo.net/406.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Docker image for lnmp</title>
        <link>https://www.bg7pbp.com/p/docker-lnmp-image/</link>
        <pubDate>Sun, 04 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/docker-lnmp-image/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%A1%B9%E7%9B%AE%E5%9C%B0%E5%9D%80&#34;&gt;项目地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;一、安装前准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-lnmp&#34;&gt;二、安装 LNMP&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-docker-compose&#34;&gt;2.1 docker-compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E8%BF%90%E8%A1%8C-docker-compose&#34;&gt;2.2 运行 docker-compose&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-nginx%E7%AB%99%E7%82%B9%E9%85%8D%E7%BD%AE&#34;&gt;2.3 nginx站点配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A&#34;&gt;三、了解更多&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基于 &lt;code&gt;Ubuntu 16.04&lt;/code&gt; 构建，一键自动安装最新版的 &lt;code&gt;php7&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;项目地址&#34;&gt;项目地址&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GitHub ：&lt;/strong&gt; &lt;a href=&#34;https://github.com/wangyan/docker-lnmp&#34;&gt;https://github.com/wangyan/docker-lnmp&lt;/a&gt;
&lt;strong&gt;国内镜像：&lt;/strong&gt; &lt;a href=&#34;https://git.wangyan.org/docker/lnmp&#34;&gt;https://git.wangyan.org/docker/lnmp&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;1.0&lt;/code&gt; 分支为&lt;code&gt;PHP5.6&lt;/code&gt;版本(不再维护)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;2.0&lt;/code&gt; 分支是&lt;code&gt;PHP7&lt;/code&gt;版本&lt;/li&gt;
&lt;li&gt;&lt;code&gt;3.0&lt;/code&gt; 主分支(master)使用&lt;code&gt;docker-compose&lt;/code&gt;编排&lt;code&gt;MySQL&lt;/code&gt;，&lt;code&gt;nginx+phpfpm&lt;/code&gt;两个独立容器。（推荐）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;develop&lt;/code&gt; 分支编排&lt;code&gt;nginx&lt;/code&gt;,&lt;code&gt;phpfpm&lt;/code&gt;,&lt;code&gt;mysql&lt;/code&gt;三个独立容器。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;alpine&lt;/code&gt;分支使用&lt;code&gt;alpine&lt;/code&gt;镜像编排三个独立容器。&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;Ubuntu 14.04 + nginx 1.x + php5.6/7.0 + MySQL 5.7.x&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一安装前准备&#34;&gt;一、安装前准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/installation&#34;&gt;docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://docs.docker.com/compose/install&#34;&gt;docker compose&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二安装-lnmp&#34;&gt;二、安装 LNMP&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;vim docker-compose.yml&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;21-docker-compose&#34;&gt;2.1 docker-compose&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;version: &lt;span class=&#34;s1&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;services:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    mysql:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        container_name: mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        image: mysql:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        environment:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - &lt;span class=&#34;nv&#34;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - /opt/lnmp/mysql_data:/var/lib/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        restart: always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    phpfpm:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        container_name: phpfpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        image: docker.wangyan.org/docker/php:alpine
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - &lt;span class=&#34;s2&#34;&gt;&amp;#34;9000:9000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        links:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - /opt/lnmp/public_html:/var/www/html
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        restart: always
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    nginx:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        container_name: nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        image: docker.wangyan.org/docker/nginx:alpine
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        ports:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - &lt;span class=&#34;s2&#34;&gt;&amp;#34;80:80&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - &lt;span class=&#34;s2&#34;&gt;&amp;#34;443:443&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        links:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - phpfpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        volumes:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - /opt/lnmp/public_html:/var/www/html
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            - /opt/lnmp/nginx_sites:/etc/nginx/sites-enabled
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        restart: always&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参数说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MYSQL_ROOT_PASSWORD&lt;/code&gt;: 将&lt;code&gt;123456&lt;/code&gt;换成你的MySQL Root密码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;volumes&lt;/code&gt;: 挂载左边是宿主机路径，右边是容器里的路径&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-运行-docker-compose&#34;&gt;2.2 运行 docker-compose&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose up -d&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-nginx站点配置&#34;&gt;2.3 nginx站点配置&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;vim /opt/lnmp/nginx_sites&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server { 
    listen 80; 
    server_name example.com;

    root /var/www/html; 
    index index.html index.php; 

    location ~ .*\.php$ { 
        fastcgi_split_path_info ^(.&amp;#43;\.php)(/.&amp;#43;)$; 
        fastcgi_pass phpfpm:9000; 
        fastcgi_index index.php; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        include fastcgi_params; 
    }

    location ~ /\. {
        deny all;
        access_log off;
        log_not_found off;
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重启 nginx&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-compose restart nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;或者进入nginx容器后执行 &lt;code&gt;sv restart nginx&lt;/code&gt;&lt;/p&gt;
&lt;h2 id=&#34;三了解更多&#34;&gt;三、了解更多&lt;/h2&gt;
&lt;p&gt;关于&lt;code&gt;lnmp&lt;/code&gt;更多信息，请访问&lt;code&gt;lnmp&lt;/code&gt;主页。&lt;a href=&#34;http://www.wangyan.cloud/docker-lnmp&#34;&gt;http://www.wangyan.cloud/docker-lnmp&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更多使用帮助请阅读&lt;code&gt;wiki&lt;/code&gt;，其他问题欢迎在&lt;code&gt;issues&lt;/code&gt;中反馈。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Hexo 一键安装自动部署</title>
        <link>https://www.bg7pbp.com/p/docker-hexo-autodeploy/</link>
        <pubDate>Sun, 04 Sep 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/docker-hexo-autodeploy/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%86%99%E4%BD%9C%E6%B5%81%E7%A8%8B&#34;&gt;一、写作流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-docker&#34;&gt;二、安装 Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85-hexo&#34;&gt;三、安装 Hexo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E9%85%8D%E7%BD%AE-webhook&#34;&gt;四、配置 webhook&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94hexo-%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4&#34;&gt;五、Hexo 常用命令&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E5%AE%89%E8%A3%85hexo&#34;&gt;5.1 安装Hexo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52-%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;5.2 启动服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53-%E5%86%99%E4%BD%9C&#34;&gt;5.3 写作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#new%E5%91%BD%E4%BB%A4&#34;&gt;new命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%87%AA%E5%AE%9A%E4%B9%89%E6%96%87%E7%AB%A0%E4%BF%A1%E6%81%AF&#34;&gt;自定义文章信息&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#54-%E7%94%9F%E6%88%90%E9%9D%99%E6%80%81%E6%96%87%E4%BB%B6&#34;&gt;5.4 生成静态文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#55-%E9%83%A8%E7%BD%B2%E9%80%89%E5%81%9A&#34;&gt;5.5 部署（选做）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#56-%E5%B8%B8%E7%94%A8%E7%AE%80%E5%86%99&#34;&gt;5.6 常用简写&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A&#34;&gt;六、了解更多&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基于 &lt;code&gt;Ubuntu 16.04&lt;/code&gt;、NodeJs: &lt;code&gt;v6.x&lt;/code&gt;、Nginx &lt;code&gt;1.10.x&lt;/code&gt; 构建，一键自动安装最新版的 &lt;code&gt;Hexo&lt;/code&gt;，无需手动操作(&lt;code&gt;hexo g&lt;/code&gt;)生成静态文件。&lt;/p&gt;
&lt;p&gt;** 项目地址 **&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;GitHub：&lt;/strong&gt; &lt;a href=&#34;https://github.com/wangyan/docker-hexo&#34;&gt;https://github.com/wangyan/docker-hexo&lt;/a&gt;
&lt;strong&gt;国内镜像：&lt;/strong&gt; &lt;a href=&#34;https://git.wangyan.org/root/docker-hexo&#34;&gt;https://git.wangyan.org/root/docker-hexo&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一写作流程&#34;&gt;一、写作流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;首先在Github或者GitLab上编辑文章（或者本地&lt;code&gt;git push&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;然后会触发&lt;code&gt;webhook&lt;/code&gt;，自动将git上的md文件拉取到 &lt;code&gt;/opt/hexo/source/_posts&lt;/code&gt; 文件夹&lt;/li&gt;
&lt;li&gt;接着自动执行&lt;code&gt;hexo g&lt;/code&gt;操作，生成静态文件。&lt;/li&gt;
&lt;li&gt;最后通过网址访问，结束。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二安装-docker&#34;&gt;二、安装 Docker&lt;/h2&gt;
&lt;p&gt;关于Docker 更多信息，请访问其官网。&lt;a href=&#34;https://docs.docker.com&#34;&gt;https://docs.docker.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;debian&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install curl &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://get.daocloud.io/docker &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d -f docker defaults &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service docker start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CentOS&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://get.docker.com/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; docker.service &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start docker.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三安装-hexo&#34;&gt;三、安装 Hexo&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IP_OR_DOMAIN&lt;/code&gt; 服务器IP或者域名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;GITHUB&lt;/code&gt; github自动发布地址（Gitlab 请使用 &lt;code&gt;-e GITLAB=http://xxx&lt;/code&gt;）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;WEBHOOK_SECRET&lt;/code&gt;  github webhook 密钥 （GitLab 不支持该选项）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;APT_MIRRORS&lt;/code&gt; 使用国内软件源&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;国内主机可将 &lt;code&gt;idiswy/hexo:latest&lt;/code&gt; 换成 &lt;code&gt;docker.wangyan.org/root/docker-hexo:latest&lt;/code&gt;
国内主机可用 &lt;code&gt;-e APT_MIRRORS=aliyun&lt;/code&gt; 选项，使用国内的镜像源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --name hexo &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /opt/hexo:/opt/hexo &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 80:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;IP_OR_DOMAIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wangyan.org &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;GITHUB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;https://github.com/wangyan/test.git &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;WEBHOOK_SECRET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;APT_MIRRORS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;aliyun &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-d idiswy/hexo:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装可能需要30秒左右，通过下面方法查看安装进度。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs -f hexo //查看安装进度&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四配置-webhook&#34;&gt;四、配置 webhook&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;注意将&lt;code&gt;youdomain&lt;/code&gt;替换成你的网站域名，secret密钥可以随便设置&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://raw.githubusercontent.com/idiswy/docker-hexo/master/docs/images/webhook.jpg&#34; alt=&#34;https://raw.githubusercontent.com/idiswy/docker-hexo/master/docs/images/webhook.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;五hexo-常用命令&#34;&gt;五、Hexo 常用命令&lt;/h2&gt;
&lt;h3 id=&#34;51-安装hexo&#34;&gt;5.1 安装Hexo&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm install hexo -g &lt;span class=&#34;c1&#34;&gt;#全局安装hexo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;npm update hexo -g &lt;span class=&#34;c1&#34;&gt;#升级hexo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo init &lt;span class=&#34;c1&#34;&gt;#初始化,新建一个网站&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;了解更多：&lt;a href=&#34;https://hexo.io/zh-cn/docs/index.html&#34;&gt;https://hexo.io/zh-cn/docs/index.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;52-启动服务器&#34;&gt;5.2 启动服务器&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo server &lt;span class=&#34;c1&#34;&gt;# 启动web服务器（默认端口4000，&amp;#39;ctrl + c&amp;#39;关闭）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo server -s &lt;span class=&#34;c1&#34;&gt;#静态模式&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo server -p &lt;span class=&#34;m&#34;&gt;5000&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#启动时，自定义端口&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo server -i 192.168.1.1 &lt;span class=&#34;c1&#34;&gt;#启动时，自定义 IP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;了解更多：&lt;a href=&#34;https://hexo.io/zh-cn/docs/server.html&#34;&gt;https://hexo.io/zh-cn/docs/server.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;53-写作&#34;&gt;5.3 写作&lt;/h3&gt;
&lt;h4 id=&#34;new命令&#34;&gt;new命令&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo new &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;layout&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &amp;lt;title&amp;gt; &lt;span class=&#34;c1&#34;&gt;#新建&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# layout对应三种布局：post、page、draft，默认为post&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo new &lt;span class=&#34;s2&#34;&gt;&amp;#34;postName&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#新建文章&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo new page &lt;span class=&#34;s2&#34;&gt;&amp;#34;pageName&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#新建页面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo new draft &lt;span class=&#34;s2&#34;&gt;&amp;#34;draftName&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#新建草稿&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;自定义文章信息&#34;&gt;自定义文章信息&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;title: 文章标题
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;layout: post （可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;date: 2016-01-01 00:00
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;comments: true（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;categories: 技术札记（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tag:  标签（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- tag1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- tag2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;keywords: 关键词（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;description:描述（可选）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;####设置文章摘要&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;以上是文章摘要 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;以下是余下全文&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;54-生成静态文件&#34;&gt;5.4 生成静态文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo generate &lt;span class=&#34;c1&#34;&gt;#生成静态页面至public目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo generate --watch &lt;span class=&#34;c1&#34;&gt;#生成静态页面，同时监视文件变动&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;了解更多：&lt;a href=&#34;https://hexo.io/zh-cn/docs/writing.html&#34;&gt;https://hexo.io/zh-cn/docs/writing.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;55-部署选做&#34;&gt;5.5 部署（选做）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo deploy &lt;span class=&#34;c1&#34;&gt;#部署到远程服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo generate --deploy &lt;span class=&#34;c1&#34;&gt;#生成静态页面后自动部署&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;了解更多：&lt;a href=&#34;https://hexo.io/zh-cn/docs/deployment.html&#34;&gt;https://hexo.io/zh-cn/docs/deployment.html&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;56-常用简写&#34;&gt;5.6 常用简写&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo n &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; hexo new &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#新建文章hello world&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo &lt;span class=&#34;nv&#34;&gt;p&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; hexo publish &lt;span class=&#34;c1&#34;&gt;#将草稿发布为这正式文章&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo &lt;span class=&#34;nv&#34;&gt;g&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; hexo generate &lt;span class=&#34;c1&#34;&gt;#生成静态文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo &lt;span class=&#34;nv&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; hexo server &lt;span class=&#34;c1&#34;&gt;#启动服务器&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hexo &lt;span class=&#34;nv&#34;&gt;d&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; hexo deploy &lt;span class=&#34;c1&#34;&gt;#部署&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;了解更多Hexo命令：&lt;a href=&#34;https://hexo.io/zh-cn/docs/commands.html&#34;&gt;https://hexo.io/zh-cn/docs/commands.html&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;六了解更多&#34;&gt;六、了解更多&lt;/h2&gt;
&lt;p&gt;关于&lt;code&gt;Hexo&lt;/code&gt;更多信息，请访问其官网。&lt;a href=&#34;https://hexo.io&#34;&gt;https://hexo.io&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更多使用帮助请阅读&lt;code&gt;wiki&lt;/code&gt;，其他问题欢迎在&lt;code&gt;issues&lt;/code&gt;中反馈。&lt;/p&gt;</description>
        </item>
        <item>
        <title>Docker image for Seafile</title>
        <link>https://www.bg7pbp.com/p/docker-seafile-image/</link>
        <pubDate>Fri, 29 Jul 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/docker-seafile-image/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85-docker&#34;&gt;一、安装 Docker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-mysql-%E6%95%B0%E6%8D%AE%E5%BA%93&#34;&gt;二、安装 MySQL 数据库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85-phpmyadmin-%E5%8F%AF%E9%80%89&#34;&gt;三、安装 phpMyAdmin (可选)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%AE%89%E8%A3%85-seafile-%E5%A4%96%E9%83%A8%E6%95%B0%E6%8D%AE%E5%BA%93&#34;&gt;四、安装 Seafile （外部数据库）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%AE%89%E8%A3%85-seafile-%E5%86%85%E7%BD%AE%E6%95%B0%E6%8D%AE%E5%BA%93&#34;&gt;五、安装 Seafile （内置数据库）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E5%B8%B8%E8%A7%81%E6%93%8D%E4%BD%9C&#34;&gt;六、常见操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#61-%E8%BF%9B%E5%85%A5%E5%AE%B9%E5%99%A8&#34;&gt;6.1 进入容器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#62-%E9%87%8D%E5%90%AF%E6%93%8D%E4%BD%9C&#34;&gt;6.2 重启操作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83%E7%B3%BB%E7%BB%9F%E8%AE%BE%E7%BD%AE%E5%8F%AF%E9%80%89&#34;&gt;七、系统设置(可选)&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#61-%E8%A7%A3%E5%86%B3debian%E6%9C%AC%E5%9C%B0%E5%8C%96%E9%97%AE%E9%A2%98&#34;&gt;6.1. 解决Debian本地化问题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#72%E8%AE%BE%E7%BD%AE%E4%B8%AD%E5%9B%BD%E6%97%B6%E5%8C%BA&#34;&gt;7.2.设置中国时区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#73%E5%AE%89%E8%A3%85-fuse-%E6%89%A9%E5%B1%95&#34;&gt;7.3.安装 FUSE 扩展&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E4%BA%86%E8%A7%A3%E6%9B%B4%E5%A4%9A&#34;&gt;八、了解更多&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;基于 &lt;code&gt;Ubuntu 16.04&lt;/code&gt; 构建的 &lt;code&gt;Docker&lt;/code&gt; 镜像，一键自动安装最新版的 &lt;code&gt;Seafile&lt;/code&gt;，并自动完成设置，使用外部&lt;code&gt;MySQL&lt;/code&gt;数据库，支持 &lt;code&gt;Nginx SSL&lt;/code&gt; 访问，默认开启 &lt;code&gt;WebDAV&lt;/code&gt; 功能。了解更多信息，请访问&lt;code&gt;Seafile&lt;/code&gt; 官网。&lt;a href=&#34;https://www.seafile.com&#34;&gt;https://www.seafile.com&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;演示地址：&lt;a href=&#34;https://cloud.wangyan.org&#34;&gt;https://cloud.wangyan.org&lt;/a&gt;
账号：info@wangyan.org
密码：123456&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/d/docker-seafile.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/d/docker-seafile.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;一安装-docker&#34;&gt;一、安装 Docker&lt;/h2&gt;
&lt;p&gt;关于Docker 更多信息，请访问其官网。&lt;a href=&#34;https://docs.docker.com&#34;&gt;https://docs.docker.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;debian&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install curl &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://get.daocloud.io/docker &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d -f docker defaults &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service docker start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CentOS&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -fsSL https://get.docker.com/ &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl &lt;span class=&#34;nb&#34;&gt;enable&lt;/span&gt; docker.service &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;systemctl start docker.service&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-mysql-数据库&#34;&gt;二、安装 MySQL 数据库&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;如果你想使用内置的数据库，请忽略步骤(二)(三)(四)，直接跳到步骤(五)&lt;/strong&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意将&lt;code&gt;123456&lt;/code&gt;换成你的MySQL Root密码&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --name mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /var/lib/mysql:/var/lib/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 3306:3306 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-d mysql:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三安装-phpmyadmin-可选&#34;&gt;三、安装 phpMyAdmin (可选)&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;**温馨提示：**国内主机请将 &lt;code&gt;idiswy/phpmyadmin:latest&lt;/code&gt; 换成 &lt;code&gt;docker.wangyan.org/root/docker-phpmyadmin:latest&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --name phpmyadmin &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--link mysql:mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 8080:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-P -d idiswy/phpmyadmin:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四安装-seafile-外部数据库&#34;&gt;四、安装 Seafile （外部数据库）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;IP_OR_DOMAIN&lt;/code&gt; 服务器IP或者域名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEAFILE_ADMIN&lt;/code&gt; 创建 Seafile 管理员账号&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEAFILE_ADMIN_PW&lt;/code&gt;  Seafile 管理员密码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SQLSEAFILEPW&lt;/code&gt; Seafile 数据库密码&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：如果有防火墙，请务必开放8082端口，用于客户端同步。国内主机请将 &lt;code&gt;idiswy/seafile:latest&lt;/code&gt; 换成 &lt;code&gt;docker.wangyan.org/root/docker-seafile:latest&lt;/code&gt;
国内主机可增加&lt;code&gt;-e APT_MIRRORS=aliyun&lt;/code&gt; 选项，使用国内的镜像源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --name seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--link mysql:mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 8082:8082 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 80:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 443:443 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;IP_OR_DOMAIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cloud.wangyan.org &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SEAFILE_ADMIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;info@wangyan.org &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SEAFILE_ADMIN_PW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SQLSEAFILEPW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /home/seafile:/opt/seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-d idiswy/seafile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装可能需要 1 分钟左右，通过下面方法查看安装进度。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs -f seafile //查看安装进度&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五安装-seafile-内置数据库&#34;&gt;五、安装 Seafile （内置数据库）&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;如果你想使用外部数据库，请返回到步骤（二）安装&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;MYSQL_ROOT_PASSWORD&lt;/code&gt; MySQL Root 密码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;IP_OR_DOMAIN&lt;/code&gt; 服务器IP或者域名&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEAFILE_ADMIN&lt;/code&gt; 创建 Seafile 管理员账号&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SEAFILE_ADMIN_PW&lt;/code&gt;  Seafile 管理员密码&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SQLSEAFILEPW&lt;/code&gt; Seafile 数据库密码&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;注意：如果有防火墙，请务必开放8082端口，用于客户端同步。国内主机请将 &lt;code&gt;idiswy/seafile:latest&lt;/code&gt; 换成 &lt;code&gt;docker.wangyan.org/root/docker-seafile:latest&lt;/code&gt;
国内主机可增加&lt;code&gt;-e APT_MIRRORS=aliyun&lt;/code&gt; 选项，使用国内的镜像源。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker run --name seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 8082:8082 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 80:80 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 443:443 &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;IP_OR_DOMAIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cloud.wangyan.org &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SEAFILE_ADMIN&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;info@wangyan.org &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SEAFILE_ADMIN_PW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-e &lt;span class=&#34;nv&#34;&gt;SQLSEAFILEPW&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;123456&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /home/seafile:/opt/seafile &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-d idiswy/seafile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装可能需要 5 分钟左右，通过下面方法查看安装进度。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker logs -f seafile //查看安装进度&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;六常见操作&#34;&gt;六、常见操作&lt;/h2&gt;
&lt;h3 id=&#34;61-进入容器&#34;&gt;6.1 进入容器&lt;/h3&gt;
&lt;p&gt;首先，安装个小工具&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl --fail -L -O https://github.com/phusion/baseimage-docker/archive/master.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xzf master.tar.gz &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./baseimage-docker-master/install-tools.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;然后，进入容器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;docker-bash seafile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;nginx 配置文件&lt;/code&gt; /etc/nginx/conf.d/seafile.conf&lt;/li&gt;
&lt;li&gt;&lt;code&gt;seafile 配置文件&lt;/code&gt; /opt/seafile/conf/&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;62-重启操作&#34;&gt;6.2 重启操作&lt;/h3&gt;
&lt;p&gt;重启 nginx（nginx 修改配置文件后，需要重启）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sv reload nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重启 seafile&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/seafile restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;七系统设置可选&#34;&gt;七、系统设置(可选)&lt;/h2&gt;
&lt;h3 id=&#34;61-解决debian本地化问题&#34;&gt;6.1. 解决Debian本地化问题&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y language-pack-zh-hans-base&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/default/locale&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;LANG=zh_CN.UTF-8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;LANGUAGE=zh_CN.UTF-8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;LC_ALL=zh_CN.UTF-8
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;locale-gen &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh_CN.UTF-8&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; dpkg-reconfigure locales&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;72设置中国时区&#34;&gt;7.2.设置中国时区&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Debbian&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Asia/Shanghai&amp;#34;&lt;/span&gt; &amp;gt; /etc/timezone &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install ntpdate &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ntpdate -d cn.pool.ntp.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;CentOS 7&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;via &lt;a href=&#34;http://www.wangyan.cloud/centos-timedatectl&#34;&gt;http://www.wangyan.cloud/centos-timedatectl&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;imedatectl set-timezone Asia/Shanghai
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-ntp yes &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;73安装-fuse-扩展&#34;&gt;7.3.安装 FUSE 扩展&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /data/seafile-fuse &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/opt/seafile/seafile-server-latest/seaf-fuse.sh start /data/seafile-fuse //启动
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./seaf-fuse.sh stop //停止&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;八了解更多&#34;&gt;八、了解更多&lt;/h2&gt;
&lt;p&gt;关于&lt;code&gt;Seafile&lt;/code&gt;更多信息，请访问其官网。&lt;a href=&#34;http://manual.seafile.com/&#34;&gt;http://manual.seafile.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;更多使用帮助请阅读&lt;code&gt;wiki&lt;/code&gt;，其他问题欢迎在&lt;code&gt;issues&lt;/code&gt;中反馈。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Composer 入门教程</title>
        <link>https://www.bg7pbp.com/p/composer-tutorial/</link>
        <pubDate>Sat, 30 Apr 2016 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/composer-tutorial/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BE%9D%E8%B5%96%E7%AE%A1%E7%90%86&#34;&gt;依赖管理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%B3%BB%E7%BB%9F%E8%A6%81%E6%B1%82&#34;&gt;系统要求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85---linux--unix--osx&#34;&gt;安装 - Linux / Unix / OSX&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%8B%E8%BD%BD-composer-%E7%9A%84%E5%8F%AF%E6%89%A7%E8%A1%8C%E6%96%87%E4%BB%B6&#34;&gt;下载 Composer 的可执行文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%B1%80%E9%83%A8%E5%AE%89%E8%A3%85&#34;&gt;局部安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%A8%E5%B1%80%E5%AE%89%E8%A3%85&#34;&gt;全局安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85---windows&#34;&gt;安装 - Windows&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8%E5%AE%89%E8%A3%85%E7%A8%8B%E5%BA%8F&#34;&gt;使用安装程序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%89%8B%E5%8A%A8%E5%AE%89%E8%A3%85&#34;&gt;手动安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8-composer&#34;&gt;使用 Composer&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%A3%B0%E6%98%8E%E4%BE%9D%E8%B5%96%E5%85%B3%E7%B3%BB&#34;&gt;声明依赖关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%87%AA%E5%8A%A8%E5%8A%A0%E8%BD%BD&#34;&gt;自动加载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a name=&#34;introduction&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Composer 是 PHP 的一个依赖管理工具。它允许你申明项目所依赖的代码库，并且能够在项目中自动安装、升级这些代码库。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;dependency-management&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;依赖管理&#34;&gt;依赖管理&lt;/h2&gt;
&lt;p&gt;Composer 不是一个软件包管理器（类似APT、YUM），虽然它涉及到&lt;code&gt;packages&lt;/code&gt; 或者 &lt;code&gt;libraries&lt;/code&gt; 概念，但是它是基于你项目来管理依赖的，依赖代码只会安装在一个文件夹下（例如 &lt;code&gt;vendor&lt;/code&gt;文件夹），他不会将依赖代码作为系统全局来安装。当然，虽然 Composer 支持全局项目，但它仅仅是一个依赖管理工具。&lt;/p&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;/ol&gt;
&lt;p&gt;&lt;strong&gt;Composer&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;你只需通过 Composer 声明你项目所依赖的代码库。&lt;/li&gt;
&lt;li&gt;Composer 会自动找出所有你需要安装的代码库，并将它们下载到你的项目中。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a name=&#34;system-requirements&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;系统要求&#34;&gt;系统要求&lt;/h2&gt;
&lt;p&gt;运行 Composer 需要 PHP 5.3.2+ 以上版本。一些敏感的 PHP 设置和编译标志也是必须的，但对于任何不兼容项安装程序都会抛出警告。&lt;/p&gt;
&lt;p&gt;我们将从包的来源直接安装，而不是简单的下载 zip 文件，你需要 git 、 svn 或者 hg ，这取决于你载入的包所使用的版本管理系统。&lt;/p&gt;
&lt;p&gt;Composer 是多平台的，我们努力使它在 Windows 、 Linux 以及 OSX 平台上运行的同样出色。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;installation-linux-unix-osx&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装---linux--unix--osx&#34;&gt;安装 - Linux / Unix / OSX&lt;/h2&gt;
&lt;p&gt;&lt;a name=&#34;downloading-the-composer-executable&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;下载-composer-的可执行文件&#34;&gt;下载 Composer 的可执行文件&lt;/h3&gt;
&lt;p&gt;Composer 提供了一个方便的安装程序，你可以直接从命令行执行。你可以免费从 &lt;a href=&#34;https://getcomposer.org/installer&#34;&gt;官网&lt;/a&gt; 或者 &lt;a href=&#34;https://github.com/composer/getcomposer.org/blob/master/web/installer&#34;&gt;GitHub&lt;/a&gt; 下载到这个可执行文件。如果你想知道更多关于程序的内部运作，你可以直接查看，他是纯文本的PHP源码。&lt;/p&gt;
&lt;p&gt;总之，你有2种方式来安装 Composer。一种是局部安装，仅用于具体项目的使用，另一种是全局安装，所有项目都能使用。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;locally&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;局部安装&#34;&gt;局部安装&lt;/h4&gt;
&lt;p&gt;局部安装 Composer 只会安装到你项目的文件夹下。详情安装方法请阅读 &lt;a href=&#34;https://getcomposer.org/download/&#34;&gt;官方下载页的说明&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令行安装（二选一）&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sS https://getcomposer.org/installer &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php -r &lt;span class=&#34;s2&#34;&gt;&amp;#34;readfile(&amp;#39;https://getcomposer.org/installer&amp;#39;);&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装程序会检查一些 PHP 设置，然后下载 &lt;code&gt;composer.phar&lt;/code&gt; 文件到你的工作目录。这个文件是 Composer 的二进制文件，一个 PHAR 文件 (PHP archive)。这个 &lt;code&gt;composer.phar&lt;/code&gt; 文件可以 在命令行中执行的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;运行 Composer 程序&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php composer.phar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;自定义安装路径（选做）&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;你也可以在安装 Composer 时通过 &lt;code&gt;--install-dir&lt;/code&gt; 参数指定安装路径，通过 &lt;code&gt;--filename&lt;/code&gt; 参数指定文件名。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sS https://getcomposer.org/installer &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; php -- --install-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;bin --filename&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;composer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;现在你可以使用 &lt;code&gt;php bin/composer&lt;/code&gt; 命令来运行 composer 了。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;globally&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;全局安装&#34;&gt;全局安装&lt;/h4&gt;
&lt;p&gt;你可以将此文件放在任何地方。如果你把它放在系统的 &lt;code&gt;PATH&lt;/code&gt; 目录中，你就能在全局访问它。 在类 Unix 系统中，你甚至可以在使用时不加 &lt;code&gt;php&lt;/code&gt; 前缀。&lt;/p&gt;
&lt;p&gt;你可以执行这些命令让 composer 在你的系统中进行全局调用：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -sS https://getcomposer.org/installer &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv composer.phar /usr/local/bin/composer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 如果上诉命令因为权限执行失败， 请使用 sudo 再次尝试运行 &lt;code&gt;mv&lt;/code&gt; 那行命令。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 在一些系统中 &lt;code&gt;/usr&lt;/code&gt; 这个目录可能不存在，请手动创建  &lt;code&gt; mkdir -p /usr/local/bin&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;注意：&lt;/strong&gt; 更多关于 &lt;code&gt;PATH&lt;/code&gt; 环境变量的内容请访问 &lt;a href=&#34;https://en.wikipedia.org/wiki/PATH_(variable)&#34;&gt;维基百科&lt;/a&gt;  或者自行 Google。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;现在只需要运行 &lt;code&gt;composer&lt;/code&gt; 命令就可以使用 Composer 而不需要输入&lt;code&gt;php composer.phar&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;installation-windows&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;安装---windows&#34;&gt;安装 - Windows&lt;/h2&gt;
&lt;p&gt;&lt;a name=&#34;using-the-installer&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;使用安装程序&#34;&gt;使用安装程序&lt;/h3&gt;
&lt;p&gt;这是将 Composer 安装在你机器上的最简单的方法。&lt;/p&gt;
&lt;p&gt;下载并且运行 &lt;a href=&#34;https://getcomposer.org/Composer-Setup.exe&#34;&gt;Composer-Setup.exe&lt;/a&gt;，它将安装最新版本的 Composer ，并设置好系统的环境变量，因此你可以在任何目录下直接使用 &lt;code&gt;composer&lt;/code&gt; 命令。&lt;/p&gt;
&lt;p&gt;&lt;a name=&#34;manual-installation&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;手动安装&#34;&gt;手动安装&lt;/h3&gt;
&lt;p&gt;首先从 &lt;a href=&#34;https://getcomposer.org/download/&#34;&gt; 官方下载页面&lt;/a&gt;  下载最新版本的 &lt;code&gt;composer.phar&lt;/code&gt; ，并将这个文件移动到 &lt;code&gt;C:\Windows\System32&lt;/code&gt; 目录。&lt;/p&gt;
&lt;p&gt;然后创建一个 &lt;code&gt;composer.bat&lt;/code&gt; 文件，同时这个文件也移动到  &lt;code&gt;C:\Windows\System32&lt;/code&gt; 目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C:&lt;span class=&#34;se&#34;&gt;\b&lt;/span&gt;in&amp;gt;echo @php &lt;span class=&#34;s2&#34;&gt;&amp;#34;%~dp0composer.phar&amp;#34;&lt;/span&gt; %*&amp;gt;composer.bat&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后验证是否安装成功&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;C:&lt;span class=&#34;se&#34;&gt;\U&lt;/span&gt;sers&lt;span class=&#34;se&#34;&gt;\u&lt;/span&gt;sername&amp;gt;composer -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Composer version 1.0.0 2016-01-10 20:34:53&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a name=&#34;using-composer&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用-composer&#34;&gt;使用 Composer&lt;/h2&gt;
&lt;p&gt;&lt;a name=&#34;declaring-dependencies&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;声明依赖关系&#34;&gt;声明依赖关系&lt;/h3&gt;
&lt;p&gt;比方说，你正在创建一个项目，你需要一个库来做日志记录。你决定使用 &lt;a href=&#34;https://github.com/Seldaek/monolog&#34;&gt;monolog&lt;/a&gt;。为了将它添加到你的项目中，你所需要做的就是创建一个 &lt;code&gt;composer.json&lt;/code&gt;  文件，其中描述了项目的依赖关系。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;{
    &amp;#34;require&amp;#34;: {
        &amp;#34;monolog/monolog&amp;#34;: &amp;#34;1.2.*&amp;#34;
    }
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;我们只要指出我们的项目需要一些  &lt;code&gt;monolog/monolog&lt;/code&gt;  的包，从 &lt;code&gt;1.2&lt;/code&gt; 开始的任何版本。&lt;/p&gt;
&lt;p&gt;声明依赖关系后，接下来解决和下载依赖，这里将下载 monolog 到 &lt;code&gt;vendor/monolog/monolog&lt;/code&gt; 目录，请执行 &lt;code&gt;install&lt;/code&gt; 命令。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;php composer.phar install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果你进行了全局安装，并且没有 phar 文件在当前目录，请使用下面的命令代替：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;composer install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a name=&#34;autoloading&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;自动加载&#34;&gt;自动加载&lt;/h3&gt;
&lt;p&gt;除了库的下载，Composer 还准备了一个自动加载文件，它可以加载 Composer 下载的库中所有的类文件。使用它，你只需要将下面这行代码添加到你项目的引导文件中：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;require __DIR__ . &lt;span class=&#34;s1&#34;&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;更多基础用法，请务必阅读 &lt;a href=&#34;https://getcomposer.org/doc/01-basic-usage.md&#34;&gt;基本用法章节&lt;/a&gt; 。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>命令行的艺术</title>
        <link>https://www.bg7pbp.com/p/art-of-command-line/</link>
        <pubDate>Wed, 29 Jul 2015 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/art-of-command-line/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BF%85%E8%AF%BB&#34;&gt;必读&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9F%BA%E7%A1%80&#34;&gt;基础&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%97%A5%E5%B8%B8%E4%BD%BF%E7%94%A8&#34;&gt;日常使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%87%E4%BB%B6%E5%8F%8A%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86&#34;&gt;文件及数据处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%B3%BB%E7%BB%9F%E8%B0%83%E8%AF%95&#34;&gt;系统调试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%A1%8C%E4%BB%A3%E7%A0%81&#34;&gt;一行代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%86%B7%E9%97%A8%E4%BD%86%E6%9C%89%E7%94%A8&#34;&gt;冷门但有用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%85%E9%99%90-mac-%E7%B3%BB%E7%BB%9F&#34;&gt;仅限 Mac 系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9B%B4%E5%A4%9A%E8%B5%84%E6%BA%90&#34;&gt;更多资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%8D%E8%B4%A3%E5%A3%B0%E6%98%8E&#34;&gt;免责声明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%8E%88%E6%9D%83%E6%9D%A1%E6%AC%BE&#34;&gt;授权条款&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;熟练使用命令行是一种常常被忽视或被认为难以掌握的技能，但实际上，它可以提高你作为工程师的灵活性以及生产力。本文是一份我在 Linux 上工作时发现的一些关于命令行的使用的小技巧的摘要。有些小技巧是非常基础的，而另外一些则是相当复杂的甚至晦涩难懂的。这篇文章并不长，但当你能够熟练掌握这里列出的所有技巧时，你就学会了很多关于命令行的东西了。&lt;/p&gt;
&lt;p&gt;本文转自 &lt;a href=&#34;https://github.com/jlevy/the-art-of-command-line&#34;&gt;《The Art of Command Line》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://gitter.im/jlevy/the-art-of-command-line?utm_source=badge&amp;amp;utm_medium=badge&amp;amp;utm_campaign=pr-badge&amp;amp;utm_content=badge&#34;&gt;&lt;img src=&#34;https://badges.gitter.im/Join%20Chat.svg&#34; alt=&#34;Join the chat at https://gitter.im/jlevy/the-art-of-command-line&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BF%85%E8%AF%BB&#34;&gt;必读&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9F%BA%E7%A1%80&#34;&gt;基础&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%97%A5%E5%B8%B8%E4%BD%BF%E7%94%A8&#34;&gt;日常使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%87%E4%BB%B6%E5%8F%8A%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86&#34;&gt;文件及数据处理&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%B3%BB%E7%BB%9F%E8%B0%83%E8%AF%95&#34;&gt;系统调试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%A1%8C%E4%BB%A3%E7%A0%81&#34;&gt;一行代码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%86%B7%E9%97%A8%E4%BD%86%E6%9C%89%E7%94%A8&#34;&gt;冷门但有用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%85%E9%99%90-mac-%E7%B3%BB%E7%BB%9F&#34;&gt;仅限 Mac 系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9B%B4%E5%A4%9A%E8%B5%84%E6%BA%90&#34;&gt;更多资源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%8D%E8%B4%A3%E5%A3%B0%E6%98%8E&#34;&gt;免责声明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%8E%88%E6%9D%83%E6%9D%A1%E6%AC%BE&#34;&gt;授权条款&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;必读&#34;&gt;必读&lt;/h2&gt;
&lt;p&gt;涵盖范围：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这篇文章对刚接触命令行的新手以及具有命令行使用经验的人都有用处。本文致力于做到覆盖面广（尽量包括一切重要的内容），具体（给出最常见的具体的例子）以及简洁（避免一些不必要的东西以及一些偏题的可以在其他地方翻阅到文献的东西）。 每个小技巧在某个特定情境下都是基本的或能够显著地节约时间。&lt;/li&gt;
&lt;li&gt;本文为 Linux 所写，除了&lt;a href=&#34;#%E4%BB%85%E9%99%90-mac-%E7%B3%BB%E7%BB%9F&#34;&gt;仅限 Mac 系统&lt;/a&gt;节。其它节中的大部分内容都适用于其它 Unix 系统或 Mac 系统，甚至 Cygwin。&lt;/li&gt;
&lt;li&gt;本文关注于交互式 Bash，尽管很多技巧适用于其他 shell 或 Bash 脚本。&lt;/li&gt;
&lt;li&gt;本文包括了“标准的”Unix 命令和需要安装特定包的命令，只要它们足够重要。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;为了能在一页内展示尽量多的东西，一些具体的信息会被间接的包含在引用页里。聪明机智的你如果掌握了使用 Google 搜索引擎的基本思路与命令，那么你将可以查阅到更多的详细信息。使用 &lt;code&gt;apt-get&lt;/code&gt;／&lt;code&gt;yum&lt;/code&gt;／&lt;code&gt;dnf&lt;/code&gt;／&lt;code&gt;pacman&lt;/code&gt;／&lt;code&gt;pip&lt;/code&gt;／&lt;code&gt;brew&lt;/code&gt;（以及其它合适的包管理器）来安装新程序。&lt;/li&gt;
&lt;li&gt;使用 &lt;a href=&#34;http://explainshell.com/&#34;&gt;Explainshell&lt;/a&gt; 去获取相关命令、参数、管道等内容的解释。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;基础&#34;&gt;基础&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;学习 Bash 的基础知识。具体来说，输入 &lt;code&gt;man bash&lt;/code&gt; 并至少全文浏览一遍; 它很简单并且不长。其他的 shell 可能很好用，但 Bash 功能强大且几乎所有情况下都是可用的 （ &lt;em&gt;只&lt;/em&gt;学习 zsh，fish 或其他的 shell 的话，在你自己的电脑上会显得很方便，但在很多情况下会限制你，比如当你需要在服务器上工作时）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学习并掌握至少一个基于文本的编辑器。通常 Vim （&lt;code&gt;vi&lt;/code&gt;） 会是你最好的选择。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会如何使用 &lt;code&gt;man&lt;/code&gt; 命令去阅读文档。学会使用 &lt;code&gt;apropos&lt;/code&gt; 去查找文档。了解有些命令并不对应可执行文件，而是Bash内置的，可以使用 &lt;code&gt;help&lt;/code&gt; 和 &lt;code&gt;help -d&lt;/code&gt; 命令获取帮助信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会使用 &lt;code&gt;&amp;gt;&lt;/code&gt; 和 &lt;code&gt;&amp;lt;&lt;/code&gt; 来重定向输出和输入，学会使用 &lt;code&gt;|&lt;/code&gt; 来重定向管道。明白 &lt;code&gt;&amp;gt;&lt;/code&gt; 会覆盖了输出文件而 &lt;code&gt;&amp;gt;&amp;gt;&lt;/code&gt; 是在文件未添加。了解标准输出 stdout 和标准错误 stderr。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会使用通配符 &lt;code&gt;*&lt;/code&gt; （或许再算上 &lt;code&gt;?&lt;/code&gt; 和 &lt;code&gt;{&lt;/code&gt;&amp;hellip;&lt;code&gt;}&lt;/code&gt;） 和引用以及引用中 &lt;code&gt;&#39;&lt;/code&gt; 和 &lt;code&gt;&amp;quot;&lt;/code&gt; 的区别。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟悉 Bash 任务管理工具：&lt;code&gt;&amp;amp;&lt;/code&gt;，&lt;strong&gt;ctrl-z&lt;/strong&gt;，&lt;strong&gt;ctrl-c&lt;/strong&gt;，&lt;code&gt;jobs&lt;/code&gt;，&lt;code&gt;fg&lt;/code&gt;，&lt;code&gt;bg&lt;/code&gt;，&lt;code&gt;kill&lt;/code&gt; 等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解 &lt;code&gt;ssh&lt;/code&gt;，以及基本的无密码认证，&lt;code&gt;ssh-agent&lt;/code&gt;，&lt;code&gt;ssh-add&lt;/code&gt; 等。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会基本的文件管理：&lt;code&gt;ls&lt;/code&gt; 和 &lt;code&gt;ls -l&lt;/code&gt; （了解 &lt;code&gt;ls -l&lt;/code&gt; 中每一列代表的意义），&lt;code&gt;less&lt;/code&gt;，&lt;code&gt;head&lt;/code&gt;，&lt;code&gt;tail&lt;/code&gt; 和 &lt;code&gt;tail -f&lt;/code&gt; （甚至 &lt;code&gt;less +F&lt;/code&gt;），&lt;code&gt;ln&lt;/code&gt; 和 &lt;code&gt;ln -s&lt;/code&gt; （了解硬链接与软链接的区别），&lt;code&gt;chown&lt;/code&gt;，&lt;code&gt;chmod&lt;/code&gt;，&lt;code&gt;du&lt;/code&gt; （硬盘使用情况概述：&lt;code&gt;du -hk *&lt;/code&gt;）。 关于文件系统的管理，学习 &lt;code&gt;df&lt;/code&gt;，&lt;code&gt;mount&lt;/code&gt;，&lt;code&gt;fdisk&lt;/code&gt;，&lt;code&gt;mkfs&lt;/code&gt;，&lt;code&gt;lsblk&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学习基本的网络管理：&lt;code&gt;ip&lt;/code&gt; 或 &lt;code&gt;ifconfig&lt;/code&gt;，&lt;code&gt;dig&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;熟悉正则表达式，以及 &lt;code&gt;grep&lt;/code&gt;／&lt;code&gt;egrep&lt;/code&gt; 里不同参数的作用，例如 &lt;code&gt;-i&lt;/code&gt;，&lt;code&gt;-o&lt;/code&gt;，&lt;code&gt;-A&lt;/code&gt;，和 &lt;code&gt;-B&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会使用 &lt;code&gt;apt-get&lt;/code&gt;，&lt;code&gt;yum&lt;/code&gt;，&lt;code&gt;dnf&lt;/code&gt; 或 &lt;code&gt;pacman&lt;/code&gt; （取决于你使用的 Linux 发行版）来查找或安装包。确保你的环境中有 &lt;code&gt;pip&lt;/code&gt; 来安装基于 Python 的命令行工具 （部分程序使用 &lt;code&gt;pip&lt;/code&gt; 来安装会很简单）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;日常使用&#34;&gt;日常使用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 中，可以使用 &lt;strong&gt;Tab&lt;/strong&gt; 自动补全参数，使用 &lt;strong&gt;ctrl-r&lt;/strong&gt; 搜索命令行历史。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 中，使用 &lt;strong&gt;ctrl-w&lt;/strong&gt; 删除你键入的最后一个单词，使用 &lt;strong&gt;ctrl-u&lt;/strong&gt; 删除整行，使用 &lt;strong&gt;alt-b&lt;/strong&gt; 和 &lt;strong&gt;alt-f&lt;/strong&gt; 按单词移动，使用 &lt;strong&gt;ctrl-k&lt;/strong&gt; 从光标处删除到行尾，使用 &lt;strong&gt;ctrl-l&lt;/strong&gt; 清屏。键入 &lt;code&gt;man readline&lt;/code&gt; 查看 Bash 中的默认快捷键，内容很多。例如 &lt;strong&gt;alt-.&lt;/strong&gt; 循环地移向前一个参数，以及 &lt;strong&gt;alt-&lt;/strong&gt;* 展开通配符。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;你喜欢的话，可以键入 &lt;code&gt;set -o vi&lt;/code&gt; 来使用 vi 风格的快捷键。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;键入 &lt;code&gt;history&lt;/code&gt; 查看命令行历史记录。其中有许多缩写，例如 &lt;code&gt;!$&lt;/code&gt;（最后键入的参数）和 &lt;code&gt;!!&lt;/code&gt;（最后键入的命令），尽管通常被 &lt;strong&gt;ctrl-r&lt;/strong&gt; 和 &lt;strong&gt;alt-.&lt;/strong&gt; 取代。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;回到上一个工作路径：&lt;code&gt;cd -&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你输入命令的时候改变了主意，按下 &lt;strong&gt;alt-#&lt;/strong&gt; 在行首添加 &lt;code&gt;#&lt;/code&gt;（将你输入的命令视为注释），并回车。这样做的话，之后你可以很方便的利用命令行历史回到你刚才输入到一半的命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;xargs&lt;/code&gt; （ 或 &lt;code&gt;parallel&lt;/code&gt;）。他们非常给力。注意到你可以控制每行参数个数（&lt;code&gt;-L&lt;/code&gt;）和最大并行数（&lt;code&gt;-P&lt;/code&gt;）。如果你不确定它们是否会按你想的那样工作，先使用 &lt;code&gt;xargs echo&lt;/code&gt; 查看一下。此外，使用 &lt;code&gt;-I{}&lt;/code&gt; 会很方便。例如：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      find . -name &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.py&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs grep some_function
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat hosts &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -I&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; ssh root@&lt;span class=&#34;o&#34;&gt;{}&lt;/span&gt; hostname&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pstree -p&lt;/code&gt; 有助于展示进程树。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;pgrep&lt;/code&gt; 和 &lt;code&gt;pkill&lt;/code&gt; 根据名字查找进程或发送信号。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解你可以发往进程的信号的种类。比如，使用 &lt;code&gt;kill -STOP [pid]&lt;/code&gt; 停止一个进程。使用 &lt;code&gt;man 7 signal&lt;/code&gt; 查看详细列表。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;nohup&lt;/code&gt; 或 &lt;code&gt;disown&lt;/code&gt; 使一个后台进程持续运行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;netstat -lntp&lt;/code&gt; 或 &lt;code&gt;ss -plat&lt;/code&gt; 检查哪些进程在监听端口（默认是检查 TCP 端口; 使用参数 &lt;code&gt;-u&lt;/code&gt; 检查 UDP 端口）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有关打开套接字和文件，请参阅 &lt;code&gt;lsof&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用&lt;code&gt;alias&lt;/code&gt;来创建常用命令的快捷形式。例如：&lt;code&gt;alias ll=&#39;ls -latr&#39;&lt;/code&gt;使你可以方便地执行&lt;code&gt;ls -latr&lt;/code&gt;命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 脚本中，使用 &lt;code&gt;set -x&lt;/code&gt; 去调试输出，尽可能的使用严格模式，使用 &lt;code&gt;set -e&lt;/code&gt; 令脚本在发生错误时退出而不是继续运行，使用 &lt;code&gt;set -o pipefail&lt;/code&gt; 严谨地对待错误（尽管问题可能很微妙）。当牵扯到很多脚本时，使用 &lt;code&gt;trap&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 脚本中，子 shell（使用括号&lt;code&gt;(...)&lt;/code&gt;）是一种便捷的方式去组织参数。一个常见的例子是临时地移动工作路径，代码如下：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# do something in current dir&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /some/other/dir &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; other-command&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# continue in original dir&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 中，注意到其中有许多形式的扩展。检查变量是否存在：&lt;code&gt;${name:?error message}&lt;/code&gt;。例如，当 Bash 脚本需要一个参数时，可以使用这样的代码 &lt;code&gt;input_file=${1:?usage: $0 input_file}&lt;/code&gt;。数学表达式：&lt;code&gt;i=$(( (i + 1) % 5 ))&lt;/code&gt;。序列：&lt;code&gt;{1..10}&lt;/code&gt;。 截断字符串：&lt;code&gt;${var%suffix}&lt;/code&gt; 和 &lt;code&gt;${var#prefix}&lt;/code&gt;。例如，假设 &lt;code&gt;var=foo.pdf&lt;/code&gt;，那么 &lt;code&gt;echo ${var%.pdf}.txt&lt;/code&gt; 将输出 &lt;code&gt;foo.txt&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;通过使用 &lt;code&gt;&amp;lt;(some command)&lt;/code&gt; 可以将输出视为文件。例如，对比本地文件 &lt;code&gt;/etc/hosts&lt;/code&gt; 和一个远程文件：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      diff /etc/hosts &amp;lt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;ssh somehost cat /etc/hosts&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;了解 Bash 中的“here documents”，例如 &lt;code&gt;cat &amp;lt;&amp;lt;EOF ...&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;在 Bash 中，同时重定向标准输出和标准错误，&lt;code&gt;some-command &amp;gt;logfile 2&amp;gt;&amp;amp;1&lt;/code&gt;。通常，为了保证命令不会在标准输入里残留一个打开了的文件句柄导致你当前所在的终端无法操作，添加 &lt;code&gt;&amp;lt;/dev/null&lt;/code&gt; 是一个好习惯。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;man ascii&lt;/code&gt; 查看具有十六进制和十进制值的ASCII表。&lt;code&gt;man unicode&lt;/code&gt;，&lt;code&gt;man utf-8&lt;/code&gt;，以及 &lt;code&gt;man latin1&lt;/code&gt; 有助于你去了解通用的编码信息。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;screen&lt;/code&gt; 或 &lt;a href=&#34;https://tmux.github.io/&#34;&gt;&lt;code&gt;tmux&lt;/code&gt;&lt;/a&gt; 来使用多个屏幕，当你在使用 ssh 时（保存 session 信息）将尤为有用。另一个轻量级的解决方案是 &lt;code&gt;dtach&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ssh 中，了解如何使用 &lt;code&gt;-L&lt;/code&gt; 或 &lt;code&gt;-D&lt;/code&gt;（偶尔需要用 &lt;code&gt;-R&lt;/code&gt;）去开启隧道是非常有用的，例如当你需要从一台远程服务器上访问 web。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对 ssh 设置做一些小优化可能是很有用的，例如这个 &lt;code&gt;~/.ssh/config&lt;/code&gt; 文件包含了防止特定环境下断开连接、压缩数据、多通道等选项：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;      TCPKeepAlive=yes
      ServerAliveInterval=15
      ServerAliveCountMax=6
      Compression=yes
      ControlMaster auto
      ControlPath /tmp/%r@%h:%p
      ControlPersist yes&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;部分其他的关于 ssh 的选项是安全敏感且应当小心启用的。例如在可信任的网络中：&lt;code&gt;StrictHostKeyChecking=no&lt;/code&gt;，&lt;code&gt;ForwardAgent=yes&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;获取文件的八进制格式权限，使用类似如下的代码：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      stat -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;%A %a %n&amp;#39;&lt;/span&gt; /etc/timezone&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;a href=&#34;https://github.com/mooz/percol&#34;&gt;&lt;code&gt;percol&lt;/code&gt;&lt;/a&gt; 或者 &lt;a href=&#34;https://github.com/junegunn/fzf&#34;&gt;&lt;code&gt;fzf&lt;/code&gt;&lt;/a&gt; 可以交互式地从另一个命令输出中选取值。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;fpp&lt;/code&gt;（&lt;a href=&#34;https://github.com/facebook/PathPicker&#34;&gt;PathPicker&lt;/a&gt;）可以与基于另一个命令(例如 &lt;code&gt;git&lt;/code&gt;）输出的文件交互。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将 web 服务器上当前目录下所有的文件（以及子目录）暴露给你所处网络的所有用户，使用：&lt;code&gt;python -m SimpleHTTPServer 7777&lt;/code&gt; （使用端口 7777 和 Python 2）或&lt;code&gt;python -m http.server 7777&lt;/code&gt; （使用端口 7777 和 Python 3）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;以某种权限执行命令，使用&lt;code&gt;sudo&lt;/code&gt;（root 权限）或&lt;code&gt;sudo -u&lt;/code&gt;（其他用户）。使用&lt;code&gt;su&lt;/code&gt;或者&lt;code&gt;sudo bash&lt;/code&gt;来启动一个以对应用户权限运行的 shell。使用&lt;code&gt;su -&lt;/code&gt;模拟其他用户的登录。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;文件及数据处理&#34;&gt;文件及数据处理&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;在当前路径下通过文件名定位一个文件，&lt;code&gt;find . -iname &#39;*something*&#39;&lt;/code&gt;（或类似的）。在所有路径下通过文件名查找文件，使用 &lt;code&gt;locate something&lt;/code&gt; （但请记住 &lt;code&gt;updatedb&lt;/code&gt; 可能没有对最近新建的文件建立索引）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;a href=&#34;https://github.com/ggreer/the_silver_searcher&#34;&gt;&lt;code&gt;ag&lt;/code&gt;&lt;/a&gt; 在源代码或数据文件里检索（比 &lt;code&gt;grep -r&lt;/code&gt; 更好）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;将HTML转为文本：&lt;code&gt;lynx -dump -stdin&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Markdown，HTML，以及所有文档格式之间的转换，试试 &lt;a href=&#34;http://pandoc.org/&#34;&gt;&lt;code&gt;pandoc&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你不得不处理 XML，&lt;code&gt;xmlstarlet&lt;/code&gt; 宝刀未老。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;a href=&#34;http://stedolan.github.io/jq/&#34;&gt;&lt;code&gt;jq&lt;/code&gt;&lt;/a&gt; 处理 JSON。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Excel 或 CSV 文件的处理，&lt;a href=&#34;https://github.com/onyxfish/csvkit&#34;&gt;csvkit&lt;/a&gt; 提供了 &lt;code&gt;in2csv&lt;/code&gt;，&lt;code&gt;csvcut&lt;/code&gt;，&lt;code&gt;csvjoin&lt;/code&gt;，&lt;code&gt;csvgrep&lt;/code&gt; 等工具。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;关于 Amazon S3，&lt;a href=&#34;https://github.com/s3tools/s3cmd&#34;&gt;&lt;code&gt;s3cmd&lt;/code&gt;&lt;/a&gt; 很方便而 &lt;a href=&#34;https://github.com/bloomreach/s4cmd&#34;&gt;&lt;code&gt;s4cmd&lt;/code&gt;&lt;/a&gt; 更快。Amazon 官方的 &lt;a href=&#34;https://github.com/aws/aws-cli&#34;&gt;&lt;code&gt;aws&lt;/code&gt;&lt;/a&gt; 是其他 AWS 相关工作的基础。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解如何使用 &lt;code&gt;sort&lt;/code&gt; 和 &lt;code&gt;uniq&lt;/code&gt;，包括 uniq 的 &lt;code&gt;-u&lt;/code&gt; 参数和 &lt;code&gt;-d&lt;/code&gt; 参数，详见后文一行代码节。另外可以了解一下 &lt;code&gt;comm&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解如何使用 &lt;code&gt;cut&lt;/code&gt;，&lt;code&gt;paste&lt;/code&gt; 和 &lt;code&gt;join&lt;/code&gt; 来更改文件。很多人都会使用 &lt;code&gt;cut&lt;/code&gt;，但几乎都不会使用 &lt;code&gt;join&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解如何运用 &lt;code&gt;wc&lt;/code&gt; 去计算新行数（&lt;code&gt;-l&lt;/code&gt;），字符数（&lt;code&gt;-m&lt;/code&gt;），单词数（&lt;code&gt;-w&lt;/code&gt;）以及字节数（&lt;code&gt;-c&lt;/code&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解如何使用 &lt;code&gt;tee&lt;/code&gt; 将标准输入复制到文件甚至标准输出，例如 &lt;code&gt;ls -al | tee file.txt&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解语言环境对许多命令行工具的微妙影响，包括排序的顺序和性能。大多数 Linux 的安装过程会将 &lt;code&gt;LANG&lt;/code&gt; 或其他有关的变量设置为符合本地的设置。意识到当你改变语言环境时，排序的结果可能会改变。明白国际化可能会时 sort 或其他命令运行效率下降&lt;em&gt;许多倍&lt;/em&gt;。某些情况下（例如集合运算）你可以放心的使用 &lt;code&gt;export LC_ALL=C&lt;/code&gt; 来忽略掉国际化并使用基于字节的顺序。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解 &lt;code&gt;awk&lt;/code&gt; 和 &lt;code&gt;sed&lt;/code&gt; 关于数据的简单处理的用法。例如，将文本文件中第三列的所有数字求和：&lt;code&gt;awk &#39;{ x += $3 } END { print x }&#39;&lt;/code&gt;. 这可能比同等作用的 Python 代码块三倍且代码量少三倍。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;替换一个或多个文件中出现的字符串：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      perl -pi.bak -e &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/old-string/new-string/g&amp;#39;&lt;/span&gt; my-files-*.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;依据某种模式批量重命名多个文件，使用 &lt;code&gt;rename&lt;/code&gt;。对于复杂的重命名规则，&lt;a href=&#34;https://github.com/jlevy/repren&#34;&gt;&lt;code&gt;repren&lt;/code&gt;&lt;/a&gt; 或许有帮助。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Recover backup files foo.bak -&amp;gt; foo:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      rename &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\.bak$//&amp;#39;&lt;/span&gt; *.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;c1&#34;&gt;# Full rename of filenames，directories，and contents foo -&amp;gt; bar:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      repren --full --preserve-case --from foo --to bar .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;shuf&lt;/code&gt; 从一个文件中随机选取行。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解 &lt;code&gt;sort&lt;/code&gt; 的参数。处理数字方面，使用 &lt;code&gt;-n&lt;/code&gt; 或者 &lt;code&gt;-h&lt;/code&gt; 来处理可读性数字（例如 &lt;code&gt;du -h&lt;/code&gt; 的输出）。明白键的工作原理（&lt;code&gt;-t&lt;/code&gt; 和 &lt;code&gt;-k&lt;/code&gt;）。例如，注意到你需要 &lt;code&gt;-k1，1&lt;/code&gt; 来仅按第一个域来排序，而 &lt;code&gt;-k1&lt;/code&gt; 意味着按整行排序。稳定排序（&lt;code&gt;sort -s&lt;/code&gt;）在某些情况下很有用。例如，以第二个域为主关键字，第一个域为次关键字进行排序，你可以使用 &lt;code&gt;sort -k1，1 | sort -s -k2，2&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;如果你想在 Bash 命令行中写 tab 制表符，按下 &lt;strong&gt;ctrl-v&lt;/strong&gt; &lt;strong&gt;[Tab]&lt;/strong&gt; 或键入 &lt;code&gt;$&#39;\t&#39;&lt;/code&gt; （后者可能更好，因为你可以复制粘贴它）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;标准的源代码对比及合并工具是 &lt;code&gt;diff&lt;/code&gt; 和 &lt;code&gt;patch&lt;/code&gt;。使用 &lt;code&gt;diffstat&lt;/code&gt; 查看变更总览数据。注意到 &lt;code&gt;diff -r&lt;/code&gt; 对整个文件夹有效。使用 &lt;code&gt;diff -r tree1 tree2 | diffstat&lt;/code&gt; 查看变更总览数据。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;对于二进制文件，使用 &lt;code&gt;hd&lt;/code&gt; 使其以十六进制显示以及使用 &lt;code&gt;bvi&lt;/code&gt; 来编辑二进制。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;同样对于二进制文件，使用 &lt;code&gt;strings&lt;/code&gt;（包括 &lt;code&gt;grep&lt;/code&gt; 等等）允许你查找一些文本。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;二进制文件对比（Delta 压缩），使用 &lt;code&gt;xdelta3&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;iconv&lt;/code&gt; 更改文本编码。而更高级的用法，可以使用 &lt;code&gt;uconv&lt;/code&gt;，它支持一些高级的 Unicode 功能。例如，这条命令将所有元音字母转为小写并移除了：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      uconv -f utf-8 -t utf-8 -x &lt;span class=&#34;s1&#34;&gt;&amp;#39;::Any-Lower; ::Any-NFD; [:Nonspacing Mark:] &amp;gt;; ::Any-NFC; &amp;#39;&lt;/span&gt; &amp;lt; input.txt &amp;gt; output.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;拆分文件，查看 &lt;code&gt;split&lt;/code&gt;（按大小拆分）和 &lt;code&gt;csplit&lt;/code&gt;（按模式拆分）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;zless&lt;/code&gt;，&lt;code&gt;zmore&lt;/code&gt;，&lt;code&gt;zcat&lt;/code&gt; 和 &lt;code&gt;zgrep&lt;/code&gt;对压缩过的文件进行操作。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;系统调试&#34;&gt;系统调试&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;curl&lt;/code&gt; 和 &lt;code&gt;curl -I&lt;/code&gt; 可以便捷地被应用于 web 调试中，它们的好兄弟 &lt;code&gt;wget&lt;/code&gt; 也可以，或者是更潮的 &lt;a href=&#34;https://github.com/jakubroztocil/httpie&#34;&gt;&lt;code&gt;httpie&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;iostat&lt;/code&gt;、&lt;code&gt;netstat&lt;/code&gt;、&lt;code&gt;top&lt;/code&gt; （&lt;code&gt;htop&lt;/code&gt; 更佳）和 &lt;code&gt;dstat&lt;/code&gt; 去获取硬盘、cpu 和网络的状态。熟练掌握这些工具可以使你快速的对系统的当前状态有一个大概的认识。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;若要对系统有一个深度的总体认识，使用 &lt;a href=&#34;https://github.com/nicolargo/glances&#34;&gt;&lt;code&gt;glances&lt;/code&gt;&lt;/a&gt;。它在一个终端窗口中向你提供一些系统级的数据。这对于快速的检查各个子系统非常有帮助。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;若要了解内存状态，运行并理解 &lt;code&gt;free&lt;/code&gt; 和 &lt;code&gt;vmstat&lt;/code&gt; 的输出。尤其注意“cached”的值，它指的是 Linux 内核用来作为文件缓存的内存大小，因此它与空闲内存无关。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Java 系统调试则是一件截然不同的事，一个可以用于 Oracle 的 JVM 或其他 JVM 上的调试的小技巧是你可以运行 &lt;code&gt;kill -3 &amp;lt;pid&amp;gt;&lt;/code&gt; 同时一个完整的栈轨迹和堆概述（包括 GC 的细节）会被保存到标准输出/日志文件。JDK 中的 &lt;code&gt;jps&lt;/code&gt;，&lt;code&gt;jstat&lt;/code&gt;，&lt;code&gt;jstack&lt;/code&gt;，&lt;code&gt;jmap&lt;/code&gt; 很有用。&lt;a href=&#34;https://github.com/aragozin/jvm-tools&#34;&gt;SJK tools&lt;/a&gt; 更高级.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;mtr&lt;/code&gt; 去跟踪路由，用于确定网络问题。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用 &lt;code&gt;ncdu&lt;/code&gt; 来查看磁盘使用情况，它比常用的命令，如 &lt;code&gt;du -sh *&lt;/code&gt;，更节省时间。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查找正在使用带宽的套接字连接或进程，使用 &lt;code&gt;iftop&lt;/code&gt; 或 &lt;code&gt;nethogs&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ab&lt;/code&gt; 工具（捆绑于 Apache）可以简单粗暴地检查 web 服务器的性能。对于更复杂的负载测试，使用 &lt;code&gt;siege&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;wireshark&lt;/code&gt;，&lt;code&gt;tshark&lt;/code&gt; 和 &lt;code&gt;ngrep&lt;/code&gt; 可用于复杂的网络调试。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解 &lt;code&gt;strace&lt;/code&gt; 和 &lt;code&gt;ltrace&lt;/code&gt;。这俩工具在你的程序运行失败、挂起甚至崩溃，而你却不知道为什么或你想对性能有个总体的认识的时候是非常有用的。注意 profile 参数（&lt;code&gt;-c&lt;/code&gt;）和附加到一个运行的进程参数 （&lt;code&gt;-p&lt;/code&gt;）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解使用 &lt;code&gt;ldd&lt;/code&gt; 来检查共享库。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;了解如何运用 &lt;code&gt;gdb&lt;/code&gt; 连接到一个运行着的进程并获取它的堆栈轨迹。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;学会使用 &lt;code&gt;/proc&lt;/code&gt;。它在调试正在出现的问题的时候有时会效果惊人。比如：&lt;code&gt;/proc/cpuinfo&lt;/code&gt;，&lt;code&gt;/proc/xxx/cwd&lt;/code&gt;，&lt;code&gt;/proc/xxx/exe&lt;/code&gt;，&lt;code&gt;/proc/xxx/fd/&lt;/code&gt;，&lt;code&gt;/proc/xxx/smaps&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;当调试一些之前出现的问题的时候，&lt;code&gt;sar&lt;/code&gt; 非常有用。它展示了 cpu、内存以及网络等的历史数据。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;关于更深层次的系统分析以及性能分析，看看 &lt;code&gt;stap&lt;/code&gt;（&lt;a href=&#34;https://sourceware.org/systemtap/wiki&#34;&gt;SystemTap&lt;/a&gt;），&lt;a href=&#34;http://en.wikipedia.org/wiki/Perf_(Linux)&#34;&gt;&lt;code&gt;perf&lt;/code&gt;&lt;/a&gt;，以及&lt;a href=&#34;https://github.com/draios/sysdig&#34;&gt;&lt;code&gt;sysdig&lt;/code&gt;&lt;/a&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;查看你当前使用的系统，使用 &lt;code&gt;uname&lt;/code&gt; 或者 &lt;code&gt;uname -a&lt;/code&gt; （Unix／kernel 信息） or &lt;code&gt;lsb_release -a&lt;/code&gt; （Linux 发行版信息）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;无论什么东西工作得很欢乐时试试 &lt;code&gt;dmesg&lt;/code&gt;（可能是硬件或驱动问题）。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一行代码&#34;&gt;一行代码&lt;/h2&gt;
&lt;p&gt;一些命令组合的例子：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;当你需要对文本文件做集合交、并、差运算时，结合使用 &lt;code&gt;sort&lt;/code&gt;/&lt;code&gt;uniq&lt;/code&gt; 很有帮助。假设 &lt;code&gt;a&lt;/code&gt; 与 &lt;code&gt;b&lt;/code&gt; 是两内容不同的文件。这种方式效率很高，并且在小文件和上G的文件上都能运用 （&lt;code&gt;sort&lt;/code&gt; 不被内存大小约束，尽管在 &lt;code&gt;/tmp&lt;/code&gt; 在一个小的根分区上时你可能需要 &lt;code&gt;-T&lt;/code&gt; 参数），参阅前文中关于 &lt;code&gt;LC_ALL&lt;/code&gt; 和 &lt;code&gt;sort&lt;/code&gt; 的 &lt;code&gt;-u&lt;/code&gt; 参数的部分。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat a b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is a union b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat a b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -d &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is a intersect b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat a b b &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -u &amp;gt; c   &lt;span class=&#34;c1&#34;&gt;# c is set difference a - b&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;使用 &lt;code&gt;grep . *&lt;/code&gt; 来阅读检查目录下所有文件的内容，例如检查一个充满配置文件的目录比如 &lt;code&gt;/sys&lt;/code&gt;、&lt;code&gt;/proc&lt;/code&gt;、&lt;code&gt;/etc&lt;/code&gt;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;计算文本文件第三列中所有数的和（可能比同等作用的 Python 代码快三倍且代码量少三倍）：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{ x += $3 } END { print x }&amp;#39;&lt;/span&gt; myfile&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;如果你想在文件树上查看大小\日期，这可能看起来像递归版的 &lt;code&gt;ls -l&lt;/code&gt; 但比 &lt;code&gt;ls -lR&lt;/code&gt; 更易于理解：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      find . -type f -ls&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;假设你有一个类似于 web 服务器日志文件的文本文件，并且一个确定的值只会出现在某些行上，假设一个 &lt;code&gt;acct_id&lt;/code&gt; 参数在URI中。如果你想计算出每个 &lt;code&gt;acct_id&lt;/code&gt; 值有多少次请求，使用如下代码：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      cat access.log &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; egrep -o &lt;span class=&#34;s1&#34;&gt;&amp;#39;acct_id=[0-9]+&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; cut -d&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; -f2 &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; uniq -c &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sort -rn&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;运行这个函数从这篇文档中随机获取一条小技巧（解析 Markdown 文件并抽取项目）：&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sh&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; taocl&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        curl -s https://raw.githubusercontent.com/jlevy/the-art-of-command-line/master/README.md &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          pandoc -f markdown -t html &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet fo --html --dropdtd &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet sel -t -v &lt;span class=&#34;s2&#34;&gt;&amp;#34;(html/body/ul/li[count(p)&amp;gt;0])[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$RANDOM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; mod last()+1]&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;          xmlstarlet unesc &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; fmt -80
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;      &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;冷门但有用&#34;&gt;冷门但有用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;expr&lt;/code&gt;：计算表达式或正则匹配&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;m4&lt;/code&gt;：简单地宏处理器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;yes&lt;/code&gt;：多次打印字符串&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cal&lt;/code&gt;：漂亮的日历&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;env&lt;/code&gt;：执行一个命令（脚本文件中很有用）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;printenv&lt;/code&gt;：打印环境变量（调试时或在使用脚本文件时很有用）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;look&lt;/code&gt;：查找以特定字符串开头的单词&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cut&lt;/code&gt;、&lt;code&gt;paste&lt;/code&gt; 和 &lt;code&gt;join&lt;/code&gt;：数据修改&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fmt&lt;/code&gt;：格式化文本段落&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pr&lt;/code&gt;：将文本格式化成页/列形式&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fold&lt;/code&gt;：包裹文本中的几行&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;column&lt;/code&gt;：将文本格式化成多列或表格&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;expand&lt;/code&gt; 和 &lt;code&gt;unexpand&lt;/code&gt;：制表符与空格之间转换&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nl&lt;/code&gt;：添加行号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;seq&lt;/code&gt;：打印数字&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;bc&lt;/code&gt;：计算器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;factor&lt;/code&gt;：分解因数&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;gpg&lt;/code&gt;：加密并签名文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;toe&lt;/code&gt;：terminfo entries 列表&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nc&lt;/code&gt;：网络调试及数据传输&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;socat&lt;/code&gt;：套接字代理，与 &lt;code&gt;netcat&lt;/code&gt; 类似&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;slurm&lt;/code&gt;：网络可视化&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dd&lt;/code&gt;：文件或设备间传输数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;file&lt;/code&gt;：确定文件类型&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tree&lt;/code&gt;：以树的形式显示路径和文件，类似于递归的 &lt;code&gt;ls&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;stat&lt;/code&gt;：文件信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tac&lt;/code&gt;：反向输出文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;shuf&lt;/code&gt;：文件中随机选取几行&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;comm&lt;/code&gt;：一行一行的比较排序过的文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;pv&lt;/code&gt;：监视通过管道的数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;hd&lt;/code&gt; 和 &lt;code&gt;bvi&lt;/code&gt;：保存或编辑二进制文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;strings&lt;/code&gt;：从二进制文件中抽取文本&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;tr&lt;/code&gt;：转换字母&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;iconv&lt;/code&gt; 或 &lt;code&gt;uconv&lt;/code&gt;：简易的文件编码&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;split&lt;/code&gt; 和 &lt;code&gt;csplit&lt;/code&gt;：分割文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;units&lt;/code&gt;：将一种计量单位转换为另一种等效的计量单位（参阅 &lt;code&gt;/usr/share/units/definitions.units&lt;/code&gt;）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;7z&lt;/code&gt;：高比例的文件压缩&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ldd&lt;/code&gt;：动态库信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;nm&lt;/code&gt;：提取 obj 文件中的符号&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ab&lt;/code&gt;：性能分析 web 服务器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;strace&lt;/code&gt;：系统调用调试&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;mtr&lt;/code&gt;：更好的网络调试跟踪工具&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;cssh&lt;/code&gt;：可视化的并发 shell&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;rsync&lt;/code&gt;：通过 ssh 或本地文件系统同步文件和文件夹&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;wireshark&lt;/code&gt; 和 &lt;code&gt;tshark&lt;/code&gt;：抓包和网络调试工具&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ngrep&lt;/code&gt;：网络层的 grep&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;host&lt;/code&gt; 和 &lt;code&gt;dig&lt;/code&gt;：DNS 查找&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsof&lt;/code&gt;：列出当前系统打开文件的工具以及查看端口信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dstat&lt;/code&gt;：系统状态查看&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/nicolargo/glances&#34;&gt;&lt;code&gt;glances&lt;/code&gt;&lt;/a&gt;：高层次的多子系统总览&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;iostat&lt;/code&gt;：CPU 和硬盘状态&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;htop&lt;/code&gt;：top 的加强版&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;last&lt;/code&gt;：登入记录&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;w&lt;/code&gt;：查看处于登录状态的用户&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;id&lt;/code&gt;：用户/组 ID 信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;sar&lt;/code&gt;：系统历史数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;iftop&lt;/code&gt; 或 &lt;code&gt;nethogs&lt;/code&gt;：套接字及进程的网络利用&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;ss&lt;/code&gt;：套接字数据&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;dmesg&lt;/code&gt;：引导及系统错误信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;hdparm&lt;/code&gt;：SATA/ATA 磁盘更改及性能分析&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsb_release&lt;/code&gt;：Linux 发行版信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lsblk&lt;/code&gt;：列出块设备信息：以树形展示你的磁盘以及磁盘分区信息&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;lshw&lt;/code&gt;，&lt;code&gt;lscpu&lt;/code&gt;，&lt;code&gt;lspci&lt;/code&gt;，&lt;code&gt;lsusb&lt;/code&gt; 和 &lt;code&gt;dmidecode&lt;/code&gt;：查看硬件信息，包括 CPU、BIOS、RAID、显卡、USB设备等&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;code&gt;fortune&lt;/code&gt;，&lt;code&gt;ddate&lt;/code&gt; 和 &lt;code&gt;sl&lt;/code&gt;：额，这主要取决于你是否认为蒸汽火车和莫名其妙的名人名言是否“有用”&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;仅限-mac-系统&#34;&gt;仅限 Mac 系统&lt;/h2&gt;
&lt;p&gt;以下是&lt;em&gt;仅限于&lt;/em&gt; Mac 系统的技巧&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;用 &lt;code&gt;brew&lt;/code&gt; （Homebrew）或者 &lt;code&gt;port&lt;/code&gt; （MacPorts）进行包管理。这些可以用来在 Mac 系统上安装以上的大多数命令。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用 &lt;code&gt;pbcopy&lt;/code&gt; 复制任何命令的输出到桌面应用，用 &lt;code&gt;pbpaste&lt;/code&gt; 粘贴输入。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;用 &lt;code&gt;open&lt;/code&gt; 或者 &lt;code&gt;open -a /Applications/Whatever.app&lt;/code&gt; 使用桌面应用打开文件。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Spotlight： 用 &lt;code&gt;mdfind&lt;/code&gt; 搜索文件，用 &lt;code&gt;mdls&lt;/code&gt; 列出元数据（例如照片的 EXIF 信息）。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;注意 Mac 系统是基于 BSD UNIX 的，许多命令（例如 &lt;code&gt;ps&lt;/code&gt;，&lt;code&gt;ls&lt;/code&gt;，&lt;code&gt;tail&lt;/code&gt;，&lt;code&gt;awk&lt;/code&gt;，&lt;code&gt;sed&lt;/code&gt;）都和 Linux 中有些微的不同，这些极大的被 System V-style Unix 和 GNU 工具影响。你可以通过标题为 &amp;ldquo;BSD General Commands Manual&amp;rdquo; 的 man 页面发现这些不同。在有些情况下 GNU 版本的命令也可能被安装（例如 &lt;code&gt;gawk&lt;/code&gt; 和 &lt;code&gt;gsed&lt;/code&gt; 对应 GNU 中的 awk 和 sed ）。如果要写跨平台的 Bash 脚本，避免使用这些命令（例如，考虑 Python 或者 &lt;code&gt;perl&lt;/code&gt; ）或者经过仔细的测试。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;更多资源&#34;&gt;更多资源&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/alebcay/awesome-shell&#34;&gt;awesome-shell&lt;/a&gt;：一份精心组织的命令行工具及资源的列表。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://redsymbol.net/articles/unofficial-bash-strict-mode/&#34;&gt;Strict mode&lt;/a&gt;：为了编写更好的脚本文件。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;免责声明&#34;&gt;免责声明&lt;/h2&gt;
&lt;p&gt;除去特别微小的任务，记录下这些代码以便他人查看。责任往往伴随着能力，&lt;em&gt;可以&lt;/em&gt;做并不意味着应该做。&lt;/p&gt;
&lt;h2 id=&#34;授权条款&#34;&gt;授权条款&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;&lt;img src=&#34;https://i.creativecommons.org/l/by-sa/4.0/88x31.png&#34; alt=&#34;Creative Commons License&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;本文使用授权协议 &lt;a href=&#34;http://creativecommons.org/licenses/by-sa/4.0/&#34;&gt;Creative Commons Attribution-ShareAlike 4.0 International License&lt;/a&gt;。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PHP PSR编码规范</title>
        <link>https://www.bg7pbp.com/p/php-psr-coding-standard/</link>
        <pubDate>Sun, 19 Jul 2015 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-psr-coding-standard/</guid>
        <description>&lt;p&gt;本文档是PHP互操作性框架制定小组（PHP-FIG :PHP Framework Interoperability Group）制定的PHP编码规范（PSR:Proposing a Standards Recommendation）中译版。&lt;/p&gt;
&lt;p&gt;目前官方已制定的规范包括以下六份文件：PSR-0 (已弃用)、PSR-1、PSR-2、PSR-2补充、PSR-3&lt;/p&gt;
&lt;p&gt;本文转自于&lt;a href=&#34;https://github.com/PizzaLiu/PHP-FIG&#34;&gt;《PHP-FIG PSR中文版》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_01.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_01.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_02.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_02.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_03.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_03.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_04.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_04.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_05.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_05.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_06.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_06.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_07.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_07.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_08.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_08.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_09.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_09.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_10.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_10.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_11.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_11.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_12.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_12.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_13.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_13.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_14.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_14.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_15.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_15.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_16.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_16.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_17.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_17.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_18.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_18.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_19.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_19.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_20.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_20.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_21.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_21.jpg&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;https://img.cdn.wangyan.cloud/p/php-fig_22.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-fig_22.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu 设置日期和时间</title>
        <link>https://www.bg7pbp.com/p/ubuntu-set-date-time/</link>
        <pubDate>Mon, 01 Jun 2015 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-set-date-time/</guid>
        <description>&lt;h2 id=&#34;一设置时区&#34;&gt;一、设置时区&lt;/h2&gt;
&lt;h3 id=&#34;方法1&#34;&gt;方法1&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Asia/Shanghai&amp;#34;&lt;/span&gt; &amp;gt; /etc/timezone &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install -y tzdata &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure -f noninteractive tzdata&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Docker 容器中，设置时区&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-v /etc/localtime:/etc/localtime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在 dockerfile 中&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;FROM ubuntu:latest
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ENV TZ Asia/Shanghai
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RUN &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; &amp;gt; /etc/timezone &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt-get install -y tzdata &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    rm /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ln -snf /usr/share/zoneinfo/&lt;span class=&#34;nv&#34;&gt;$TZ&lt;/span&gt; /etc/localtime &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    dpkg-reconfigure -f noninteractive tzdata &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    apt-get clean&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;方法2&#34;&gt;方法2&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-timezone Asia/Shanghai&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二时间同步&#34;&gt;二、时间同步&lt;/h2&gt;
&lt;h3 id=&#34;方法1-1&#34;&gt;方法1&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install ntpdate &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ntpdate -d cn.pool.ntp.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;方法2-1&#34;&gt;方法2&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt -y install ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 配置&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /etc/ntp.conf /etc/ntp.conf.bak
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;/etc/ntp.conf &lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server 0.cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server 1.cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server 2.cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;server 3.cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 同步&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service ntp restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps -ef &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep ntpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ntpq -p&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;方法3&#34;&gt;方法3&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;shell&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-ntp yes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 7 设置日期和时间</title>
        <link>https://www.bg7pbp.com/p/centos-timedatectl-set-time/</link>
        <pubDate>Thu, 28 May 2015 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-timedatectl-set-time/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%9F%BA%E6%9C%AC%E6%A6%82%E5%BF%B5&#34;&gt;一、基本概念&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-gmtutccstdst-%E6%97%B6%E9%97%B4&#34;&gt;1.1 GMT、UTC、CST、DST 时间&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-utc&#34;&gt;(1) UTC&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-gmt&#34;&gt;(2) GMT&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-cst&#34;&gt;(3) CST&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-dst&#34;&gt;(4) DST&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E7%A1%AC%E4%BB%B6%E6%97%B6%E9%92%9F%E5%92%8C%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F&#34;&gt;1.2 硬件时钟和系统时钟&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E7%A1%AC%E4%BB%B6%E6%97%B6%E9%92%9F&#34;&gt;(1) 硬件时钟&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E7%B3%BB%E7%BB%9F%E6%97%B6%E9%92%9F&#34;&gt;(2) 系统时钟&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Ctimedatectl-%E5%91%BD%E4%BB%A4&#34;&gt;二、timedatectl 命令&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E8%AF%BB%E5%8F%96%E6%97%B6%E9%97%B4&#34;&gt;2.1 读取时间&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E8%AE%BE%E7%BD%AE%E6%97%B6%E9%97%B4&#34;&gt;2.2 设置时间&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%88%97%E5%87%BA%E6%89%80%E6%9C%89%E6%97%B6%E5%8C%BA&#34;&gt;2.3 列出所有时区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E8%AE%BE%E7%BD%AE%E6%97%B6%E5%8C%BA&#34;&gt;2.4 设置时区&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#25-%E6%98%AF%E5%90%A6ntp%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%90%8C%E6%AD%A5&#34;&gt;2.5 是否NTP服务器同步&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26-%E5%B0%86%E7%A1%AC%E4%BB%B6%E6%97%B6%E9%92%9F%E8%B0%83%E6%95%B4%E4%B8%BA%E4%B8%8E%E6%9C%AC%E5%9C%B0%E6%97%B6%E9%92%9F%E4%B8%80%E8%87%B4&#34;&gt;2.6 将硬件时钟调整为与本地时钟一致&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26-%E7%A1%AC%E4%BB%B6%E6%97%B6%E9%97%B4%E8%AE%BE%E7%BD%AE%E6%88%90-utc&#34;&gt;2.6 硬件时间设置成 UTC：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在CentOS 6版本，时间设置有&lt;code&gt;date&lt;/code&gt;、&lt;code&gt;hwclock&lt;/code&gt;命令，从CentOS 7开始，使用了一个新的命令&lt;code&gt;timedatectl&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;一基本概念&#34;&gt;一、基本概念&lt;/h2&gt;
&lt;h3 id=&#34;11-gmtutccstdst-时间&#34;&gt;1.1 GMT、UTC、CST、DST 时间&lt;/h3&gt;
&lt;h4 id=&#34;1-utc&#34;&gt;(1) UTC&lt;/h4&gt;
&lt;p&gt;整个地球分为二十四时区，每个时区都有自己的本地时间。在国际无线电通信场合，为了统一起见，使用一个统一的时间，称为通用协调时(UTC, Universal Time Coordinated)。&lt;/p&gt;
&lt;h4 id=&#34;2-gmt&#34;&gt;(2) GMT&lt;/h4&gt;
&lt;p&gt;格林威治标准时间 (Greenwich Mean Time)指位于英国伦敦郊区的皇家格林尼治天文台的标准时间，因为本初子午线被定义在通过那里的经线。(UTC与GMT时间基本相同，本文中不做区分)&lt;/p&gt;
&lt;h4 id=&#34;3-cst&#34;&gt;(3) CST&lt;/h4&gt;
&lt;p&gt;中国标准时间 (China Standard Time)&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GMT + 8 = UTC + 8 = CST&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 id=&#34;4-dst&#34;&gt;(4) DST&lt;/h4&gt;
&lt;p&gt;夏令时(Daylight Saving Time) 指在夏天太阳升起的比较早时，将时钟拨快一小时，以提早日光的使用。（中国不使用）&lt;/p&gt;
&lt;h3 id=&#34;12-硬件时钟和系统时钟&#34;&gt;1.2 硬件时钟和系统时钟&lt;/h3&gt;
&lt;h4 id=&#34;1-硬件时钟&#34;&gt;(1) 硬件时钟&lt;/h4&gt;
&lt;p&gt;RTC(Real-Time Clock)或CMOS时钟，一般在主板上靠电池供电，服务器断电后也会继续运行。仅保存日期时间数值，无法保存时区和夏令时设置。&lt;/p&gt;
&lt;h4 id=&#34;2-系统时钟&#34;&gt;(2) 系统时钟&lt;/h4&gt;
&lt;p&gt;一般在服务器启动时复制RTC时间，之后独立运行，保存了时间、时区和夏令时设置。&lt;/p&gt;
&lt;h2 id=&#34;二timedatectl-命令&#34;&gt;二、timedatectl 命令&lt;/h2&gt;
&lt;h3 id=&#34;21-读取时间&#34;&gt;2.1 读取时间&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/t/timedatectl-1.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/t/timedatectl-1.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl //等同于 timedatectl status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-设置时间&#34;&gt;2.2 设置时间&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-time &lt;span class=&#34;s2&#34;&gt;&amp;#34;YYYY-MM-DD HH:MM:SS&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-列出所有时区&#34;&gt;2.3 列出所有时区&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl list-timezones&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24-设置时区&#34;&gt;2.4 设置时区&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-timezone Asia/Shanghai&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;25-是否ntp服务器同步&#34;&gt;2.5 是否NTP服务器同步&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-ntp yes //yes或者no&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;26-将硬件时钟调整为与本地时钟一致&#34;&gt;2.6 将硬件时钟调整为与本地时钟一致&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-local-rtc &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hwclock --systohc --localtime //与上面命令效果一致&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt; 硬件时钟默认使用UTC时间，因为硬件时钟不能保存时区和夏令时调整，修改后就无法从硬件时钟中读取出准确标准时间，因此不建议修改。修改后系统会出现下面的警告。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/t/timedatectl-2.jpg&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/t/timedatectl-2.jpg&#34; width=&#34;480&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 id=&#34;26-硬件时间设置成-utc&#34;&gt;2.6 硬件时间设置成 UTC：&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;timedatectl set-local-rtc &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;hwclock --systohc --utc  //与上面命令效果一致&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Markdown 语法简明笔记</title>
        <link>https://www.bg7pbp.com/p/markdown-syntax-guide/</link>
        <pubDate>Sat, 28 Mar 2015 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/markdown-syntax-guide/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%8F%90%E7%A4%BA&#34;&gt;提示&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%A0%87%E9%A2%98-&#34;&gt;标题 (#)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%BC%95%E7%94%A8-&#34;&gt;引用 (&amp;gt;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%97%A0%E5%BA%8F%E5%88%97%E8%A1%A8--&#34;&gt;无序列表 (-)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%9C%89%E5%BA%8F%E5%88%97%E8%A1%A8-%E6%95%B0%E5%AD%97&#34;&gt;有序列表 (数字)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%97%E8%A1%A8%E5%B5%8C%E5%A5%97-%E5%9B%9B%E4%B8%AA%E7%A9%BA%E6%A0%BC&#34;&gt;列表嵌套 (四个空格)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%A3%E7%A0%81%E5%9D%97&#34;&gt;代码块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%86%E5%89%B2%E7%BA%BF----&#34;&gt;分割线 (&amp;mdash;)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%A1%8C%E5%86%85%E5%BC%8F%E9%93%BE%E6%8E%A5&#34;&gt;行内式链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8F%82%E8%80%83%E5%BC%8F%E9%93%BE%E6%8E%A5-%E6%9C%89%E6%A0%87%E8%AF%86&#34;&gt;参考式链接 (有标识)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8F%82%E8%80%83%E5%BC%8F%E9%93%BE%E6%8E%A5-%E9%9A%90%E8%97%8F%E6%A0%87%E8%AF%86&#34;&gt;参考式链接 (隐藏标识)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%B2%97%E4%BD%93%E5%92%8C%E6%96%9C%E4%BD%93&#34;&gt;粗体和斜体&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%A3%E7%A0%81-&#34;&gt;代码 (``)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%BE%E7%89%87-%E8%A1%8C%E5%86%85%E5%BC%8F&#34;&gt;图片 (行内式)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%BE%E7%89%87-%E5%8F%82%E8%80%83%E5%BC%8F&#34;&gt;图片 (参考式)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%87%AA%E5%8A%A8%E9%93%BE%E6%8E%A5&#34;&gt;自动链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8F%8D%E6%96%9C%E6%9D%A0&#34;&gt;反斜杠&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;提示&#34;&gt;提示&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Markdown 中可以插入HTML,但HTML标签前后需空行且不能缩进或空格。&lt;/li&gt;
&lt;li&gt;输入&lt;code&gt;&amp;amp;&lt;/code&gt;自动转换成&lt;code&gt;&amp;amp;amp;&lt;/code&gt;，两者现实效果一致，还有&lt;code&gt;&amp;amp;copy;&lt;/code&gt; 等于 &lt;code&gt;©&lt;/code&gt;。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;标题-&#34;&gt;标题 (#)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# 这是 H1
## 这是 H2
......
###### 这是 H6&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;引用-&#34;&gt;引用 (&amp;gt;)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;gt; 引用里面可以插入其他Markdown，也可互相嵌套。&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;无序列表--&#34;&gt;无序列表 (-)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- Red
- Green
- Blue&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;有序列表-数字&#34;&gt;有序列表 (数字)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1.  Bird
2.  McHale
3.  Parish&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;列表嵌套-四个空格&#34;&gt;列表嵌套 (四个空格)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;- 一级列表2
    - 二级列表
- 一级列表2
    - 二级列表
        - 三级列表&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;代码块&#34;&gt;代码块&lt;/h2&gt;
&lt;p&gt;支持的语言：&lt;code&gt;actionscript, apache, bash, clojure, cmake, coffeescript, cpp, cs, css, d, delphi, django, erlang, go, haskell, html, http, ini, java, javascript, json, lisp, lua, markdown, matlab, nginx, objectivec, perl, php, python, r, ruby, scala, smalltalk, sql, tex, vbscript, xml&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;也可以使用 4 空格缩进，再贴上代码，实现相同的的效果&lt;/p&gt;
&lt;h2 id=&#34;分割线-&#34;&gt;分割线 (&amp;mdash;)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;三个或更多的 --- 号&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;行内式链接&#34;&gt;行内式链接&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[an example](http://example.com/ &amp;#34;Title&amp;#34;) 
[About](/about/) //相对地址&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;参考式链接-有标识&#34;&gt;参考式链接 (有标识)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;这个链接用 1 作为网址变量。
[example][1]
[1]: http://example.com/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;参考式链接-隐藏标识&#34;&gt;参考式链接 (隐藏标识)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[google][]
[google]: http://google.com/&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;粗体和斜体&#34;&gt;粗体和斜体&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;** 粗体 ** 
* 斜体 *&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;代码-&#34;&gt;代码 (``)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Use the `printf()` function.&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Use the &lt;code&gt;printf()&lt;/code&gt; function.&lt;/p&gt;
&lt;h2 id=&#34;图片-行内式&#34;&gt;图片 (行内式)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;![Alt text](/path/to/img.jpg &amp;#34;Optional title&amp;#34;) //与链接的区别在于有感叹号&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;图片-参考式&#34;&gt;图片 (参考式)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;![Alt text][id] //有感叹号
[id]: url/to/image&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;自动链接&#34;&gt;自动链接&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;http://example.com/&amp;gt;
&amp;lt;address@example.com&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;反斜杠&#34;&gt;反斜杠&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;\*literal asterisks\*&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Markdown 支持以下这些符号前面加上反斜杠来帮助插入普通的符号：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;反斜线 反引号 星号 下划线 花括号 方括号 
括号 井字号 加号 减号 英文句点 惊叹号&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Apache2.4 访问控制</title>
        <link>https://www.bg7pbp.com/p/apache-access-control/</link>
        <pubDate>Tue, 12 Aug 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/apache-access-control/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6&#34;&gt;一、访问控制&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E4%BE%8B1%E6%89%80%E6%9C%89%E8%AF%B7%E6%B1%82%E9%83%BD%E8%A2%AB%E6%8B%92%E7%BB%9D&#34;&gt;实例1：所有请求都被拒绝&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E4%BE%8B2%E6%89%80%E6%9C%89%E8%AF%B7%E6%B1%82%E9%83%BD%E8%A2%AB%E5%85%81%E8%AE%B8&#34;&gt;实例2：所有请求都被允许&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%9E%E4%BE%8B3exampleorg%E6%89%80%E6%9C%89%E8%AF%B7%E6%B1%82%E9%83%BD%E8%A2%AB%E5%85%81%E8%AE%B8%E5%85%B6%E4%BB%96%E6%8B%92%E7%BB%9D&#34;&gt;实例3：example.org所有请求都被允许，其他拒绝&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Capache-require-%E6%8C%87%E4%BB%A4&#34;&gt;二、Apache Require 指令&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文翻译自官方文档：&lt;a href=&#34;http://httpd.apache.org/docs/2.4/upgrading.html&#34;&gt;《Upgrading to 2.4 from 2.2》&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一访问控制&#34;&gt;一、访问控制&lt;/h2&gt;
&lt;p&gt;在Apache2.2版本中，访问控制是基于客户端的主机名、IP地址以及客户端请求中的其他特征，使用Order(排序), Allow(允许), Deny(拒绝),Satisfy(满足)指令来实现。&lt;/p&gt;
&lt;p&gt;在Apache2.4版本中，使用mod_authz_host这个新的模块，来实现访问控制，其他授权检查也以同样的方式来完成。旧的访问控制语句应当被新的授权认证机制所取代，即便Apache已经提供了mod_access_compat这一新模块来兼容旧语句。&lt;/p&gt;
&lt;p&gt;这里有一些实例，用新方法取代旧语句实现相同的访问控制&lt;/p&gt;
&lt;h3 id=&#34;实例1所有请求都被拒绝&#34;&gt;实例1：所有请求都被拒绝&lt;/h3&gt;
&lt;p&gt;Apache2.2 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Order deny,allow &lt;span class=&#34;c1&#34;&gt;#排序，先拒绝后允许&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Deny from all &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Apache2.4 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Require all denied &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;实例2所有请求都被允许&#34;&gt;实例2：所有请求都被允许&lt;/h3&gt;
&lt;p&gt;Apache2.2 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Order allow,deny &lt;span class=&#34;c1&#34;&gt;#排序，先允许后拒绝&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Allow from all &lt;span class=&#34;c1&#34;&gt;#允许所有&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Apache2.4 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Require all granted &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;实例3exampleorg所有请求都被允许其他拒绝&#34;&gt;实例3：example.org所有请求都被允许，其他拒绝&lt;/h3&gt;
&lt;p&gt;Apache2.2 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Order Deny,Allow &lt;span class=&#34;c1&#34;&gt;#排序，先拒绝后允许&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Deny from all &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Allow from example.org &lt;span class=&#34;c1&#34;&gt;#允许example.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Apache2.4 配置:&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Require host example.org &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二apache-require-指令&#34;&gt;二、Apache Require 指令&lt;/h2&gt;
&lt;p&gt;了解更多require指令用法：&lt;a href=&#34;http://httpd.apache.org/docs/2.4/mod/mod_authz_core.html#require&#34;&gt;《Apache Module mod_authz_core》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;附：常见访问控制指令&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require all granted &lt;span class=&#34;c1&#34;&gt;#允许所有&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require all denied &lt;span class=&#34;c1&#34;&gt;#拒绝所有&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require env env-var &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;env-var&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ... &lt;span class=&#34;c1&#34;&gt;#允许，匹配环境变量中任意一个&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require method http-method &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;http-method&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ... &lt;span class=&#34;c1&#34;&gt;#允许，特定的HTTP方法&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require expr expression &lt;span class=&#34;c1&#34;&gt;#允许，表达式为true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require user userid &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; userid &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ... &lt;span class=&#34;c1&#34;&gt;#允许，特定用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require group group-name &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;group-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; ... &lt;span class=&#34;c1&#34;&gt;#允许，特定用户组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require valid-user &lt;span class=&#34;c1&#34;&gt;# #允许，有效用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Require ip &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt; 172.20 192.168.2 &lt;span class=&#34;c1&#34;&gt;#允许 特定IP&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>CentOS 7 创建本地YUM源</title>
        <link>https://www.bg7pbp.com/p/centos-create-local-yum-repo/</link>
        <pubDate>Sun, 10 Aug 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-create-local-yum-repo/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8centos%E5%85%89%E7%9B%98%E4%BD%9C%E4%B8%BA%E6%9C%AC%E5%9C%B0yum%E6%BA%90&#34;&gt;使用CentOS光盘作为本地yum源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BArepo%E6%96%87%E4%BB%B6&#34;&gt;创建repo文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%A6%82%E4%BD%95%E4%B8%BAcentos%E5%88%9B%E5%BB%BA%E5%85%AC%E5%85%B1%E9%95%9C%E5%83%8F&#34;&gt;如何为CentOS创建公共镜像&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BA%E5%AE%8C%E5%85%A8%E8%87%AA%E5%AE%9A%E4%B9%89%E7%9A%84%E6%9C%AC%E5%9C%B0%E6%BA%90&#34;&gt;创建完全自定义的本地源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BA%E6%9C%AC%E5%9C%B0yum%E4%BB%93%E5%BA%93&#34;&gt;创建本地yum仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BArepo%E6%96%87%E4%BB%B6-1&#34;&gt;创建repo文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85createrepo&#34;&gt;安装createrepo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%9B%E5%BB%BA%E7%B4%A2%E5%BC%95&#34;&gt;创建索引&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文中的“本地YUM源”包括三种类型：一是直接使用CentOS光盘作为本地yum源，优点是简单便捷，缺点是光盘软件包可能不完整(centos 7 Everything 总共才6.57G)；二是同步CentOS官方源到本地（相当于创建了一个公共镜像），优点是最靠谱，缺点是占空间费流量；三是创建完全自定义的本地源，优点是灵活性最大，缺点是只是作为其他源的补充。&lt;/p&gt;
&lt;h2 id=&#34;使用centos光盘作为本地yum源&#34;&gt;使用CentOS光盘作为本地yum源&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;实体机上直接放入光盘&lt;/li&gt;
&lt;li&gt;VMware Workstation 虚拟机：虚拟机&amp;ndash;&amp;gt;可移动设备&amp;ndash;&amp;gt;CD/DVD&amp;ndash;&amp;gt;连接&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /mnt/cdrom &lt;span class=&#34;c1&#34;&gt;#创建目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/cdrom /mnt/cdrom &lt;span class=&#34;c1&#34;&gt;#挂载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umount /mnt/cdrom &lt;span class=&#34;c1&#34;&gt;#卸载&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;若不想每次都要放光盘，那就复制光盘文件到本地硬盘吧&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -avf /mnt/cdrom /yum &lt;span class=&#34;c1&#34;&gt;# -a：该选项保留链接、文件属性，并递归地复制目录&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;创建repo文件&#34;&gt;创建repo文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;/etc/yum.repos.d/CentOS-Local.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Local]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=Local Yum
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=file:///yum/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KE&lt;/span&gt;Y-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;问：为什么连createrepo软件都不用安装？&lt;/p&gt;
&lt;p&gt;createrepo 的作用是创建索引文件的(位于repodata文件夹)，光盘中连GPG-KEY都有了。&lt;/p&gt;
&lt;h2 id=&#34;如何为centos创建公共镜像&#34;&gt;如何为CentOS创建公共镜像&lt;/h2&gt;
&lt;p&gt;详细说明见官方中文文档：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://wiki.centos.org/zh/HowTos/CreatePublicMirrors&#34;&gt;http://wiki.centos.org/zh/HowTos/CreatePublicMirrors&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;提供一个SHELL脚本，然后cron自动运行~~&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://www.wangyan.cloud/centos-local-yum-repo.html&#34;&gt;http://www.wangyan.cloud/centos-local-yum-repo.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;脚本稍作修改，换成中科大的镜像源。可用镜像列表见：&lt;a href=&#34;http://www.centos.org/download/mirrors/&#34;&gt;http://www.centos.org/download/mirrors/&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;localpath&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/mirrors/CentOS&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;mirror&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;mirrors.hustunique.com::centos&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;rsync&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;rsync -avzH --delete&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;verlist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;7&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;baselist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;centosplus extras fasttrack os updates&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;archlist&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;x86_64&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; ver in &lt;span class=&#34;nv&#34;&gt;$verlist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; base in &lt;span class=&#34;nv&#34;&gt;$baselist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; arch in &lt;span class=&#34;nv&#34;&gt;$archlist&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nv&#34;&gt;remote&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$mirror&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$ver&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$base&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$arch&lt;/span&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			mkdir -pv &lt;span class=&#34;nv&#34;&gt;$localpath&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$ver&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$base&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$arch&lt;/span&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nv&#34;&gt;$rsync&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$remote&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$localpath&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$ver&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$base&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$arch&lt;/span&gt;/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;创建完全自定义的本地源&#34;&gt;创建完全自定义的本地源&lt;/h2&gt;
&lt;p&gt;把平时收藏的一些RPM软件包放在一个目录里，就变成一个自定义源了，可以用YUM来管理，灵活性相当大。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;官方教程：&lt;a href=&#34;http://yum.baseurl.org/wiki/RepoCreate&#34;&gt;http://yum.baseurl.org/wiki/RepoCreate&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;创建本地yum仓库&#34;&gt;创建本地yum仓库&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /yum/local &lt;span class=&#34;c1&#34;&gt;#可以有N级目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp ... &lt;span class=&#34;c1&#34;&gt;#复制RPM包到上述目录&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;创建repo文件-1&#34;&gt;创建repo文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;/etc/yum.repos.d/CentOS-Local.repo&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;[Local]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;name=Local Yum
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;baseurl=file:///yum/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgcheck=1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KE&lt;/span&gt;Y-CentOS-7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;enabled&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;安装createrepo&#34;&gt;安装createrepo&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum install createrepo &lt;span class=&#34;c1&#34;&gt;#使用yum安装createrepo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rpm -ivh http://mirror.centos.org/centos/7/os/x86_64/Packages/createrepo-0.9.9-23.el7.noarch.rpm&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;创建索引&#34;&gt;创建索引&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;createrepo /yum 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum makecache &lt;span class=&#34;c1&#34;&gt;#更新缓存&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;</description>
        </item>
        <item>
        <title>PHP技术札记6：PHP中的函数</title>
        <link>https://www.bg7pbp.com/p/php-functions/</link>
        <pubDate>Mon, 21 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-functions/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%BD%E6%95%B0%E7%9A%84%E5%A3%B0%E6%98%8E&#34;&gt;一、函数的声明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E8%AF%AD%E6%B3%95%E7%BB%93%E6%9E%84&#34;&gt;1、语法结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%87%BD%E6%95%B0%E8%B0%83%E7%94%A8&#34;&gt;2、函数调用&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%87%BD%E6%95%B0%E4%B8%AD%E7%9A%84%E5%8F%98%E9%87%8F&#34;&gt;二、函数中的变量&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%8F%98%E9%87%8F%E8%8C%83%E5%9B%B4&#34;&gt;1、变量范围&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2php%E9%9D%99%E6%80%81%E5%8F%98%E9%87%8F&#34;&gt;2、PHP静态变量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%8F%98%E9%87%8F%E5%87%BD%E6%95%B0&#34;&gt;3、变量函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%87%BD%E6%95%B0%E5%88%86%E7%B1%BB%E5%8F%8A%E5%A3%B0%E6%98%8E&#34;&gt;三、函数分类及声明&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%87%BD%E6%95%B0%E5%88%86%E7%B1%BB&#34;&gt;1、函数分类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%A3%B0%E6%98%8E%E5%A4%9A%E4%B8%AA%E5%8F%82%E6%95%B0%E5%87%BD%E6%95%B0&#34;&gt;2、声明多个参数函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%87%BD%E6%95%B0%E6%B3%A8%E9%87%8A%E8%A7%84%E8%8C%83&#34;&gt;3、函数注释规范&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bcallback-%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0&#34;&gt;四、Callback 回调函数&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#php%E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%E7%9A%84%E5%AE%9E%E7%8E%B0%E6%96%B9%E6%B3%95&#34;&gt;PHP回调函数的实现方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%86%85%E9%83%A8%E5%87%BD%E6%95%B0&#34;&gt;五、内部函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一函数的声明&#34;&gt;一、函数的声明&lt;/h2&gt;
&lt;h3 id=&#34;1语法结构&#34;&gt;1、语法结构&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;函数名&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;参数列表&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;函数体&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//可选
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;返回值&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//return可选
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&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;/ul&gt;
&lt;h3 id=&#34;2函数调用&#34;&gt;2、函数调用&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//形参：在声明函数时声明的参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// $x = 1; //如果在函数内对参数赋值，则会覆盖实参。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;// $y = 2;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$sum&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$sum&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$x&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//执行到return函数结束，后面不再执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//实参：在调用函数时传递给形参的数值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sum&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//通过return返回数据可作为值使用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二函数中的变量&#34;&gt;二、函数中的变量&lt;/h2&gt;
&lt;h3 id=&#34;1变量范围&#34;&gt;1、变量范围&lt;/h3&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;在PHP函数中使用全局变量，要通过global关键字将这个全局变量包含到函数中才能使用&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//global 须放在前面
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//global $a,$b global 可包含多个全局变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;//$GLOBALS[&amp;#39;a&amp;#39;] //声明全局变量 方法二
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;global&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2php静态变量&#34;&gt;2、PHP静态变量&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;静态变量可以在同一个函数中多次调用中共用&lt;/li&gt;
&lt;li&gt;静态变量只能在函数或类中声明，不能在全局声明。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//定义静态变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//输出1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//输出2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3变量函数&#34;&gt;3、变量函数&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//变量名后面右括号，就寻找与变量值同名的函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//等价于 hello();
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三函数分类及声明&#34;&gt;三、函数分类及声明&lt;/h2&gt;
&lt;h3 id=&#34;1函数分类&#34;&gt;1、函数分类&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//常规函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;copy（string&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;source&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;dest&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//带mixed，表示可以传任何类型的数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;chown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//带&amp;amp;参数的函数，这个参数只能是变量，变量值是动态的
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//对数组进行排序，数组的索引保持和单元的关联
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;arsort&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$array&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$sort_flags&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$fruits&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;arsort&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fruits&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fruits&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//默认函数，即带[]中括号的函数，表示参数可选，若没有传值则使用默认值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//如果调用没有赋值，又没有初值则出现警告
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#code
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//带有...参数的函数，表示可以传任意多个参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//在数组开头插入一个或多个单元 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;array_unshift&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$array&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2声明多个参数函数&#34;&gt;2、声明多个参数函数&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;func_num_args()：&lt;/code&gt; 返回传递到函数的参数数目&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;Test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;func_num_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;func_get_arg()：&lt;/code&gt; 返回参数列表中的第N个参数&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;Test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;func_get_arg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;Test&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;b&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;c&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用实例&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;cls_mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$mysql&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;func_get_args&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$conn&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysql_connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;cls_mysql&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost:3306&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3函数注释规范&#34;&gt;3、函数注释规范&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;sd&#34;&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 用用演示函数 //函数功能，决定是否使用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @static
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @access public
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @param string $attributeName 属性名称 //函数参数，决定怎样调用
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     * @return string //函数的返回值，决定调用后怎么处理
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;sd&#34;&gt;     */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;demo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$attributeName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;$attributeName&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;abc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$attributeName&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四callback-回调函数&#34;&gt;四、Callback 回调函数&lt;/h2&gt;
&lt;p&gt;我们自定义一个函数A，但是我们不直接去调函数A，而是在函数B中去调用函数A，函数B通过接收函数A的名字和参数来实现对函数A的调用，函数A称为回调函数。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;A&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$y&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fun&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;B&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;A&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;php回调函数的实现方法&#34;&gt;PHP回调函数的实现方法&lt;/h3&gt;
&lt;p&gt;php提供了两个内置函数 &lt;code&gt;call_user_func()&lt;/code&gt; 和 &lt;code&gt;call_user_func_array()&lt;/code&gt; 提供对回调函数的支持&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//mixed call_user_func_array 以数组的形式接收回调函数的参数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;callable&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$callback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$param_arr&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//call_user_func的参数个数根据回调函数的参数来确定
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;call_user_func&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;callable&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$callback&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$parameter&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;实例：&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//普通全局函数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;f1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;通过call_user_func_array调用函数f1：&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;A&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;B&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;通过call_user_func调用函数f1：&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;f1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;C&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;D&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//类
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;myClass&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;参数名:&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;对象中的成员名:&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$this&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;public&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;static&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;show2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$arg1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$arg2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;调用类中非静态成员函数，该成员函数中有this调用了对象中的成员：&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;myClass&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;F&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;E&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;调用类中非静态成员函数，该函数没有调用对象中的成员,没有this：&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myClass&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;G&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;H&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;调用类中静态成员函数：&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;call_user_func_array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;myClass&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;show2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;I&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;J&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五内部函数&#34;&gt;五、内部函数&lt;/h2&gt;
&lt;p&gt;在函数内部再声明函数，目的是在函数内部调用，用来帮助外部函数完成一些子功能。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PHP技术札记5：PHP流程控制分支结构</title>
        <link>https://www.bg7pbp.com/p/php-control-flow/</link>
        <pubDate>Sun, 20 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-control-flow/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80php%E6%B5%81%E7%A8%8B%E6%8E%A7%E5%88%B6%E6%A6%82%E8%BF%B0&#34;&gt;一、PHP流程控制概述&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%88%86%E6%94%AF%E7%BB%93%E6%9E%9C%E6%9D%A1%E4%BB%B6%E7%BB%93%E6%9E%84&#34;&gt;1、分支结果（条件结构）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2switch-%E5%A4%9A%E8%B7%AF%E5%88%86%E6%94%AF%E7%BB%93%E6%9E%84&#34;&gt;2、switch 多路分支结构&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cphp%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5&#34;&gt;二、PHP循环语句&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1while-%E5%BE%AA%E7%8E%AF&#34;&gt;1、while 循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2do-while-%E5%BE%AA%E7%8E%AF&#34;&gt;2、do while 循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3for-%E5%BE%AA%E7%8E%AF&#34;&gt;3、for 循环&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%80%80%E5%87%BA%E5%BE%AA%E7%8E%AF%E8%AF%AD%E5%8F%A5&#34;&gt;三、退出循环语句&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%80%E5%87%BA%E5%A4%9A%E5%B1%82%E5%BE%AA%E7%8E%AF&#34;&gt;退出多层循环&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%94%99%E8%AF%AF%E5%AE%9E%E4%BE%8B&#34;&gt;错误实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一php流程控制概述&#34;&gt;一、PHP流程控制概述&lt;/h2&gt;
&lt;h3 id=&#34;1分支结果条件结构&#34;&gt;1、分支结果（条件结构）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//单路分支：
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//花括号后可以没有分号;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//双路分支
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//多路分支
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;elseif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//elseif 可写成else if
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2switch-多路分支结构&#34;&gt;2、switch 多路分支结构&lt;/h3&gt;
&lt;p&gt;判断范围用if结构，单个值用switch&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;switch&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;variable&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//变量用整型和字符串
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;value1&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;value2&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;//可以有多个case
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;      &lt;span class=&#34;c1&#34;&gt;//如果不加break，下一个case会继续执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;value3&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;        &lt;span class=&#34;c1&#34;&gt;//默认值，可有可无
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二php循环语句&#34;&gt;二、PHP循环语句&lt;/h2&gt;
&lt;h3 id=&#34;1while-循环&#34;&gt;1、while 循环&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//先判断条件再执行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2do-while-循环&#34;&gt;2、do while 循环&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//先执行再判断条件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;condition&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//注意不要遗漏分号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3for-循环&#34;&gt;3、for 循环&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;//一般用于计数，两个分号不能省略
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# code...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例：99乘法表&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-note-5.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/p/php-note-5.jpg&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ii&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$ii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$ii&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; X &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; = &amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三退出循环语句&#34;&gt;三、退出循环语句&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//退出本次循环，下次循环也不再进行
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//退出本次循环，下次循环继续，只能用于循环体内(for,while,do-while)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;coninue&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//完全退出程序
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//函数执行返回值，结束函数的语句
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;退出多层循环&#34;&gt;退出多层循环&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 退出当前循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;break&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// 退出2层循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;错误实例&#34;&gt;错误实例&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;k&#34;&gt;continue&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//注意这里的i++不会被执行，会产生死循环
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>PHP技术札记4：PHP的运算符与表达式</title>
        <link>https://www.bg7pbp.com/p/php-operators-expressions/</link>
        <pubDate>Sat, 19 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-operators-expressions/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9A%84%E5%88%86%E7%B1%BB&#34;&gt;一、运算符的分类&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%8C%89%E6%93%8D%E4%BD%9C%E6%95%B0%E5%88%86%E7%B1%BB&#34;&gt;1、按操作数分类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E6%8C%89%E6%93%8D%E5%8A%9F%E8%83%BD%E5%88%86%E7%B1%BB&#34;&gt;2、按操功能分类&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（1）算术运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（2）字符串运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E8%B5%8B%E5%80%BC%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（3）赋值运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E6%AF%94%E8%BE%83%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（4）比较运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（5）逻辑运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#6%E4%BD%8D%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;（6）位运算符&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%AE%97%E6%9C%AF%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;二、算术运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%B5%8B%E5%80%BC%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;三、赋值运算符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;四、逻辑运算符&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%80%BB%E8%BE%91%E8%BF%90%E7%AE%97%E7%AC%A6%E7%9F%AD%E8%B7%AF&#34;&gt;逻辑运算符短路&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E4%BD%8D%E8%BF%90%E7%AE%97%E7%AC%A6&#34;&gt;五、位运算符&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一运算符的分类&#34;&gt;一、运算符的分类&lt;/h2&gt;
&lt;h3 id=&#34;1按操作数分类&#34;&gt;1、按操作数分类&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 一元运算符
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 二元运算符
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;true&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 三元运算符
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2按操功能分类&#34;&gt;2、按操功能分类&lt;/h3&gt;
&lt;h4 id=&#34;1算术运算符&#34;&gt;（1）算术运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、x、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;取余&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;2字符串运算符&#34;&gt;（2）字符串运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;abc&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;efg&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;3赋值运算符&#34;&gt;（3）赋值运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 简单赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、X&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.=&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 复合赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 递增递减
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 引用赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;4比较运算符&#34;&gt;（4）比较运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;===&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;恒等于&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!===&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;不等于&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;=&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;5逻辑运算符&#34;&gt;（5）逻辑运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 括号内的比括号外的优先级高
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;or&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;xor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;异或&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;6位运算符&#34;&gt;（6）位运算符&lt;/h5&gt;&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;按位与&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;按位或&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;按位非&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;^&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;按位异或&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;左位移&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;右位移&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二算术运算符&#34;&gt;二、算术运算符&lt;/h2&gt;
&lt;p&gt;%取余，常见用法：1）整除运算 2）控制取值范围&lt;/p&gt;
&lt;p&gt;实例：判断是否为闰年（四年一闰，百年不闰，四百年再闰）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// %会把两边的数转成整型后在整除
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// %两边不能用小数或负数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$year&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$year&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$year&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;400&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;闰年&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;平年&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三赋值运算符&#34;&gt;三、赋值运算符&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//先自身加10，然后赋值给自己，等价于 $a=$a+10
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//前置递增递减，先递增递减再赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//先赋值，再递增递减
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//实例
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;结果：a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;11&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四逻辑运算符&#34;&gt;四、逻辑运算符&lt;/h2&gt;
&lt;p&gt;xor异或：相同为假（两个真或两个假=假），不同为真（一真一假=假）
Tips：注意与or区别，or两个真=真&lt;/p&gt;
&lt;h3 id=&#34;逻辑运算符短路&#34;&gt;逻辑运算符短路&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//一个为假，则后面不作运算，一定为假
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//一个为真，则后面不作运算，一定为真
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;fopen&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;r&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;or&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;die&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;失败&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Tips：为运算符 &amp;amp; | 没有短路特性&lt;/p&gt;
&lt;h2 id=&#34;五位运算符&#34;&gt;五、位运算符&lt;/h2&gt;
&lt;p&gt;位操作：将整型转为32位二进制，字符串转为ANSCA码来处理&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-note-4.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/p/php-note-4.jpg&#34;&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PHP技术札记3：PHP的数据类型与常量使用</title>
        <link>https://www.bg7pbp.com/p/php-data-types-constants/</link>
        <pubDate>Fri, 18 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-data-types-constants/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80php%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B%E7%9B%B8%E4%BA%92%E8%BD%AC%E6%8D%A2&#34;&gt;一、PHP数据类型相互转换&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%BC%BA%E5%88%B6%E8%BD%AC%E6%8D%A2&#34;&gt;1、强制转换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E8%87%AA%E5%8A%A8%E8%BD%AC%E6%8D%A2&#34;&gt;2、自动转换&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%8F%98%E9%87%8F%E6%B5%8B%E8%AF%95%E5%87%BD%E6%95%B0&#34;&gt;3、变量测试函数&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%B8%B8%E9%87%8F%E7%9A%84%E5%A3%B0%E6%98%8E%E4%B8%8E%E4%BD%BF%E7%94%A8&#34;&gt;二、常量的声明与使用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%A3%80%E6%9F%A5%E5%B8%B8%E9%87%8F%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8&#34;&gt;检查常量是否存在&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一php数据类型相互转换&#34;&gt;一、PHP数据类型相互转换&lt;/h2&gt;
&lt;h3 id=&#34;1强制转换&#34;&gt;1、强制转换&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// bool，int，float，string，array，object，null
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;settype&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mixed&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$type&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;1）会改变原变量的类型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;123a&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;settype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;int&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 勿遗漏双引号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2）在赋值前定义，不改变原变量类型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;123abc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;123abc&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Tips：避免内存溢出，整型4字节(2.147E9），浮点型8字节&lt;/p&gt;
&lt;h3 id=&#34;2自动转换&#34;&gt;2、自动转换&lt;/h3&gt;
&lt;p&gt;根据运行环境自动转换，例如加号“+”。如果任何一个操作数是浮点数，则所有的操作数都被当成浮点数，结果也是浮点数。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$foo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;“0″&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// $foo 是字符串 (ASCII 48)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$foo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;   &lt;span class=&#34;c1&#34;&gt;// $foo 现在是一个整数 (2)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$foo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$foo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;1.3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;// $foo 现在是一个浮点数 (3.3)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$foo&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;“10&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Small&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Pigs”&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;// $foo 是整数 (15)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3变量测试函数&#34;&gt;3、变量测试函数&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;is_bool&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、is_numeric&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、is_float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;、is_int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;is_scalar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//检测变量是否是一个标量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二常量的声明与使用&#34;&gt;二、常量的声明与使用&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//定义后不能改变，可在任意地方访问
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//默认大小写敏感，习惯大写
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//常量值只能用标量(int、float、string、bool）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//常量必须声明时就赋值
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;define&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;常量名&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;值&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;检查常量是否存在&#34;&gt;检查常量是否存在&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;bool&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;defined&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;string&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$name&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;defined&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;));&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//勿遗漏了引号
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>PHP技术札记2：PHP中使用变量</title>
        <link>https://www.bg7pbp.com/p/php-variables-usage/</link>
        <pubDate>Thu, 17 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-variables-usage/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80php-%E5%8F%98%E9%87%8F%E7%AE%80%E4%BB%8B&#34;&gt;一、PHP 变量简介&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E8%AF%AD%E6%B3%95&#34;&gt;1、语法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%91%BD%E5%90%8D%E8%A7%84%E5%88%99&#34;&gt;2、命名规则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%8F%AF%E5%8F%98%E5%8F%98%E9%87%8F&#34;&gt;3、可变变量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E5%BC%95%E7%94%A8%E8%B5%8B%E5%80%BC&#34;&gt;4、引用赋值&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%8F%98%E9%87%8F%E6%95%B0%E6%8D%AE%E7%B1%BB%E5%9E%8B&#34;&gt;二、变量数据类型&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%9B%9B%E7%A7%8D%E6%A0%87%E9%87%8F&#34;&gt;1、四种标量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E4%BA%8C%E7%A7%8D%E5%A4%8D%E5%90%88%E5%9E%8B&#34;&gt;2、二种复合型&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E4%BA%8C%E7%A7%8D%E7%89%B9%E6%AE%8A%E7%B1%BB%E5%9E%8B&#34;&gt;3、二种特殊类型&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0&#34;&gt;三、常用函数&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%8F%98%E9%87%8F%E5%A3%B0%E6%98%8E%E6%96%B9%E6%B3%95&#34;&gt;四、变量声明方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8%E5%AE%9A%E7%95%8C%E7%AC%A6%E5%A3%B0%E6%98%8E%E5%AD%97%E7%AC%A6%E4%B8%B2&#34;&gt;使用定界符声明字符串&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一php-变量简介&#34;&gt;一、PHP 变量简介&lt;/h2&gt;
&lt;h3 id=&#34;1语法&#34;&gt;1、语法&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//PHP是弱类型语言，变量类型由存储的值决定
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//强类型语言：int a = 1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$变量名&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;值&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2命名规则&#34;&gt;2、命名规则&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;不能数字开头&lt;/li&gt;
&lt;li&gt;不能使用PHP运算符(+-x/%&amp;amp;)&lt;/li&gt;
&lt;li&gt;可以使用PHP关键字&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;区分大小写&lt;/strong&gt;（php只有变量、常量区分大小写）&lt;/li&gt;
&lt;li&gt;驼峰命名法：aaBbCc（第一个单词首字母小写）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3可变变量&#34;&gt;3、可变变量&lt;/h3&gt;
&lt;p&gt;变量名可动态设置，例如：&lt;code&gt;$$var&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;4引用赋值&#34;&gt;4、引用赋值&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&amp;amp;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//将$a内存地址的值赋给$b
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$b&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//最后值等于1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二变量数据类型&#34;&gt;二、变量数据类型&lt;/h2&gt;
&lt;h3 id=&#34;1四种标量&#34;&gt;1、四种标量&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;int（整型）、bool（布尔型）、float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;double（浮点刑）、string（字符串）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2二种复合型&#34;&gt;2、二种复合型&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;数组：array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;对象：object&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;例如：&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mysqlli&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123455&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3二种特殊类型&#34;&gt;3、二种特殊类型&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;resource（资源）&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;例如：&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$var&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fopen&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;test.php&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;r&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;Null&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;（空类型）&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;不区分大小写&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三常用函数&#34;&gt;三、常用函数&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;isset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//变量是否存在，值为null表示不存在
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;unset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//释放变量
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;var_dump&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//检查变量或值的类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;empty&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//变量不存在或者为空时返回true
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;settype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//设置变量类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;gettype&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//获取变量类型
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四变量声明方法&#34;&gt;四、变量声明方法&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$int&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//整型4字节，最大值2³²
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$float&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;mf&#34;&gt;3.14&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;E⁴&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//浮点型等于3.14X10⁴
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$bool&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//true为真
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;string&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//双引号中可以解析变量和转义字符
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//不可以使用转义字符，但可以转义单引号本身 例如 $str = &amp;#39;a\&amp;#39;a\&amp;#39;&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;string&amp;#39;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;使用定界符声明字符串&#34;&gt;使用定界符声明字符串&lt;/h3&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/p/php-note-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/p/php-note-2.jpg&#34;&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PHP技术札记1：PHP基本语法</title>
        <link>https://www.bg7pbp.com/p/php-basic-syntax/</link>
        <pubDate>Wed, 16 Apr 2014 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-basic-syntax/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80php-%E6%A0%87%E8%AE%B0&#34;&gt;一、PHP 标记&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cphp-%E6%B3%A8%E9%87%8A&#34;&gt;二、PHP 注释&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89php-%E7%A9%BA%E7%99%BD&#34;&gt;三、PHP 空白&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E7%A9%BA%E7%99%BD%E9%97%B4%E9%9A%94%E7%AC%A6&#34;&gt;1、空白间隔符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E7%BA%A6%E5%AE%9A%E4%B9%A0%E4%BF%97&#34;&gt;2、约定习俗&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;一php-标记&#34;&gt;一、PHP 标记&lt;/h2&gt;
&lt;p&gt;1、XML风格&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、简短风格&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;_&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;?&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、script 风格&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;language&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;php&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;hello world&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二php-注释&#34;&gt;二、PHP 注释&lt;/h2&gt;
&lt;p&gt;1、单行注释： // （C++风格）
2、多行注释：/* */ （C风格）
3、单行脚本注释：# （shell风格）&lt;/p&gt;
&lt;p&gt;Tips：注释一般写在代码上面&lt;/p&gt;
&lt;h2 id=&#34;三php-空白&#34;&gt;三、PHP 空白&lt;/h2&gt;
&lt;h3 id=&#34;1空白间隔符&#34;&gt;1、空白间隔符&lt;/h3&gt;
&lt;p&gt;换行（回车）、空格、Tab（制表符）&lt;/p&gt;
&lt;h3 id=&#34;2约定习俗&#34;&gt;2、约定习俗&lt;/h3&gt;
&lt;p&gt;代码片段（2行）、类（2行）、函数（1行）、函数变量与第一条语句（1行）、注释前（1行）&lt;/p&gt;</description>
        </item>
        <item>
        <title>Transmission 实现自动删除</title>
        <link>https://www.bg7pbp.com/p/transmission-auto-cleanup/</link>
        <pubDate>Sun, 28 Oct 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/transmission-auto-cleanup/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%88%A0%E9%99%A4%E9%A1%BA%E5%BA%8F&#34;&gt;一、删除顺序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;二、使用方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E4%B8%8B%E8%BD%BD%E5%B9%B6%E6%B5%8B%E8%AF%95&#34;&gt;2.1、下载并测试&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E8%AE%BE%E7%BD%AEcron%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1&#34;&gt;2.2、设置cron计划任务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9&#34;&gt;三、配置选项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%BB%BA%E8%AE%AE%E5%8F%8D%E9%A6%88&#34;&gt;四、建议反馈&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E6%9B%B4%E6%96%B0%E5%8E%86%E5%8F%B2&#34;&gt;五、更新历史&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该脚本用于监视系统磁盘空间，一旦超过预设的阀值，则自动按照特定顺序逐个删除Transmission下载任务。该脚本可配合FlexGet使用，也可单独使用。关于FlexGet可参阅前文  &lt;a href=&#34;http://www.wangyan.cloud/bt-transmission-flexget/&#34;&gt;Transmission+FlexGet 实现RSS自动下载&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一删除顺序&#34;&gt;一、删除顺序&lt;/h2&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;如果还是未能满足条件，则动用&amp;quot;rm -rf&amp;quot;强制删除下载目录内的所有文件。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二使用方法&#34;&gt;二、使用方法&lt;/h2&gt;
&lt;h3 id=&#34;21下载并测试&#34;&gt;2.1、下载并测试&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/trans/ &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/trans/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/shell/trans_cleanup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./trans_cleanup.sh &lt;span class=&#34;c1&#34;&gt;#先运行一次查看是否正常工作&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22设置cron计划任务&#34;&gt;2.2、设置cron计划任务&lt;/h3&gt;
&lt;p&gt;自动检查频率可随意设置，例如每5分钟检查一次&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*/5 * * * *  /bin/bash  /root/trans/trans_cleanup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三配置选项&#34;&gt;三、配置选项&lt;/h2&gt;
&lt;p&gt;用编辑器打开trans_cleanup.sh文件，自定义以下选项&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/t/trans_cleanup.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/t/trans_cleanup.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;1）登录用户名，默认是demo&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;demo&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;登录密码，默认是demo&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;domo&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;transmission下载目录，默认在/root/Downloads&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DLDIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/root/Downloads&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;磁盘最大使用阀值，默认95%&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DISK_USED_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;95&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;5&#34;&gt;
&lt;li&gt;日志存放路径，默认在/var/log/trans_cleanup.log&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LOG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/trans_cleanup.log&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;日志日期格式，一般不需要改。&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +&lt;span class=&#34;s2&#34;&gt;&amp;#34;%y-%m-%d %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四建议反馈&#34;&gt;四、建议反馈&lt;/h2&gt;
&lt;p&gt;如果您发现脚本存在错误或有更好的建议，可直接留言或发邮件至：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;myidwy(at)gmail.com&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;五更新历史&#34;&gt;五、更新历史&lt;/h2&gt;
&lt;p&gt;2012.10.28: 发布0.1版。
2012.10.29: 更新至0.2版，支持下载完成后自动关机。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Transmission&#43;FlexGet 实现RSS自动下载</title>
        <link>https://www.bg7pbp.com/p/transmission-flexget-rss-autodownload/</link>
        <pubDate>Sun, 28 Oct 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/transmission-flexget-rss-autodownload/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80flexget-%E5%AE%89%E8%A3%85&#34;&gt;一、FlexGet 安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85python&#34;&gt;1.1 安装Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%AE%89%E8%A3%85easy_install&#34;&gt;1.2 安装easy_install&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E5%AE%89%E8%A3%85flexget&#34;&gt;1.3 安装FlexGet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E9%AA%8C%E8%AF%81flexget&#34;&gt;1.4 验证FlexGet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E5%AE%89%E8%A3%85transmissionrpc&#34;&gt;1.5 安装TransmissionRPC&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cflexget-%E8%AE%BE%E7%BD%AE&#34;&gt;二、FlexGet 设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9&#34;&gt;2.1 注意事项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E7%BC%96%E5%86%99%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.2 编写配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%88%9D%E5%A7%8B%E5%8C%96%E5%8F%8A%E6%B5%8B%E8%AF%95&#34;&gt;2.3 初始化及测试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AE%BE%E7%BD%AE%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1&#34;&gt;三、设置计划任务&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E8%87%AA%E5%8A%A8%E4%B8%8B%E8%BD%BD&#34;&gt;3.1 自动下载&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E8%87%AA%E5%8A%A8%E5%88%A0%E9%99%A4&#34;&gt;3.2 自动删除&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;现有的PT站基本都有RSS订阅功能，他可以按照你所设定的条件进行自动下载并上传，比如HDC这个站除了可以生成RSS外，还有个“下载框”的功能，你只需一次点击，即可自动开始下载，无须再下载-添加-确认等繁琐操作。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.transmission.com/&#34;&gt;Transmission&lt;/a&gt; 本身不并支持RSS订阅，因此需借助第三方插件 &lt;a href=&#34;http://flexget.com/wiki/Plugins/transmission&#34;&gt;FlexGet&lt;/a&gt; 。本教程不再涉及Transmission安装，具体可参阅前文  &lt;a href=&#34;http://www.wangyan.cloud/bt-shell-script-transmission/&#34;&gt;Transmission 一键安装包&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一flexget-安装&#34;&gt;一、FlexGet 安装&lt;/h2&gt;
&lt;p&gt;详细安装方法，可参阅FlexGet官方教程 &lt;a href=&#34;http://flexget.com/wiki/InstallWizard/Linux&#34;&gt;Installing on Linux&lt;/a&gt; ，有ROOT权限和没有ROOT权限的安装步骤是不一样的，下面以有ROOT权限为例。&lt;/p&gt;
&lt;h3 id=&#34;11-安装python&#34;&gt;1.1 安装Python&lt;/h3&gt;
&lt;p&gt;检查Python版本，支持Python 2.6.x - 2.7.x，不支持Python 3&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -V&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果没有则安装Python&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install python2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-安装easy_install&#34;&gt;1.2 安装easy_install&lt;/h3&gt;
&lt;p&gt;easy_install 工具可以更简便的安装python模块。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install python-setuptools&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13-安装flexget&#34;&gt;1.3 安装FlexGet&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;easy_install flexget&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14-验证flexget&#34;&gt;1.4 验证FlexGet&lt;/h3&gt;
&lt;p&gt;查看FlexGet版本，验证是否安装成功。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flexget -V&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15-安装transmissionrpc&#34;&gt;1.5 安装TransmissionRPC&lt;/h3&gt;
&lt;p&gt;若想要FlexGet支持Transmission，必须安装TransmissionRPC库文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;easy_install transmissionrpc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二flexget-设置&#34;&gt;二、FlexGet 设置&lt;/h2&gt;
&lt;p&gt;详细配置方法，可参阅FlexGet官方教程 &lt;a href=&#34;http://flexget.com/wiki/Configuration&#34;&gt;Configuration&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Flexget 的配置文件位于  &lt;code&gt;~/.flexget/config.yml&lt;/code&gt;&lt;/p&gt;
&lt;h3 id=&#34;21-注意事项&#34;&gt;2.1 注意事项&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;严格的缩进要求，必须是2个空格的倍数，不能使用tab&lt;/li&gt;
&lt;li&gt;插件要在同一缩进级别，例如(rss, series, download etc)，个别插件允许在在别的插件里面。&lt;/li&gt;
&lt;li&gt;如果文本值包含{} []％：或者数字，必须加单引号。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-编写配置文件&#34;&gt;2.2 编写配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/.flexget/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/conf/config.yml -P ~/.flexget/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/f/flexget_config.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/f/flexget_config.jpg&#34;&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;第1行：tasks是一个顶层容器，表示一个任务，冒号结束。第2行：空两格，定义这个任务名称例如HDChina，冒号结束。第3行：空四格，在HDChina指定一个具体的rss地址第4行：accept_all是过滤器，这里表示全部接受。第4行：指定种子存放路径。&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;上图中使用了accept_all不设过滤条件，实际上FlexGet支持众多相当强悍的过滤插件，具体请查阅官方文档：&lt;a href=&#34;http://flexget.com/wiki/Plugins#filter&#34;&gt;Plugins#filter&lt;/a&gt; 。每个过滤插件，官方都有非常详细的介绍，这里不再重复。&lt;/p&gt;
&lt;p&gt;关于transmission支持哪些参数，官方插件主页也有详细说明：&lt;a href=&#34;http://flexget.com/wiki/Plugins/transmission&#34;&gt;transmission&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;23-初始化及测试&#34;&gt;2.3 初始化及测试&lt;/h3&gt;
&lt;p&gt;初始化 SQLite数据库文件，否则会出现“Not running database cleanup on manual run”提示。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flexget --db-cleanup&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;测试配置文件是否正确，这一步绝不能省略。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;flexget --test&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;看到下图，则说明成功了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/f/flexget_test.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/f/flexget_test.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;三设置计划任务&#34;&gt;三、设置计划任务&lt;/h2&gt;
&lt;p&gt;“计划任务”意思就是让服务器隔一段时间自动运行一次 Flexget&lt;/p&gt;
&lt;h3 id=&#34;31-自动下载&#34;&gt;3.1 自动下载&lt;/h3&gt;
&lt;p&gt;首先，确定 FlexGet 的绝对路径，命令如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;which flexget&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;得到的结果是：&lt;code&gt;/usr/bin/flexget&lt;/code&gt;
然后，编辑 &lt;code&gt;crontab&lt;/code&gt; ，命令如下：（每5分钟检查一次）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*/5 * * * * /usr/bin/flexget --cron&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-自动删除&#34;&gt;3.2 自动删除&lt;/h3&gt;
&lt;p&gt;官方给出的方法是：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;transmission-remote -l  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep 100% &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep Done &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; xargs -n &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; -J % ./transmission-remote -t % -r&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;因为xargs 已经不支持-J这个参数了，可以换成下面方法：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;transmission-remote --auth demo:demo-l &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep Stopped &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $1}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v ID&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    transmission-remote --auth demo:demo -t &lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;  --remove-and-delete &amp;gt; /dev/null 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：关于自动删除这部分，我会在下篇文章详细讲解。-_-&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*/3 * * * * /usr/bin/flexget --cron
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* * * * * /bin/bash  /root/trans_cleanup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://flexget.com/wiki/InstallWizard/Linux&#34;&gt;http://flexget.com/wiki/InstallWizard/Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flexget.com/wiki/Configuration&#34;&gt;http://flexget.com/wiki/Configuration&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flexget.com/wiki/Plugins#filter&#34;&gt;http://flexget.com/wiki/Plugins#filter&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://flexget.com/wiki/Plugins/transmission&#34;&gt;http://flexget.com/wiki/Plugins/transmission&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://sharing.bz/148&#34;&gt;http://sharing.bz/148&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Transmission 一键安装包</title>
        <link>https://www.bg7pbp.com/p/transmission-one-click-install/</link>
        <pubDate>Fri, 26 Oct 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/transmission-one-click-install/</guid>
        <description>&lt;p&gt;&lt;a href=&#34;http://www.transmission.com/&#34;&gt;Transmission&lt;/a&gt; 跟 &lt;a href=&#34;http://libtorrent.rakshasa.no/&#34;&gt;rtorrent&lt;/a&gt; 和 &lt;a href=&#34;http://deluge-torrent.org/&#34;&gt;Deluge&lt;/a&gt; 一样都是linux上非常流行的bt客户端。Transmission一键安装包是使用Linux Shell语言编写，用于在Linux操作系统上一键安装Transmission。&lt;/p&gt;
&lt;p&gt;详细介绍及安装步骤请前往项目地址查看。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wangyan/trans&#34;&gt;https://github.com/wangyan/trans&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;补充说明：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;支持32位和64位系统&lt;/li&gt;
&lt;li&gt;配置文件路径是 /usr/local/transmission/etc/settings.json.bak&lt;/li&gt;
&lt;li&gt;官方文档地址：&lt;a href=&#34;https://trac.transmissionbt.com/wiki&#34;&gt;https://trac.transmissionbt.com/wiki&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>LANMP 一键安装包正式发布</title>
        <link>https://www.bg7pbp.com/p/lanmp-one-click-install/</link>
        <pubDate>Thu, 02 Aug 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/lanmp-one-click-install/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E9%A1%B9%E7%9B%AE%E4%B8%BB%E9%A1%B5&#34;&gt;项目主页：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%B8%AE%E5%8A%A9%E6%96%87%E6%A1%A3&#34;&gt;帮助文档：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8&#34;&gt;安装和使用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F&#34;&gt;联系方式&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;LANMP 指的是 Linux + Apache + Nginx + MySQL + PHP 运行环境。LANMP 一键安装包是用于在 Linux 系统中自动安装和配置 LANMP 运行环境。&lt;/p&gt;
&lt;p&gt;关于 LANMP 一键安装包的简介、特点以及安装使用方法，下面项目主页和帮助文档中有很详细说明，不再重复介绍。&lt;/p&gt;
&lt;h2 id=&#34;项目主页&#34;&gt;项目主页：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wangyan/lanmp/&#34;&gt;https://github.com/wangyan/lanmp/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;帮助文档&#34;&gt;帮助文档：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wangyan/lanmp/wiki&#34;&gt;https://github.com/wangyan/lanmp/wiki&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;安装和使用&#34;&gt;安装和使用&lt;/h2&gt;
&lt;p&gt;详细安装和使用说明请参阅  &lt;a href=&#34;https://github.com/wangyan/lanmp/wiki&#34;&gt;Wiki 文档&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install screen git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;screen -S lanmp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone https://github.com/wangyan/lanmp.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; lanmp &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;虚拟主机管理&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; lanmp/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./vhost_add.sh &lt;span class=&#34;c1&#34;&gt;#添加&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./vhost_del.sh &lt;span class=&#34;c1&#34;&gt;#删除&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;联系方式&#34;&gt;联系方式&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;Email: &lt;a href=&#34;mailto:WangYan@188.com&#34;&gt;WangYan@188.com&lt;/a&gt; （推荐）
Gtalk: &lt;a href=&#34;mailto:myidwy@gmail.com&#34;&gt;myidwy@gmail.com&lt;/a&gt;
Q Q群：138082163
Twitter：@wang_yan&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;结语：该LANMP一键安装包，虽然个人用了很长时间，期间也一直在修修补补，但肯定还不完善，欢迎大家提出意见哈。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Nginx目录别名(Alias)支持PHP的配置</title>
        <link>https://www.bg7pbp.com/p/nginx-alias-php-config/</link>
        <pubDate>Fri, 30 Mar 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-alias-php-config/</guid>
        <description>&lt;p&gt;需求：通过 example.com 访问 &lt;code&gt; /var/data/www&lt;/code&gt; ，但通过 example.com/pa 访问的却是 /var/data/phpmyadmin，即保护phpmyadmin不暴露在www目录下。&lt;/p&gt;
&lt;h2 id=&#34;一方法一不推荐&#34;&gt;一、方法一：（不推荐）&lt;/h2&gt;
&lt;p&gt;简介：这是网上普遍采用的 Rewrite 方式。缺陷：简单的php程序还能应付，复杂一点的程序就 &lt;code&gt;No input file specified&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen 80&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    server_name example.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    root /var/data/www&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location /pa &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; /var/data/phpmyadmin&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location ~ /pa/.+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        rewrite /pa/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; /&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_pass  127.0.0.1:9000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_index  index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  /var/data/phpmyadmin/&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include  fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location ~ .+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php.*$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_pass  127.0.0.1:9000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_index  index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  &lt;span class=&#34;nv&#34;&gt;$document_root&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  &lt;span class=&#34;nv&#34;&gt;$request_filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include  fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二方法二推荐&#34;&gt;二、方法二：（推荐）&lt;/h2&gt;
&lt;p&gt;简介：完美实现，无副作用。特点：使用了一个叫 &lt;code&gt;$valid_fastcgi_script_name&lt;/code&gt; 的变量&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen 80&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    server_name example.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    root /var/data/www&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location /pa &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; /var/data/phpmyadmin&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location ~ /pa/.+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php.*$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt; ~ /pa/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$valid_fastcgi_script_name&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_pass  127.0.0.1:9000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_index  index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  /var/data/phpmyadmin/&lt;span class=&#34;nv&#34;&gt;$valid_fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include  fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location ~ .+&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php.*$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_pass  127.0.0.1:9000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_index  index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  &lt;span class=&#34;nv&#34;&gt;$document_root&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        fastcgi_param  SCRIPT_FILENAME  &lt;span class=&#34;nv&#34;&gt;$request_filename&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        include  fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二方法三&#34;&gt;二、方法三：&lt;/h2&gt;
&lt;p&gt;简介：在 &lt;a href=&#34;http://www.zhigang.net/post/1001&#34;&gt;http://www.zhigang.net/post/1001&lt;/a&gt; 上看到的创意方法，即一个站加两个server字段，然后通过反代的方式实现。特定：方法有创意，稍微麻烦点。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Git 分布式工作流程</title>
        <link>https://www.bg7pbp.com/p/git-distributed-workflow/</link>
        <pubDate>Tue, 20 Mar 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/git-distributed-workflow/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%A6%82%E8%BF%B0&#34;&gt;一、概述&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E9%9B%86%E4%B8%AD%E5%BC%8F%E5%B7%A5%E4%BD%9C%E6%B5%81&#34;&gt;1.1、集中式工作流&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E9%9B%86%E6%88%90%E7%AE%A1%E7%90%86%E5%91%98%E5%B7%A5%E4%BD%9C%E6%B5%81&#34;&gt;1.2、集成管理员工作流&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E5%8F%B8%E4%BB%A4%E5%AE%98%E4%B8%8E%E5%89%AF%E5%AE%98%E5%B7%A5%E4%BD%9C%E6%B5%81&#34;&gt;1.3、司令官与副官工作流&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%B8%BA%E9%A1%B9%E7%9B%AE%E4%BD%9C%E8%B4%A1%E7%8C%AE&#34;&gt;二、为项目作贡献&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E6%8F%90%E4%BA%A4%E6%8C%87%E5%8D%97&#34;&gt;2.1、提交指南&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E7%A7%81%E6%9C%89%E7%9A%84%E5%B0%8F%E5%9E%8B%E5%9B%A2%E9%98%9F&#34;&gt;2.2 私有的小型团队&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E7%A7%81%E6%9C%89%E5%9B%A2%E9%98%9F%E9%97%B4%E5%8D%8F%E4%BD%9C&#34;&gt;2.3、私有团队间协作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E5%85%AC%E5%BC%80%E7%9A%84%E5%B0%8F%E5%9E%8B%E9%A1%B9%E7%9B%AE&#34;&gt;2.4、公开的小型项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E5%85%AC%E5%BC%80%E7%9A%84%E5%A4%A7%E5%9E%8B%E9%A1%B9%E7%9B%AE&#34;&gt;2.5、公开的大型项目&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://www.wangyan.cloud/git-branch/&#34;&gt;《Git 分支管理》&lt;/a&gt; 后续，进一步介绍使用git参与项目开发的各种流程、模式，例如在github上大名鼎鼎的fork+pull模式。&lt;/p&gt;
&lt;p&gt;同样，本文是 &lt;a href=&#34;http://progit.org/book/zh/&#34;&gt;《Pro Git》&lt;/a&gt; 阅读笔记整理，文中不详细之处，可阅读原著补充。&lt;/p&gt;
&lt;h2 id=&#34;一概述&#34;&gt;一、概述&lt;/h2&gt;
&lt;h3 id=&#34;11集中式工作流&#34;&gt;1.1、集中式工作流&lt;/h3&gt;
&lt;p&gt;一个存放代码仓库的中心服务器，接受所有开发者提交的代码，而后提交者，必须先下载合并服务器上的数据，解决冲突之后才能推送数据到共享服务器上。&lt;/p&gt;
&lt;p&gt;SVN和GIT都可以使用该工作流，优点是简单高效，只需给每个人推送数据的权限，就可以开展工作了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-5-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-5-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图5-1：集中式工作流&lt;/center&gt;
&lt;h3 id=&#34;12集成管理员工作流&#34;&gt;1.2、集成管理员工作流&lt;/h3&gt;
&lt;p&gt;这是 GitHub 上最常见工作流，首先克隆（Fork）某个项目，成为自己的公共仓库，然后按照自己的节奏开发，最后用Pull 工具告知管理员接纳你的贡献。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;贡献者从官方项目仓库（blessed repository），克隆出各自的私有仓库（developer private）。&lt;/li&gt;
&lt;li&gt;贡献者修改代码后，推送数据到自己的公共仓库（developer public）。&lt;/li&gt;
&lt;li&gt;贡献者给维护者发送邮件，请求拉取自己的最新修订。&lt;/li&gt;
&lt;li&gt;维护者在自己本地仓库（integration manger）中，将贡献者的仓库加为远程仓库，合并更新并做测试。&lt;/li&gt;
&lt;li&gt;维护者将合并后的更新推送到主仓库（blessed repository）。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-5-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-5-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图5-2：集成管理员工作流&lt;/center&gt;
&lt;h3 id=&#34;13司令官与副官工作流&#34;&gt;1.3、司令官与副官工作流&lt;/h3&gt;
&lt;p&gt;与集成管理员工作流类似，区别是多了一个副官（lieutenant）的角色，他们负责集成项目中的特定部分。这种多级别管理方式一般适用于大项目，如linux项目。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-5-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-5-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图5-3：司令官与副官工作流&lt;/center&gt;
&lt;h2 id=&#34;二为项目作贡献&#34;&gt;二、为项目作贡献&lt;/h2&gt;
&lt;h3 id=&#34;21提交指南&#34;&gt;2.1、提交指南&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#请不要在更新中提交多余的白字符（whitespace）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --check，
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#请将每次提交限定于完成一次逻辑功能。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git　add --patch
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#请谨记撰写友好的提交说明。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#首行简明扼要，另起空行后，再进一步补充说明。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-私有的小型团队&#34;&gt;2.2 私有的小型团队&lt;/h3&gt;
&lt;p&gt;私有，是指源代码不公开，他人无法访问项目仓库，但你和其他开发者则都具有推送数据到仓库的权限。&lt;/p&gt;
&lt;p&gt;私有的小型团队，一般&lt;strong&gt;采用集中式工作流&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、A和B分别克隆了远程仓库并提交了更新&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone jessica@githost:simplegit.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -am &lt;span class=&#34;s1&#34;&gt;&amp;#39;xxxx&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、A推送了项目至远程仓库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、B不能直接推送了，首先需要fetch，然后合并到本地，最后再推送。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch origin　&lt;span class=&#34;c1&#34;&gt;#首先下载了A推送到服务器的最近更新&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge origin/master &lt;span class=&#34;c1&#34;&gt;#然后将提交历史合并到本地&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin master &lt;span class=&#34;c1&#34;&gt;#最后B也推送到远程&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23私有团队间协作&#34;&gt;2.3、私有团队间协作&lt;/h3&gt;
&lt;p&gt;成员：John Jessica Josie
分工：John负责featureA、Josie负责featureB、Jessica参与A和B。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Jessica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git clone &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#从服务器克隆仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout -b featureA &lt;span class=&#34;c1&#34;&gt;#在本地开发A分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ vim lib/simplegit.rb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit -am &lt;span class=&#34;s1&#34;&gt;&amp;#39;xxxx&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#图6-1(3309)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push origin featureA &lt;span class=&#34;c1&#34;&gt;#推送A分支到服务器A分支(Jessica无权推到主分支)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Jessica 发邮件给John(在github中使用Pull 工具)，在等待他的反馈之前，Jessica 决定和Josie一起开发featureB&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Jessica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git fetch origin &lt;span class=&#34;c1&#34;&gt;#更新，包括远程featureB分支。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout -b featureB origin/master　&lt;span class=&#34;c1&#34;&gt;#从远程主分支创建一个本地跟踪分支featureB&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ vim lib/simplegit.rb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit -am &lt;span class=&#34;s1&#34;&gt;&amp;#39;add ls-files&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;##图6-1(85127)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-6-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-6-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图6-1：Jessica 的更新历史&lt;/center&gt;
&lt;p&gt;Jessica正准备将featureB分支推的服务器，但是Josie已抢先推送了featureBee，所以应先更新、合并，然后再推送本地featureB到远程featureBee&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Jessica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git fetch origin &lt;span class=&#34;c1&#34;&gt;#图6-2(fba9a)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git merge origin/featureBee  &lt;span class=&#34;c1&#34;&gt;#图6-2(cd685)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push origin featureB:featureBee &lt;span class=&#34;c1&#34;&gt;#图6-2(cd685)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;收到了John的邮件，他对远程featureA分支已做修改，请过目。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#Jessica&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git fetch origin &lt;span class=&#34;c1&#34;&gt;#下载最新数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git log origin/featureA ^featureA &lt;span class=&#34;c1&#34;&gt;#查看更新了哪些内容&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout featureA  &lt;span class=&#34;c1&#34;&gt;#切换到本地featureA分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git merge origin/featureA &lt;span class=&#34;c1&#34;&gt;#图6-2(aad88)，把John的修改合并到自己的featureA分支中：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit -am &lt;span class=&#34;s1&#34;&gt;&amp;#39;small tweak&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#图6-2(774b3)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push origin featureA &lt;span class=&#34;c1&#34;&gt;#推送到远程featureA分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-6-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-6-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图6-2：Jessica 的更新历史&lt;/center&gt;
&lt;p&gt;最后通知集成管理员将featureA 及featureBee分支并入主线。#图6-3(5399e)&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-6-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-6-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图6-3：管理员合并A、B分支后的历史&lt;/center&gt;
&lt;h3 id=&#34;24公开的小型项目&#34;&gt;2.4、公开的小型项目&lt;/h3&gt;
&lt;p&gt;与私有项目不同，公开项目没有直接更新主仓库分支的权限。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git clone &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#克隆原始仓库&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; project
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout -b featureA &lt;span class=&#34;c1&#34;&gt;#创建特性分支开展工作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;work&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;首先，点击&amp;quot;Fork&amp;quot;按钮，创建一个自己可写的公共仓库。然后，将此仓库添加为本地的第二个远端仓库，命名为myfork
接着，再把featureA 整个分支推到myfork仓库。最后，直接用GitHub提供的pull request工具通知项目管理员。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git remote add myfork &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push myfork featureA&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;附：手工发送请求通知&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#参数一：是原始分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#参数二：是请求对方来抓取的Git仓库。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git request-pull origin/master myfork&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;建议：随时保持自己的master 分支和官方origin/master 同步，并将自己的工作限制在特性分支上，好处是既方便又灵活，采纳和丢弃都轻而易举。&lt;/p&gt;
&lt;p&gt;比如现在要开始第二项特性的开发&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout -b featureB origin/master
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;work&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push myfork featureB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;email maintainer&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git fetch origin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-7-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-7-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图7-1：featureB 以后的提交历史&lt;/center&gt;
&lt;p&gt;假设一：因为代码基准不一致，管理员无法采纳你提交的第一个分支。方案一：首先要衍合最新origin/master，解决相关冲突，然后重新提交你的修改&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout featureA
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git rebase origin/master
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push -f myfork featureA &lt;span class=&#34;c1&#34;&gt;#必须使用-f强制推送&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-7-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-7-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图7-2：featureA 重新衍合后的提交历史&lt;/center&gt;
&lt;p&gt;假设二：管理员有意采纳第二个分支后，但还需要做些修改。方案二：首先以origin/master为基准，新建特性分支featureBv2，然后合并featureB分支，最后修改提交。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git checkout -b featureBv2 origin/master
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --squash 选项将目标分支上的所有更改全拿来应用到当前分支上&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --nocommit 选项告诉Git 此时无需自动生成和记录（合并）提交&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git merge --no-commit --squash featureB
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;change implementation&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git commit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git push myfork featureBv2&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-7-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-7-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图7-3：featureBv2 之后的提交历史&lt;/center&gt;
&lt;h3 id=&#34;25公开的大型项目&#34;&gt;2.5、公开的大型项目&lt;/h3&gt;
&lt;p&gt;工作流程与上面类似，区别在于提交补丁不需要创建自己可写的公共仓库，只需将每次提交的差异内容以电子邮件的方式依次发送到邮件列表中即可。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# format-patch 命令依次创建补丁文件，并输出文件名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# -M 选项允许Git 检查是否有对文件重命名的提交。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git format-patch -M origin/master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编辑 ~/.gitconfig 文件，配置imap选项&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;imap&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;folder&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;[Gmail]/Drafts&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;host&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; imaps://imap.gmail.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;user&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; user@gmail.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;pass&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; p4ssw0rd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;993&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;sslverify&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; false&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ git send-email *.patch　&lt;span class=&#34;c1&#34;&gt;#发送补丁到邮件列表&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Git 使用指南</title>
        <link>https://www.bg7pbp.com/p/git-usage-guide/</link>
        <pubDate>Sun, 19 Feb 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/git-usage-guide/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80git-%E5%9F%BA%E7%A1%80%E8%A6%81%E7%82%B9&#34;&gt;一、Git 基础要点&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E7%9B%B4%E6%8E%A5%E5%BF%AB%E7%85%A7%E9%9D%9E%E6%AF%94%E8%BE%83%E5%B7%AE%E5%BC%82&#34;&gt;1.1、直接快照非比较差异&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E4%B8%89%E7%A7%8D%E6%96%87%E4%BB%B6%E7%8A%B6%E6%80%81&#34;&gt;1.2、三种文件状态&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E5%85%B8%E5%9E%8B%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B&#34;&gt;1.3、典型工作流程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cgit-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%88%9D%E5%A7%8B%E5%8C%96&#34;&gt;二、Git 安装与初始化&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95&#34;&gt;2.1、安装方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22git-%E4%B8%AD%E6%96%87%E6%9C%AC%E5%9C%B0%E5%8C%96&#34;&gt;2.2、git 中文本地化&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%85%A8%E5%B1%80%E9%85%8D%E7%BD%AE&#34;&gt;2.3、全局配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E5%AF%86%E9%92%A5%E9%85%8D%E7%BD%AE&#34;&gt;2.4、密钥配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90&#34;&gt;2.5、自动完成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26%E5%91%BD%E4%BB%A4%E5%88%AB%E5%90%8D&#34;&gt;2.6、命令别名&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89git-%E5%9F%BA%E7%A1%80%E4%BD%BF%E7%94%A8&#34;&gt;三、Git 基础使用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%B8%B8%E8%A7%84%E6%93%8D%E4%BD%9C&#34;&gt;3.1、常规操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#311%E5%88%9B%E5%BB%BAgit%E9%A1%B9%E7%9B%AE&#34;&gt;3.1.1、创建Git项目&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#312%E6%A3%80%E6%9F%A5%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E7%8A%B6%E6%80%81&#34;&gt;3.1.2、检查当前文件状态&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#313%E8%B7%9F%E8%B8%AA%E6%96%B0%E6%96%87%E4%BB%B6&#34;&gt;3.1.3、跟踪新文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#314%E5%BF%BD%E7%95%A5%E6%9F%90%E4%BA%9B%E6%96%87%E4%BB%B6%E4%B8%8D%E8%B7%9F%E8%B8%AA&#34;&gt;3.1.4、忽略某些文件不跟踪&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#315%E6%9A%82%E5%AD%98%E5%B7%B2%E4%BF%AE%E6%94%B9%E6%96%87%E4%BB%B6&#34;&gt;3.1.5、暂存已修改文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#316%E6%9F%A5%E7%9C%8B%E5%B7%B2%E6%9A%82%E5%AD%98%E5%92%8C%E6%9C%AA%E6%9A%82%E5%AD%98%E5%B7%AE%E5%BC%82&#34;&gt;3.1.6、查看已暂存和未暂存差异&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#317%E5%88%A0%E9%99%A4%E7%A7%BB%E5%8A%A8%E5%B7%B2%E8%B7%9F%E8%B8%AA%E6%96%87%E4%BB%B6&#34;&gt;3.1.7、删除/移动已跟踪文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#318%E6%8F%90%E4%BA%A4%E6%9B%B4%E6%96%B0&#34;&gt;3.1.8、提交更新&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#319%E6%9F%A5%E7%9C%8B%E6%8F%90%E4%BA%A4%E5%8E%86%E5%8F%B2&#34;&gt;3.1.9、查看提交历史&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3110%E6%9F%A5%E7%9C%8B%E7%89%88%E6%9C%AC%E7%BB%86%E8%8A%82&#34;&gt;3.1.10、查看版本细节&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E6%92%A4%E9%94%80%E6%93%8D%E4%BD%9C&#34;&gt;3.2、撤销操作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#321%E4%BF%AE%E6%94%B9%E6%9C%80%E5%90%8E%E4%B8%80%E6%AC%A1%E6%8F%90%E4%BA%A4&#34;&gt;3.2.1、修改最后一次提交&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#322%E5%8F%96%E6%B6%88%E5%B7%B2%E7%BB%8F%E6%9A%82%E5%AD%98%E7%9A%84%E6%96%87%E4%BB%B6&#34;&gt;3.2.2、取消已经暂存的文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#323%E5%8F%96%E6%B6%88%E5%AF%B9%E6%96%87%E4%BB%B6%E7%9A%84%E4%BF%AE%E6%94%B9&#34;&gt;3.2.3、取消对文件的修改&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E4%BD%BF%E7%94%A8&#34;&gt;3.3、远程仓库的使用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#331%E6%9F%A5%E7%9C%8B%E9%A1%B9%E7%9B%AE%E7%9A%84%E8%BF%9C%E7%A8%8B%E5%BA%93&#34;&gt;3.3.1、查看项目的远程库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#332%E6%B7%BB%E5%8A%A0%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93&#34;&gt;3.3.2、添加远程仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#333%E4%BB%8E%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E6%8A%93%E5%8F%96%E6%95%B0%E6%8D%AE&#34;&gt;3.3.3、从远程仓库抓取数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#334%E6%8E%A8%E9%80%81%E6%95%B0%E6%8D%AE%E5%88%B0%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93&#34;&gt;3.3.4、推送数据到远程仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#335%E6%9F%A5%E7%9C%8B%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E4%BF%A1%E6%81%AF&#34;&gt;3.3.5、查看远程仓库信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#336%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93%E7%9A%84%E5%88%A0%E9%99%A4%E5%92%8C%E9%87%8D%E5%91%BD%E5%90%8D&#34;&gt;3.3.6、远程仓库的删除和重命名&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34%E6%9C%AC%E5%9C%B0%E6%A0%87%E7%AD%BE%E7%AE%A1%E7%90%86&#34;&gt;3.4、本地标签管理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#341%E6%98%BE%E7%A4%BA%E5%B7%B2%E6%9C%89%E7%9A%84%E6%A0%87%E7%AD%BE&#34;&gt;3.4.1、显示已有的标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#342%E6%96%B0%E5%BB%BA%E6%A0%87%E7%AD%BE&#34;&gt;3.4.2、新建标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#343%E5%90%8E%E6%9C%9F%E5%8A%A0%E6%B3%A8%E6%A0%87%E7%AD%BE&#34;&gt;3.4.3、后期加注标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#344%E7%AD%BE%E7%BD%B2%E9%AA%8C%E8%AF%81%E6%A0%87%E7%AD%BE&#34;&gt;3.4.4、签署验证标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#345%E6%8E%A8%E9%80%81%E6%A0%87%E7%AD%BE%E8%87%B3%E8%BF%9C%E7%A8%8B%E4%BB%93%E5%BA%93&#34;&gt;3.4.5、推送标签至远程仓库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#346%E5%88%A0%E9%99%A4%E6%A0%87%E7%AD%BE&#34;&gt;3.4.6、删除标签&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bgit-%E5%88%86%E6%94%AF%E7%AE%A1%E7%90%86&#34;&gt;四、GIt 分支管理&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E6%96%B0%E5%BB%BA%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;4.1、新建本地分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E5%90%88%E5%B9%B6%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;4.2、合并本地分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43%E8%A7%A3%E5%86%B3%E5%90%88%E5%B9%B6%E5%86%B2%E7%AA%81&#34;&gt;4.3、解决合并冲突&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44%E5%90%88%E5%B9%B6%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;4.4、合并远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#45%E5%88%A0%E9%99%A4%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;4.5、删除远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#46%E5%88%9B%E5%BB%BA%E8%B7%9F%E8%B8%AA%E5%88%86%E6%94%AF&#34;&gt;4.6、创建跟踪分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#47%E6%9F%A5%E7%9C%8B%E5%88%86%E6%94%AF&#34;&gt;4.7、查看分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#48%E8%A1%8D%E5%90%88%E6%89%80%E5%9C%A8%E5%88%86%E6%94%AF&#34;&gt;4.8、衍合所在分支&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Git 是一个分布式版本控制系统，可以记录文件变化，以便在需要时退回过去某个时间点的状态，它与SVN最大不同在于，GIT是直接快照，而非比较差异，因此它拥有许多令人兴奋的特性，如简便的分支管理、高效率的分布式控制等等。&lt;/p&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://progit.org/book/zh/&#34;&gt;《Pro Git》&lt;/a&gt; 阅读笔记整理，重点介绍 Git基础使用、Git分支管理、Git分布式工作流程。&lt;/p&gt;
&lt;h2 id=&#34;一git-基础要点&#34;&gt;一、Git 基础要点&lt;/h2&gt;
&lt;h3 id=&#34;11直接快照非比较差异&#34;&gt;1.1、直接快照非比较差异&lt;/h3&gt;
&lt;p&gt;Git 只关心文件数据的整体是否发生变化，而SVN关心的是文件内容具体差异。&lt;/p&gt;
&lt;h3 id=&#34;12三种文件状态&#34;&gt;1.2、三种文件状态&lt;/h3&gt;
&lt;p&gt;已提交（&lt;code&gt;committed&lt;/code&gt; ），已修改（&lt;code&gt;modified&lt;/code&gt; ）和已暂存（ &lt;code&gt;staged&lt;/code&gt; ）。&lt;/p&gt;
&lt;h3 id=&#34;13典型工作流程&#34;&gt;1.3、典型工作流程&lt;/h3&gt;
&lt;p&gt;新文件&amp;ndash;已暂存&amp;ndash;已提交&amp;ndash;已修改&amp;ndash;已暂存&amp;ndash;已提交 &amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;二git-安装与初始化&#34;&gt;二、Git 安装与初始化&lt;/h2&gt;
&lt;h3 id=&#34;21安装方法&#34;&gt;2.1、安装方法&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install git-core git-gui
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install git git-gui&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Mac: http://code.google.com/p/git-osx-installer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Windowns: http://code.google.com/p/msysgit&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22git-中文本地化&#34;&gt;2.2、git 中文本地化&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#获取中文本地化文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;curl -L https://github.com/gotgit/git-po-zh_CN/raw/maint-zh-cn/po/zh_CN.po &amp;gt; zh_CN.po
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#将zh_CN.po文件复制到Git源码的po目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp zh_CN.po path/to/git/po/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#编译及安装 git，然后就可以让Git说中文了。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; path/to/git/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make all &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23全局配置&#34;&gt;2.3、全局配置&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;/etc/gitconfig&lt;/code&gt; ：系统中对所有用户都适用的配置文件，使用&amp;ndash;system选项。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;~/.gitconfig&lt;/code&gt; ：用户目录下的配置文件只适用于该用户，使用&amp;ndash;global选项。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.git/config&lt;/code&gt; ：当前项目的.git目录中的配置文件，仅针对当前项目有效。&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.name &lt;span class=&#34;s2&#34;&gt;&amp;#34;WangYan&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global user.email &lt;span class=&#34;s2&#34;&gt;&amp;#34;WangYan@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global core.editor vim
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global merge.tool vimdiff&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24密钥配置&#34;&gt;2.4、密钥配置&lt;/h3&gt;
&lt;p&gt;首先生成密钥对，然后上传.pub后缀的公钥，到github这类托管平台。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/.ssh &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/.ssh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t rsa -C &lt;span class=&#34;s2&#34;&gt;&amp;#34;WangYan@example.com&amp;#34;&lt;/span&gt; -N &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#生成密钥对&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;测试密钥是否有效，并提示密钥所属用户ID或所属版本库ID&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -T git@github.com&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;25自动完成&#34;&gt;2.5、自动完成&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#wget http://www.wangyan.cloud/download/conf/.git-completion.bash&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp contrib/completion/git-completion.bash ~/.git-completion.bash
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;~/.bashrc&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;source ~/.git-completion.bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;26命令别名&#34;&gt;2.6、命令别名&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global alias.ci commit &lt;span class=&#34;c1&#34;&gt;#实例1：ci 提交&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global alias.last &lt;span class=&#34;s1&#34;&gt;&amp;#39;log -1 HEAD&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#实例2：查询最新版本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git config --global alias.visual &lt;span class=&#34;s2&#34;&gt;&amp;#34;!gitk&amp;#34;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#实例3：运行外部命令 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三git-基础使用&#34;&gt;三、Git 基础使用&lt;/h2&gt;
&lt;h3 id=&#34;31常规操作&#34;&gt;3.1、常规操作&lt;/h3&gt;
&lt;h4 id=&#34;311创建git项目&#34;&gt;3.1.1、创建Git项目&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git init &lt;span class=&#34;c1&#34;&gt;#从当前目录初始化&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://gist.github.com/xx.git &lt;span class=&#34;c1&#34;&gt;#从现有仓库克隆&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;312检查当前文件状态&#34;&gt;3.1.2、检查当前文件状态&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Untracked files：表示未跟踪文件。（新文件）&lt;/li&gt;
&lt;li&gt;Changes to be committed：表示已暂存，但未提交。（已git add，但未提交）&lt;/li&gt;
&lt;li&gt;Changed but not updated：已修改，但未暂存（文件已修改，未git add暂存）&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;313跟踪新文件&#34;&gt;3.1.3、跟踪新文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add file1.txt（文件或目录的路径，目录则递归处理）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .（跟踪所在目录下的所有文件及子目录）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;314忽略某些文件不跟踪&#34;&gt;3.1.4、忽略某些文件不跟踪&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;.gitignore&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;# 忽略注释
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;*.a 忽略所有.a 结尾的文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;*.[oa] 忽略所有以.o 或.a 结尾的文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;!lib.a 忽略除lib.a 外的文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;/TODO 忽略根目录下的TODO 文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;build/ 忽略build/ 目录下的所有文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;doc/*.txt 忽略doc/notes.txt
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;315暂存已修改文件&#34;&gt;3.1.5、暂存已修改文件&lt;/h4&gt;
&lt;p&gt;注：git add 既可以跟踪新文件，也可以暂存已修改文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;316查看已暂存和未暂存差异&#34;&gt;3.1.6、查看已暂存和未暂存差异&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff：查看未暂存和已暂存文件间的差异。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git diff --cached 查看已暂存和上次提交时的差异&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;317删除移动已跟踪文件&#34;&gt;3.1.7、删除/移动已跟踪文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm file.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm -f file.txt 强制删除，适用于已修改且已暂存。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm --cached file.txt 从跟踪清单中删除，但不实际删除文件。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm *~ 删除当前目录下所有~结尾的文件。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rm &lt;span class=&#34;se&#34;&gt;\*&lt;/span&gt;~ 递归删除当前目录及子目录下所有~结尾的文件。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git mv file1 file2 &lt;span class=&#34;c1&#34;&gt;#移动文件&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;318提交更新&#34;&gt;3.1.8、提交更新&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Story 1: Fix some bugs&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;跳过暂存直接提交&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -a -m &lt;span class=&#34;s2&#34;&gt;&amp;#34;Story 2: Fix some bugs&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;319查看提交历史&#34;&gt;3.1.9、查看提交历史&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log 按提交时间列出所有的更新，最近的更新排在最上面。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;-p&lt;/code&gt; 展开显示每次提交的内容差异。&lt;code&gt;-n&lt;/code&gt;  仅显示最近的n 条提交。&lt;code&gt;--stat&lt;/code&gt; 仅显示简要的增改行数统计。&lt;code&gt;--author&lt;/code&gt; 仅显示指定作者相关的提交。&lt;code&gt;--committer&lt;/code&gt; 仅显示指定提交者相关的提交。&lt;code&gt;--grep&lt;/code&gt; 搜索提交说明中的关键字。&lt;code&gt;--all-match&lt;/code&gt; 同时满足指定的选项。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log --since&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;2.weeks
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git log --since&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2008-10-01&amp;#34;&lt;/span&gt; --before&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2008-11-01&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;--since, --after&lt;/code&gt;  仅显示指定时间之后的提交。&lt;code&gt;--until, --before&lt;/code&gt; 仅显示指定时间之前的提交。&lt;/p&gt;
&lt;h4 id=&#34;3110查看版本细节&#34;&gt;3.1.10、查看版本细节&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show xx 查看项目特定版本更新细节
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show HEAD 显示当前分支的最新版本的更新细节
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show HEAD^ 查看HEAD 的父版本更新细节
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show HEAD^^ 查看HEAD 的祖父版本更新细节
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show HEAD~4 查看HEAD 的祖父之祖父的版本更新细节&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32撤销操作&#34;&gt;3.2、撤销操作&lt;/h3&gt;
&lt;h4 id=&#34;321修改最后一次提交&#34;&gt;3.2.1、修改最后一次提交&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit --amend&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：若文件状态没变化，则修改提交说明，否则修正并覆盖上次提交。&lt;/p&gt;
&lt;h4 id=&#34;322取消已经暂存的文件&#34;&gt;3.2.2、取消已经暂存的文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git reset HEAD filename&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;323取消对文件的修改&#34;&gt;3.2.3、取消对文件的修改&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -- filename&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33远程仓库的使用&#34;&gt;3.3、远程仓库的使用&lt;/h3&gt;
&lt;h4 id=&#34;331查看项目的远程库&#34;&gt;3.3.1、查看项目的远程库&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote -v （-v 选项显示对应远程库地址）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：origin git://github.com/schacon/ticgit.git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;332添加远程仓库&#34;&gt;3.3.2、添加远程仓库&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote add &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;shortname&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;url&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：git remote add pb git://github.com/paulboone/ticgit.git&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;333从远程仓库抓取数据&#34;&gt;3.3.3、从远程仓库抓取数据&lt;/h4&gt;
&lt;p&gt;从指定远程仓库中拉取所有本地仓库没有的数据。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git fetch &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意事项：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;如果是克隆了一个仓库，此命令会自动将远程仓库归于 &lt;code&gt;origin&lt;/code&gt; 名下。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;fetch&lt;/code&gt; 命令只拉取数据，不会自动合并到当前工作分支。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;git clone&lt;/code&gt; 本质是创建本地 &lt;code&gt;master&lt;/code&gt; 分支，并用于跟踪远程仓库中的 &lt;code&gt;master&lt;/code&gt; 分支。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&#34;334推送数据到远程仓库&#34;&gt;3.3.4、推送数据到远程仓库&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;branch-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：git push origin master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：克隆操作会自动使用默认的master仓库和origin分支名称&lt;/p&gt;
&lt;h4 id=&#34;335查看远程仓库信息&#34;&gt;3.3.5、查看远程仓库信息&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote show &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;1）New remote branches
哪些远端分支还没有同步到本地&lt;/p&gt;
&lt;p&gt;2）Local branch pushed with &amp;lsquo;git push&amp;rsquo;
运行git push 时缺省推送的分支&lt;/p&gt;
&lt;p&gt;3）Stale tracking branches
已同步到本地的远端分支在远端服务器上已被删除。&lt;/p&gt;
&lt;h4 id=&#34;336远程仓库的删除和重命名&#34;&gt;3.3.6、远程仓库的删除和重命名&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote rename &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;new-remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#重命名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git remote rm &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;remote-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#删除&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34本地标签管理&#34;&gt;3.4、本地标签管理&lt;/h3&gt;
&lt;h4 id=&#34;341显示已有的标签&#34;&gt;3.4.1、显示已有的标签&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag &lt;span class=&#34;c1&#34;&gt;#按字母顺序显示&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -l &lt;span class=&#34;s1&#34;&gt;&amp;#39;v1.4.2.*&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#显示特定标签 &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;342新建标签&#34;&gt;3.4.2、新建标签&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag v1.4  &lt;span class=&#34;c1&#34;&gt;#轻量级的标签 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -a v1.4 -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;my version 1.4&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#含附注的标签&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;343后期加注标签&#34;&gt;3.4.3、后期加注标签&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -a v1.2 9fceb02&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;344签署验证标签&#34;&gt;3.4.4、签署验证标签&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git  -s v1.5 -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;my signed 1.5 tag&amp;#39;&lt;/span&gt;　&lt;span class=&#34;c1&#34;&gt;#签署标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -v &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;tag-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#验证标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git show &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;tag-name&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#查看相应标签的版本信息&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;345推送标签至远程仓库&#34;&gt;3.4.5、推送标签至远程仓库&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;tagname&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#推送某个标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin --tags &lt;span class=&#34;c1&#34;&gt;#推送所有标签&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;346删除标签&#34;&gt;3.4.6、删除标签&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git tag -d v1.0.0 &lt;span class=&#34;c1&#34;&gt;#删除本地标签&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin :refs/tags/v1.0.0 &lt;span class=&#34;c1&#34;&gt;#删除远程标签&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四git-分支管理&#34;&gt;四、GIt 分支管理&lt;/h2&gt;
&lt;h3 id=&#34;41新建本地分支&#34;&gt;4.1、新建本地分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch testing &lt;span class=&#34;c1&#34;&gt;#创建testing分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout testing &lt;span class=&#34;c1&#34;&gt;#切换至testing分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b iss53 &lt;span class=&#34;c1&#34;&gt;#创建并切换至iss53分支。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42合并本地分支&#34;&gt;4.2、合并本地分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master  &lt;span class=&#34;c1&#34;&gt;#首先切换到主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge hotfix &lt;span class=&#34;c1&#34;&gt;#测试完毕后，合并hotfix分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -d hotfix &lt;span class=&#34;c1&#34;&gt;#删除已合并的hotfix分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43解决合并冲突&#34;&gt;4.3、解决合并冲突&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status &lt;span class=&#34;c1&#34;&gt;#合并失败的文件以&amp;#34;unmerged&amp;#34;标出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;c1&#34;&gt;#标记冲突已解决，并暂存文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git mergetool &lt;span class=&#34;c1&#34;&gt;#Git默认图形化冲突解决工具&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44合并远程分支&#34;&gt;4.4、合并远程分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;origin/master &lt;span class=&#34;c1&#34;&gt;#格式：远程仓库/分支名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge origin/serverfix &lt;span class=&#34;c1&#34;&gt;#合并远程分支serverfix到当前分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;45删除远程分支&#34;&gt;4.5、删除远程分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#git push [远程仓库名] :[远程分支]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#注意区别：git push [远程名] [本地分支]:[远程分支]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin :serverfix　&lt;span class=&#34;c1&#34;&gt;#删除远程分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;46创建跟踪分支&#34;&gt;4.6、创建跟踪分支&lt;/h3&gt;
&lt;p&gt;方法一：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b serverfix origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：（适用1.6.2以上版本Git）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;47查看分支&#34;&gt;4.7、查看分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch &lt;span class=&#34;c1&#34;&gt;#列出所有分支，星号&amp;#34;*&amp;#34;表示当前所在分支。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -v &lt;span class=&#34;c1&#34;&gt;#查看各分支最后一次提交信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看已和当前分支合并的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#可用git branch -d 删掉未标星号的分支，因为已经合并了。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --merged 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看未和当前分支合并的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#强制删除未合并的分支git branch -D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --no-merged &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;48衍合所在分支&#34;&gt;4.8、衍合所在分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout experiment &lt;span class=&#34;c1&#34;&gt;#切换到需要衍合的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase master &lt;span class=&#34;c1&#34;&gt;#衍合experiment分支到主分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>图解Git的分支管理</title>
        <link>https://www.bg7pbp.com/p/git-branch-management/</link>
        <pubDate>Sun, 19 Feb 2012 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/git-branch-management/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80git-%E5%88%86%E6%94%AF%E6%9C%AC%E8%B4%A8&#34;&gt;一、Git 分支本质&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E9%A6%96%E6%AC%A1%E6%8F%90%E4%BA%A4%E5%90%8E%E5%90%84%E5%AF%B9%E8%B1%A1%E9%97%B4%E5%85%B3%E7%B3%BB&#34;&gt;1.1、首次提交后，各对象间关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E5%A4%9A%E6%AC%A1%E6%8F%90%E4%BA%A4%E5%90%8E%E6%8F%90%E4%BA%A4%E5%AF%B9%E8%B1%A1%E9%97%B4%E5%85%B3%E7%B3%BB&#34;&gt;1.2、多次提交后，提交对象间关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E6%9C%AC%E5%9C%B0master%E4%B8%BB%E5%88%86%E6%94%AF&#34;&gt;1.3、本地master主分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14%E5%88%9B%E5%BB%BA%E6%96%B0%E5%88%86%E6%94%AF&#34;&gt;1.4、创建新分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15%E5%BD%93%E5%89%8D%E5%88%86%E6%94%AF&#34;&gt;1.5、当前分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#16%E5%88%87%E6%8D%A2%E5%88%86%E6%94%AF&#34;&gt;1.6、切换分支&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%88%86%E6%94%AF%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B&#34;&gt;二、分支工作流程&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E5%BC%80%E5%8F%91%E6%9F%90%E4%B8%AA%E9%A1%B9%E7%9B%AEmaster%E5%88%86%E6%94%AF&#34;&gt;2.1、开发某个项目（master分支）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E4%B8%BA%E8%AF%A5%E9%A1%B9%E7%9B%AE%E5%A2%9E%E5%8A%A0%E6%9F%90%E4%B8%AA%E6%96%B0%E9%9C%80%E6%B1%82-iss53%E5%88%86%E6%94%AF&#34;&gt;2.2、为该项目增加某个新需求 (iss53分支)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E4%BF%AE%E8%A1%A5%E4%B8%8A%E7%BA%BF%E9%A1%B9%E7%9B%AEbughotfix%E5%88%86%E6%94%AF&#34;&gt;2.3、修补上线项目Bug（hotfix分支）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E5%90%88%E5%B9%B6%E8%A1%A5%E4%B8%81hotfix%E5%88%86%E6%94%AF%E5%88%B0master%E5%88%86%E6%94%AF&#34;&gt;2.4、合并补丁（hotfix分支）到master分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E7%BB%A7%E7%BB%AD%E5%BC%80%E5%8F%91%E6%96%B0%E9%9C%80%E6%B1%82%E5%B9%B6%E7%BA%B3%E5%85%A5%E5%B7%B2%E5%8F%91%E5%B8%83%E7%9A%84%E8%A1%A5%E4%B8%81&#34;&gt;2.5、继续开发新需求，并纳入已发布的补丁&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;三、远程分支&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%85%8B%E9%9A%86%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;3.1、克隆远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E6%9B%B4%E6%96%B0%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;3.2、更新本地分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E8%B7%9F%E8%B8%AA%E5%88%86%E6%94%AF&#34;&gt;3.3、跟踪分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34%E6%8E%A8%E9%80%81%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;3.4、推送本地分支&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E8%A1%8D%E5%90%88&#34;&gt;四、衍合&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E5%90%88%E5%B9%B6%E4%B8%8E%E8%A1%8D%E5%90%88%E5%8C%BA%E5%88%AB&#34;&gt;4.1、合并与衍合区别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E8%A1%8D%E5%90%88rebase%E9%A3%8E%E9%99%A9&#34;&gt;4.2、衍合(rebase)风险&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%B0%8F%E7%BB%93&#34;&gt;五、小结&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51%E6%96%B0%E5%BB%BA%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;5.1、新建本地分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52%E5%90%88%E5%B9%B6%E6%9C%AC%E5%9C%B0%E5%88%86%E6%94%AF&#34;&gt;5.2、合并本地分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53%E8%A7%A3%E5%86%B3%E5%90%88%E5%B9%B6%E5%86%B2%E7%AA%81&#34;&gt;5.3、解决合并冲突&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#54%E5%90%88%E5%B9%B6%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;5.4、合并远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#55%E5%88%A0%E9%99%A4%E8%BF%9C%E7%A8%8B%E5%88%86%E6%94%AF&#34;&gt;5.5、删除远程分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#56%E5%88%9B%E5%BB%BA%E8%B7%9F%E8%B8%AA%E5%88%86%E6%94%AF&#34;&gt;5.6、创建跟踪分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#57%E6%9F%A5%E7%9C%8B%E5%88%86%E6%94%AF&#34;&gt;5.7、查看分支&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#58%E8%A1%8D%E5%90%88%E6%89%80%E5%9C%A8%E5%88%86%E6%94%AF&#34;&gt;5.8、衍合所在分支&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Git 分支模型被称为“必杀技特性”，与其他版本控制系统相比可谓是难以置信的轻量级，本文是 &lt;a href=&#34;http://www.wangyan.cloud/git-guide/&#34;&gt;《Git 使用指南》&lt;/a&gt; 后续：图解Git的分支管理。&lt;/p&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://progit.org/book/zh/&#34;&gt;《Pro Git》&lt;/a&gt; 阅读笔记整理，文中不详细之处，可阅读原著补充。&lt;/p&gt;
&lt;h2 id=&#34;一git-分支本质&#34;&gt;一、Git 分支本质&lt;/h2&gt;
&lt;h3 id=&#34;11首次提交后各对象间关系&#34;&gt;1.1、首次提交后，各对象间关系&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;生成blob类型对象，它存储着当前文件状态的快照。（暂存操作）&lt;/li&gt;
&lt;li&gt;生成tree对象，该对象中的每个文件，包含着指向blob对象的索引。（提交）&lt;/li&gt;
&lt;li&gt;创建commit对象，它包含指向tree对象的索引和其他元数据。（提交操作）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-1：Git仓库各对象间关系&lt;/center&gt;
&lt;h3 id=&#34;12多次提交后提交对象间关系&#34;&gt;1.2、多次提交后，提交对象间关系&lt;/h3&gt;
&lt;p&gt;修改后再次提交，那么这次的提交对象会包含一个指向上次提交对象的指针。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-2：多次提交后，提交对象间的关系&lt;/center&gt;
&lt;h3 id=&#34;13本地master主分支&#34;&gt;1.3、本地master主分支&lt;/h3&gt;
&lt;p&gt;Git分支本质：是一个指向commit 对象的可变指针，例如master为默认分支名称。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-3：指向提交历史的master分支&lt;/center&gt;
&lt;h3 id=&#34;14创建新分支&#34;&gt;1.4、创建新分支&lt;/h3&gt;
&lt;p&gt;创建新分支本质：是创建一个指向当前commit对象的指针。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch testing &lt;span class=&#34;c1&#34;&gt;#创建testing分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-4.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-4.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-4：指向同一提交历史的多个分支(master、testing)&lt;/center&gt;
&lt;h3 id=&#34;15当前分支&#34;&gt;1.5、当前分支&lt;/h3&gt;
&lt;p&gt;HEAD 指针指向当前分支，默认指向 master 分支。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-5.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-5.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-5：HEAD 指向当前所在的分支&lt;/center&gt;
&lt;h3 id=&#34;16切换分支&#34;&gt;1.6、切换分支&lt;/h3&gt;
&lt;p&gt;checkout 切换至 testing 分支，于是 HEAD 指针也指向了testing分支。（图1-6-1）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout testing &lt;span class=&#34;c1&#34;&gt;#切换至testing分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-6-1：HEAD 指向了testing分支&lt;/center&gt;
&lt;p&gt;修改后再提交，HEAD 依然随着testing分支一起向前移动（图1-6-2）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim test.rb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -a -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;made a change&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-6-2：每次提交后HEAD 随着分支一起向前移动&lt;/center&gt;
&lt;p&gt;返回原来的master主分支继续工作。（图1-6-3）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-6-3：返回原来的master主分支&lt;/center&gt;
&lt;p&gt;当在主分支中修改提交后，分叉出&amp;quot;87ab2&amp;quot;的提交对象，但不会干扰到testing分支。（图1-6-4）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim test.rb
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -a -m &lt;span class=&#34;s1&#34;&gt;&amp;#39;made other changes&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-4.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-1-6-4.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图1-6-4：分叉了的分支历史&lt;/center&gt;
&lt;h2 id=&#34;二分支工作流程&#34;&gt;二、分支工作流程&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;开发某个项目 (master主分支，生产服务器)&lt;/li&gt;
&lt;li&gt;为该项目增加某个新需求 (iss53分支)&lt;/li&gt;
&lt;li&gt;已上线项目需要修补，于是为本次修补建立新分支(hotfix分支)&lt;/li&gt;
&lt;li&gt;合并补丁（hotfix分支）到master分支，完成已上线项目Bug修补&lt;/li&gt;
&lt;li&gt;继续开发新需求（iss53分支），并且纳入已发布的补丁&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;21开发某个项目master分支&#34;&gt;2.1、开发某个项目（master分支）&lt;/h3&gt;
&lt;p&gt;首先，我们正在开发某个项目，并推送到了生产服务器。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-1：一个简单的提交历史&lt;/center&gt;
&lt;h3 id=&#34;22为该项目增加某个新需求-iss53分支&#34;&gt;2.2、为该项目增加某个新需求 (iss53分支)&lt;/h3&gt;
&lt;p&gt;创建并切换至iss53分支，注意要加&amp;quot;-b&amp;quot;参数。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b iss53&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-2-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-2-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-2-1：创建一个新的分支(iss53)&lt;/center&gt;
&lt;p&gt;修改后再次提交。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim index.html 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git commit -a-m &lt;span class=&#34;s1&#34;&gt;&amp;#39;addedanewfooter [issue53]&amp;#39;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-2-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-2-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-2-2：iss53 分支随工作进展向前推进&lt;/center&gt;
&lt;h3 id=&#34;23修补上线项目bughotfix分支&#34;&gt;2.3、修补上线项目Bug（hotfix分支）&lt;/h3&gt;
&lt;p&gt;已上线项目需要修补，于是为本次修补建立新分支(hotfix分支)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master &lt;span class=&#34;c1&#34;&gt;#首先切换到主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b &lt;span class=&#34;s1&#34;&gt;&amp;#39;hotfix&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#然后创建hotfix分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-3：hotfix分支是从master(c2位置)分出&lt;/center&gt;
&lt;h3 id=&#34;24合并补丁hotfix分支到master分支&#34;&gt;2.4、合并补丁（hotfix分支）到master分支&lt;/h3&gt;
&lt;p&gt;补丁（hotfix分支）测试完毕，于是合并到master分支，完成Bug修补。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master  &lt;span class=&#34;c1&#34;&gt;#首先切换到主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge hotfix &lt;span class=&#34;c1&#34;&gt;#测试完毕后，合并hotfix分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -d hotfix &lt;span class=&#34;c1&#34;&gt;#删除已合并的hotfix分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;合并时会出现“Fast forward”（快进）提示，表示无分歧需要解决，直接向前移动指针。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-4.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-4.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-4：合并hotfix分支后指针位置&lt;/center&gt;
&lt;h3 id=&#34;25继续开发新需求并纳入已发布的补丁&#34;&gt;2.5、继续开发新需求，并纳入已发布的补丁&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master &lt;span class=&#34;c1&#34;&gt;#切换至master &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge iss53 &lt;span class=&#34;c1&#34;&gt;#合并iss53到master&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意：这次与之前hotfix合并不同，由于当前master分支直接祖先是C2，iss53分支直接祖先是C3，所以Git需要和它们的共同祖先C2进行一次简单的三方合并计算。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-5-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-5-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-5-1：合并iss53分支后指针位置&lt;/center&gt;
&lt;p&gt;解决合并冲突&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status &lt;span class=&#34;c1&#34;&gt;#合并失败的文件以&amp;#34;unmerged&amp;#34;标出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;c1&#34;&gt;#标记冲突已解决，并暂存文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#git mergetool Git默认图形化冲突解决工具&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-2-5-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-2-5-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图2-5-2：Git 自动创建了包含合并结果的对象(C6)&lt;/center&gt;
&lt;h2 id=&#34;三远程分支&#34;&gt;三、远程分支&lt;/h2&gt;
&lt;p&gt;远程分支（remote branch）是对远程仓库状态的索引，格式如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;格式：远程仓库名/分支名
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;默认：origin/master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;31克隆远程分支&#34;&gt;3.1、克隆远程分支&lt;/h3&gt;
&lt;p&gt;Git clone 会克隆远程origin/master分支，并建立一个相同位置的本地master分支。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图3-1-1：Git clone 建立本地master和远程origin/master分支&lt;/center&gt;
&lt;p&gt;正在本地master分支工作，与此同时，其他人向远程仓库推送了内容，从f42c5更新到了190a3，但是本地origin/master指针依然会停留在f42c5位置。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图3-1-2：远程仓库更新，但本地origin/master指针不改变&lt;/center&gt;
&lt;h3 id=&#34;32更新本地分支&#34;&gt;3.2、更新本地分支&lt;/h3&gt;
&lt;p&gt;git fetch 从远程仓库更新你本地还没有的数据。（新增了31b8e,190a3）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-3-1-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图3-1-3：运行 git fetch origin 同步远程仓库至本地&lt;/center&gt;
&lt;p&gt;注意：在fetch操作抓来新远程分支XX之后，本地不会新增XX分支，有的只是一个你无法移动的origin/XX指针。&lt;/p&gt;
&lt;p&gt;如果要把远程分支合并到当前分支，可以运行：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程仓库名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge origin/serverfix。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33跟踪分支&#34;&gt;3.3、跟踪分支&lt;/h3&gt;
&lt;p&gt;从远程分支检出的本地分支，称为跟踪分支(tracking branch)。在跟踪分支里git push可推送本地分支到相应的远程仓库，反过来可直接运行git pull，可获取远程分支所有更新，并且合并到当前本地分支。&lt;/p&gt;
&lt;p&gt;注：克隆操作会自动创建一个master分支来跟踪origin/master。&lt;/p&gt;
&lt;p&gt;如果想要在远程分支的基础上分化出一个新分支，可以运行：&lt;/p&gt;
&lt;p&gt;方法一：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b serverfix origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：（适用1.6.2以上版本Git）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34推送本地分支&#34;&gt;3.4、推送本地分支&lt;/h3&gt;
&lt;p&gt;方法一：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;语法：git push &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;远程仓库名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;本地分支名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：git push origin serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：（可自定义远程分支名）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;语法：git push &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;远程仓库名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;本地分支名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;:&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;远程分支名&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：git push origin serverfix:serferfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四衍合&#34;&gt;四、衍合&lt;/h2&gt;
&lt;p&gt;把一个分支整合到另一个分支的办法有两种：merge（合并） 和rebase（衍合），两者得到的结果一样，但衍合能产生一个更为整洁的提交历史。&lt;/p&gt;
&lt;h3 id=&#34;41合并与衍合区别&#34;&gt;4.1、合并与衍合区别&lt;/h3&gt;
&lt;p&gt;合并(merge)：通过C2-C3-C4三方合并计算生成C5。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-1.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图4-1-1：合并(merge)分支后的提交历史&lt;/center&gt;
&lt;p&gt;衍合(rebase)：把在C3 里产生的变化补丁重新在C4 的基础上打一遍。&lt;/p&gt;
&lt;p&gt;衍合原理：从两个分支共同祖先(C2)开始，提取你所在分支(experiment)每次提交时产生的差异（diff），然后回到需要衍合入的分支(master)，按顺序施用每一个差异补丁文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout experiment
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase master&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-2.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图4-1-2：把C3 里产生的改变衍合到C4 中&lt;/center&gt;
&lt;p&gt;最后回到master分支进行一次快进合并，结果同三方合并例子中的C5内容一模一样，但衍合能产生一个更为整洁的提交历。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-3jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/g/git-4-1-3.jpg&#34;&gt;&lt;/p&gt;
&lt;center&gt;图4-1-3：master 分支的快进。&lt;/center&gt;
&lt;h3 id=&#34;42衍合rebase风险&#34;&gt;4.2、衍合(rebase)风险&lt;/h3&gt;
&lt;p&gt;注释事项：永远不要衍合那些已经推送到公共仓库的更新。&lt;/p&gt;
&lt;p&gt;常见用法：一般把衍合当成一种在推送之前清理提交历史的手段，而且仅仅衍合那些永远不会公开的commit&lt;/p&gt;
&lt;h2 id=&#34;五小结&#34;&gt;五、小结&lt;/h2&gt;
&lt;h3 id=&#34;51新建本地分支&#34;&gt;5.1、新建本地分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch testing &lt;span class=&#34;c1&#34;&gt;#创建testing分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout testing &lt;span class=&#34;c1&#34;&gt;#切换至testing分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b iss53 &lt;span class=&#34;c1&#34;&gt;#创建并切换至iss53分支。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52合并本地分支&#34;&gt;5.2、合并本地分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout master  &lt;span class=&#34;c1&#34;&gt;#首先切换到主分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge hotfix &lt;span class=&#34;c1&#34;&gt;#测试完毕后，合并hotfix分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -d hotfix &lt;span class=&#34;c1&#34;&gt;#删除已合并的hotfix分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;53解决合并冲突&#34;&gt;5.3、解决合并冲突&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git status &lt;span class=&#34;c1&#34;&gt;#合并失败的文件以&amp;#34;unmerged&amp;#34;标出&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git add . &lt;span class=&#34;c1&#34;&gt;#标记冲突已解决，并暂存文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git mergetool &lt;span class=&#34;c1&#34;&gt;#Git默认图形化冲突解决工具&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;54合并远程分支&#34;&gt;5.4、合并远程分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;origin/master &lt;span class=&#34;c1&#34;&gt;#格式：远程仓库/分支名&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git merge origin/serverfix &lt;span class=&#34;c1&#34;&gt;#合并远程分支serverfix到当前分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;55删除远程分支&#34;&gt;5.5、删除远程分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#git push [远程仓库名] :[远程分支]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#注意区别：git push [远程名] [本地分支]:[远程分支]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git push origin :serverfix　&lt;span class=&#34;c1&#34;&gt;#删除远程分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;56创建跟踪分支&#34;&gt;5.6、创建跟踪分支&lt;/h3&gt;
&lt;p&gt;方法一：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout -b serverfix origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：（适用1.6.2以上版本Git）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;远程名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;/&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;分支名&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout --track origin/serverfix&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;57查看分支&#34;&gt;5.7、查看分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch &lt;span class=&#34;c1&#34;&gt;#列出所有分支，星号&amp;#34;*&amp;#34;表示当前所在分支。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch -v &lt;span class=&#34;c1&#34;&gt;#查看各分支最后一次提交信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看已和当前分支合并的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#可用git branch -d 删掉未标星号的分支，因为已经合并了。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --merged 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#查看未和当前分支合并的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#强制删除未合并的分支git branch -D&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git branch --no-merged &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;58衍合所在分支&#34;&gt;5.8、衍合所在分支&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git checkout experiment &lt;span class=&#34;c1&#34;&gt;#切换到需要衍合的分支&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git rebase master &lt;span class=&#34;c1&#34;&gt;#衍合experiment分支到主分支&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>jawstats 简体中文语言包</title>
        <link>https://www.bg7pbp.com/p/jawstats-chinese-language-pack/</link>
        <pubDate>Fri, 23 Dec 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/jawstats-chinese-language-pack/</guid>
        <description>&lt;p&gt;JAWStats是Awstats的PHP前端，可提供精美图形界面。jawstats 简体中文语言包是此前自己花了不少时间汉化的，现共享出来供有需要的朋友使用。&lt;/p&gt;
&lt;p&gt;更多关于JAWStats的介绍见 &lt;a href=&#34;http://www.wangyan.cloud/vps-nginx-awstats-jawstats/&#34;&gt;Nginx日志分析AWStats+JAWStats安装配置&lt;/a&gt;  、 &lt;a href=&#34;http://www.wangyan.cloud/vps-nginx-awstats-geoip/&#34;&gt;AWStats国家地区扩展GeoIP安装配置&lt;/a&gt;  、&lt;a href=&#34;http://www.wangyan.cloud/vps-nginx-jawstats-multiple-sites/&#34;&gt;JAWStats 多个站点配置&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;使用方法&#34;&gt;使用方法：&lt;/h2&gt;
&lt;p&gt;上传至JAWStats的languages文件夹，覆盖原文件。&lt;/p&gt;
&lt;h2 id=&#34;下载地址&#34;&gt;下载地址：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;git clone git://github.com/wangyan/jawstats.git&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;建议反馈&#34;&gt;建议反馈：&lt;/h2&gt;
&lt;p&gt;如果您发现翻译存在错误或有更好的建议，可直接留言或发邮件至：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;myidwy(at)gmail.com&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Linux自动备份Shell脚本</title>
        <link>https://www.bg7pbp.com/p/linux-auto-backup-shell-script/</link>
        <pubDate>Wed, 21 Dec 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-auto-backup-shell-script/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%89%B9%E7%82%B9%E4%B8%8E%E5%8A%9F%E8%83%BD&#34;&gt;一、特点与功能&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%B8%8B%E8%BD%BD%E4%B8%8E%E4%BD%BF%E7%94%A8&#34;&gt;二、下载与使用&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E4%B8%8B%E8%BD%BD%E8%84%9A%E6%9C%AC&#34;&gt;2.1、下载脚本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E8%AE%BE%E7%BD%AEcron%E5%AE%88%E6%8A%A4%E8%BF%9B%E7%A8%8B&#34;&gt;2.2、设置cron守护进程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%AE%89%E8%A3%85%E9%99%84%E5%8A%A0%E8%BD%AF%E4%BB%B6&#34;&gt;2.3、安装附加软件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE%E9%80%89%E9%A1%B9&#34;&gt;三、配置选项&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%A4%87%E4%BB%BD%E6%95%B0%E6%8D%AE%E5%AD%98%E6%94%BE%E7%9B%AE%E5%BD%95&#34;&gt;备份数据存放目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#mysql%E5%A4%87%E4%BB%BD%E9%80%89%E9%A1%B9&#34;&gt;MySQL备份选项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#web%E5%A4%87%E4%BB%BD%E9%80%89%E9%A1%B9&#34;&gt;web备份选项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#ftp%E5%A4%87%E4%BB%BD%E9%80%89%E9%A1%B9&#34;&gt;FTP备份选项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#scp%E5%A4%87%E4%BB%BD%E9%80%89%E9%A1%B9&#34;&gt;SCP备份选项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#amazon-s3%E5%A4%87%E4%BB%BD%E9%80%89%E9%A1%B9&#34;&gt;Amazon S3备份选项&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%BB%BA%E8%AE%AE%E5%8F%8D%E9%A6%88&#34;&gt;四、建议反馈&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E6%9B%B4%E6%96%B0%E5%8E%86%E5%8F%B2&#34;&gt;五、更新历史&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;VPS自动备份Shell脚本，用于Linux系统上一键备份和管理MySQL数据库以及Web数据，并自动上传至远程备份服务器。&lt;/p&gt;
&lt;h2 id=&#34;一特点与功能&#34;&gt;一、特点与功能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;纯shell脚本，使用简单，技术门槛低，容易修改，删除即可卸载。&lt;/li&gt;
&lt;li&gt;可指定数据备份频率及保存的备份数量，能自动删除不必要的旧备份。&lt;/li&gt;
&lt;li&gt;可指定多个需要备份的Mysql数据库，甚至排除某个数据库不备份。&lt;/li&gt;
&lt;li&gt;可指定多个需要备份的数据目录，甚至支持二级目录打包备份。&lt;/li&gt;
&lt;li&gt;支持本地和多重备份(ftp,scp,amazon s3)，异地备份可选完全和增量备份。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二下载与使用&#34;&gt;二、下载与使用&lt;/h2&gt;
&lt;h3 id=&#34;21下载脚本&#34;&gt;2.1、下载脚本&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/1505857&#34;&gt;https://gist.github.com/1505857&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/shell/vps_auto_backup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt; vps_auto_backup.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /var/shell &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; mv vps_auto_backup.sh /var/shell&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22设置cron守护进程&#34;&gt;2.2、设置cron守护进程&lt;/h3&gt;
&lt;p&gt;自动执行频率可随意设置，一般一小时一次就足够了。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; * * * * /bin/bash  /var/shell/vps_auto_backup.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23安装附加软件&#34;&gt;2.3、安装附加软件&lt;/h3&gt;
&lt;p&gt;如果你需要进行远程FTP、SCP备份，则需安装lftp、expect。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install lftp expect &lt;span class=&#34;c1&#34;&gt;#centos&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install lftp expect &lt;span class=&#34;c1&#34;&gt;#ubuntu&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三配置选项&#34;&gt;三、配置选项&lt;/h2&gt;
&lt;h3 id=&#34;备份数据存放目录&#34;&gt;备份数据存放目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;BACKUP_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/root/vps-bak&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;mysql备份选项&#34;&gt;MySQL备份选项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 是否启用Mysql备份，0是关闭，1是启用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_MYSQL_BACKUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据库备份时间间隔，1小时=3600秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_BACKUP_CYCLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;43200&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据库备份保存数量，默认保存最近4次备份。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 例如：一天备份二次，需要保存最近二天备份，则此处填&amp;#34;4&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_BACKUP_NUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;4&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据库主机、用户名、密码。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_HOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;localhost&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_PWD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 需要备份的数据库名，多个数据库要用空格分开，all表示所有数据库。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_DB_NAMES&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;all&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 需要排除备份的数据库名，多个数据库要用&amp;#34;|&amp;#34;分开。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MYSQL_EXCLUDE_DB&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;phpmyadmin|information_schema|performance_schema&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;web备份选项&#34;&gt;web备份选项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 是否启用Web数据本地备份，0是关闭，1是启用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_LOCAL_BACKUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据备份时间间隔，1小时=3600秒。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WWW_BACKUP_CYCLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;86400&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 数据备份保存数量，默认保存最近2次备份。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 例如：一天备份一次，需要保存最近二天备份，则此处填&amp;#34;2&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WWW_BACKUP_NUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 需要备份的数据源目录，多个目录要用空格分开。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WWW_BACKUP_DIRS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/home /var/www&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 需要备份的数据源目录深度，文件夹=0，文件夹+子文件夹=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;WWW_BACKUP_DEPTH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;ftp备份选项&#34;&gt;FTP备份选项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 是否启用远程FTP备份，0是关闭，1是启用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_FTP_BACKUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# FTP备份间隔，0表示禁用，1小时=3600秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_BACKUP_CYCLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# FTP备份模式，完全备份=0，增量备份=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_BACKUP_MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 远程FTP存储备份文件夹，如果不存在，则脚本会自动创建。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_REMOTE_DIR&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vps-bak&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 远程FTP主机、用户名、密码。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_HOSTNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;192.168.8.128&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_USERNAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;FTP_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;test&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;scp备份选项&#34;&gt;SCP备份选项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 是否启用远程scp备份，0是关闭，1是启用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 注意：为支持免证书登陆，需安装“expect”（yum -y install expect）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_SCP_BACKUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# SCP备份间隔，0表示禁用，1小时=3600秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCP_BACKUP_CYCLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 远程主机、用户名、密码。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCP_HOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;192.168.8.128&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCP_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;root&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCP_PASSWD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 远程主机存储备份文件夹。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SCP_REMOTE_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/root/vps-bak&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;amazon-s3备份选项&#34;&gt;Amazon S3备份选项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 是否启用Amazon s3备份，0是关闭，1是启用。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ENABLE_S3_BACKUP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Amazon s3 备份间隔，0表示禁用，1小时=3600秒&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;S3_BACKUP_CYCLE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Amazon s3备份模式，完全备份=0，增量备份=1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;S3_BACKUP_MODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Amazon s3　BUCKET名称，如果不存在，则脚本会自动创建。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;S3_BUCKET&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;vps-bak&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Amazon access key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ACCESS_KEY_ID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Amazon secret access key&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SECRET_ACCESS_KEY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四建议反馈&#34;&gt;四、建议反馈&lt;/h2&gt;
&lt;p&gt;如果您发现脚本存在错误或有更好的建议，可直接留言或发邮件至：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;myidwy(at)gmail.com&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;五更新历史&#34;&gt;五、更新历史&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;2011.12.23: 更新至0.2版，支持自定义远程备份频率、优化代码减少冗余。&lt;/li&gt;
&lt;li&gt;2012.01.26: 更新至0.3版，修复在特定条件下，备份时间间隔值设置无效。&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>MySQL复制(Replication)配置笔记</title>
        <link>https://www.bg7pbp.com/p/mysql-replication-setup/</link>
        <pubDate>Sat, 19 Nov 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mysql-replication-setup/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80mysql%E4%B8%BB%E5%A4%8D%E5%88%B6%E9%85%8D%E7%BD%AE&#34;&gt;一、MySQL主复制配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%B8%85%E7%90%86mysql%E6%97%A5%E5%BF%97&#34;&gt;1、清理MySQL日志&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E9%94%81%E8%A1%A8%E8%8E%B7%E5%8F%96%E4%B8%BB%E5%A4%8D%E5%88%B6%E6%97%A5%E5%BF%97%E5%90%8D%E5%92%8C%E5%81%8F%E7%A7%BB%E9%87%8F&#34;&gt;2、锁表、获取主复制日志名和偏移量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%88%9B%E5%BB%BA%E4%BB%8E%E5%A4%8D%E5%88%B6%E8%BF%9E%E6%8E%A5%E7%94%A8%E6%88%B7&#34;&gt;3、创建从复制连接用户&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4mysql%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;4、MySQL配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cmysql%E4%BB%8E%E5%A4%8D%E5%88%B6%E9%85%8D%E7%BD%AE&#34;&gt;二、MySQL从复制配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E8%BF%98%E5%8E%9F%E6%95%B0%E6%8D%AE%E5%BF%AB%E7%85%A7&#34;&gt;1、还原数据快照&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E9%85%8D%E7%BD%AE%E4%B8%BB%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%BF%A1%E6%81%AF&#34;&gt;2、配置主服务器信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%90%AF%E5%8A%A8%E4%BB%8E%E5%A4%8D%E5%88%B6%E8%BF%9B%E7%A8%8B%E6%9F%A5%E7%9C%8B%E7%8A%B6%E6%80%81&#34;&gt;3、启动从复制进程、查看状态。&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL 支持一种叫复制（replication）的特性，作用是可以将MySQL主服务器数据（Master）异步复制到MySQL从服务器（Slave），以实现多台服务器数据的实时同步。&lt;/p&gt;
&lt;p&gt;MySQL Replication 详细配置请参考官方手册：&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/replication.html&#34;&gt;MySQL中的复制&lt;/a&gt; 、  &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.5/en/replication.html&#34;&gt;Replication&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;一mysql主复制配置&#34;&gt;一、MySQL主复制配置&lt;/h2&gt;
&lt;h3 id=&#34;1清理mysql日志&#34;&gt;1、清理MySQL日志&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logs&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;purge&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;binary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logs&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mysql-bin.000325&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;LOGS&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2锁表获取主复制日志名和偏移量&#34;&gt;2、锁表、获取主复制日志名和偏移量&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;FLUSH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TABLES&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WITH&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;READ&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;LOCK&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;show&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;status&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;UNLOCK&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;TABLES&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;打包MySQL数据，并传送到从服务器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -cvf /tmp/mysql-snapshot.tar .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp /tmp/mysql-snapshot.tar root@176.32.85.16:/tmp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3创建从复制连接用户&#34;&gt;3、创建从复制连接用户&lt;/h3&gt;
&lt;p&gt;注意修改默认用户名：repl、密码：slavepass&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;GRANT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;REPLICATION&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLAVE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;ON&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;repl&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;IDENTIFIED&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;BY&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;slavepass&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;4mysql配置文件&#34;&gt;4、MySQL配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysqld&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;log-bin&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql-bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;binlog_format&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mixed
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server-id &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;binlog-ignore-db&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;phpmyadmin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;innodb_flush_log_at_trx_commit&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;slave-skip-errors&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;all&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;配置主-主服务器时必须额外使用下面选项：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;log-slave-updates
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;sync_binlog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;auto_increment_offset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;auto_increment_increment&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二mysql从复制配置&#34;&gt;二、MySQL从复制配置&lt;/h2&gt;
&lt;h3 id=&#34;1还原数据快照&#34;&gt;1、还原数据快照&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/data
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xvf /tmp/mysql-snapshot.tar&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2配置主服务器信息&#34;&gt;2、配置主服务器信息&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;CHANGE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;MASTER&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;TO&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MASTER_HOST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;106.187.38.210&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MASTER_USER&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;repl&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MASTER_PASSWORD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MASTER_LOG_FILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mysql-bin.000001&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;MASTER_LOG_POS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1579&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3启动从复制进程查看状态&#34;&gt;3、启动从复制进程、查看状态。&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;slave&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;mysql&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SHOW&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SLAVE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;STATUS&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;G&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：上面所有操作都是可以在phpMyadmin中以图形化方式完成。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/replication.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/replication.jpg&#34;&gt;&lt;/p&gt;</description>
        </item>
        <item>
        <title>nginx开机自启动init脚本</title>
        <link>https://www.bg7pbp.com/p/nginx-init-script/</link>
        <pubDate>Sat, 19 Nov 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-init-script/</guid>
        <description>&lt;p&gt;适用于源码编译安装nginx的用户，支持RedHat、CentOS、Debian、Ubuntu等发行版，支持start|stop|restart|reload 四个基本操作，非常简单实用。&lt;/p&gt;
&lt;h2 id=&#34;一使用方法&#34;&gt;一、使用方法&lt;/h2&gt;
&lt;p&gt;1、安装&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/conf/init.d.nginx -P /etc/init.d/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt;  /etc/init.d/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig --add nginx &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;RedHat&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d -f nginx defaults &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;debian&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、卸载&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chkconfig --del nginx &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;RedHat&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d -f nginx remove &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;debian&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、使用实例&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service nginx stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service nginx start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service nginx restart
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service nginx reload&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二脚本内容&#34;&gt;二、脚本内容&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# nginx      Start up the nginx server daemon&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# chkconfig: 2345 55 25&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Description: starts and stops the nginx web server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;### BEGIN INIT INFO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Provides:          nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Required-Start:    $all&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Required-Stop:     $all&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Default-Start:     2 3 4 5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Default-Stop:      0 1 6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Description:       starts and stops the nginx web server&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;### END INIT INFO&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Author: WangYan &amp;lt;webmaster@wangyan.org&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Version:1.0 (2011.19.15)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# To install:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   copy this file to /etc/init.d/nginx&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   shell&amp;gt; chkconfig --add nginx (RedHat)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   shell&amp;gt; update-rc.d -f nginx defaults (debian)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# To uninstall:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   shell&amp;gt; chkconfig --del nginx (RedHat)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   shell&amp;gt; update-rc.d -f nginx remove&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DAEMON&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/sbin/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;CONFIGFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx/conf/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PIDFILE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/run/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;ULIMIT&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10240&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -x &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DAEMON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;do_start&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Starting &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; ...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;ulimit&lt;/span&gt; -SHn &lt;span class=&#34;nv&#34;&gt;$ULIMIT&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;$DAEMON&lt;/span&gt; -c &lt;span class=&#34;nv&#34;&gt;$CONFIGFILE&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;do_stop&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Shutting down &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; ...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat &lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;do_reload&lt;span class=&#34;o&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Reloading &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; ...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -HUP &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;cat &lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;case&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    start&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; ! -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; do_start &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nginx already running&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;.\ndone&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    stop&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; do_stop &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nginx not running&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;.\ndone&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    restart&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; do_stop &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nginx not running&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        do_start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;.\ndone&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    reload&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; -f &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PIDFILE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; do_reload &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nginx not running&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; -e &lt;span class=&#34;s2&#34;&gt;&amp;#34;.\ndone&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    *&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;N&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;Usage: &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$N&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; {start|stop|restart|reload}&amp;#34;&lt;/span&gt; &amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;esac&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>rTorrent &#43; ruTorrent 一键安装包</title>
        <link>https://www.bg7pbp.com/p/rtorrent-rutorrent-installer/</link>
        <pubDate>Thu, 03 Nov 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/rtorrent-rutorrent-installer/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80&#34;&gt;一、下载地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4&#34;&gt;二、安装步骤&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;rTorrent + ruTorrent 一键安装包使用 Linux Shell 语言编写，用于在 Linux 操作系统 (Redhat/CentOS/Debian/Ubuntu) 一键安装 &lt;a href=&#34;http://rakshasa.no/&#34;&gt;rTorrent&lt;/a&gt; 和 &lt;a href=&#34;http://code.google.com/p/rutorrent/&#34;&gt;ruTorrent&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;rTorrent + ruTorrent 一键安装包基于前文 &lt;a href=&#34;http://www.wangyan.cloud/bt-rtorrent-rutorrent&#34;&gt;rTorrent + ruTorrent 安装和配置&lt;/a&gt; 的思路进行编写，如果要安装ruTorrent，那么要求支持PHP的Web环境已经配置好，否则安装出错。&lt;/p&gt;
&lt;h2 id=&#34;一下载地址&#34;&gt;一、下载地址&lt;/h2&gt;
&lt;p&gt;方法1：（推荐）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://github.com/wangyan/rtrut.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; rtrut &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法2：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/src/rtrut-0.1b1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf rtrut-0.1b1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; rtrut &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; ./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装步骤&#34;&gt;二、安装步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;选择是否需要安装ruTorrent，默认值 &amp;lsquo;y&amp;rsquo;，如果选择 &amp;rsquo;n&amp;rsquo;，则跳至最后一步。&lt;/li&gt;
&lt;li&gt;输入IP或者域名，默认会自动获取，如果不准确请手动输入。&lt;/li&gt;
&lt;li&gt;选择网站根目录，比如：/var/www，/home/www&lt;/li&gt;
&lt;li&gt;输入Nginx配置文件路径，默认值是 /usr/local/nginx/conf/nginx.conf&lt;/li&gt;
&lt;li&gt;按任意键开始安装，可以按&lt;ctrl&gt;+c退出。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/rtrut-1.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/rtrut-1.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/rtrut-2.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/rtrut-2.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/rtrut-3.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/rtrut-3.jpg&#34;&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>rTorrent &#43; ruTorrent 安装和配置</title>
        <link>https://www.bg7pbp.com/p/rtorrent-rutorrent-install-config/</link>
        <pubDate>Sun, 30 Oct 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/rtorrent-rutorrent-install-config/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-libtorrent&#34;&gt;一、编译安装 libtorrent&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E5%AE%89%E8%A3%85%E7%BC%96%E8%AF%91%E5%B7%A5%E5%85%B7&#34;&gt;1.1 安装编译工具&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E4%B8%8B%E8%BD%BD%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;1.2 下载、编译、安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-rtorrent&#34;&gt;二、编译安装 rtorrent&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E7%9A%84%E8%BD%AF%E4%BB%B6%E5%8C%85&#34;&gt;2.1 安装依赖的软件包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E9%85%8D%E7%BD%AE%E7%8E%AF%E5%A2%83%E5%8F%98%E9%87%8F&#34;&gt;2.2 配置环境变量&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%AE%89%E8%A3%85-xmlrpc&#34;&gt;2.3 安装 xmlrpc&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-rtorrent&#34;&gt;2.4 编译安装 rtorrent&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89rtorrent-%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;三、rTorrent 使用方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-rtorrent-%E5%90%8E%E5%8F%B0%E5%90%AF%E5%8A%A8%E8%84%9A%E6%9C%AC&#34;&gt;3.1 rtorrent 后台启动脚本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-rtorrent-%E8%BF%90%E8%A1%8C%E6%96%B9%E6%B3%95&#34;&gt;3.2 rtorrent 运行方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-rtorrent-%E9%85%8D%E7%BD%AE&#34;&gt;3.3 rtorrent 配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Brutorrent-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE&#34;&gt;四、ruTorrent 安装配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-rtorrent-xmlrpc-c-%E9%85%8D%E7%BD%AE&#34;&gt;4.1 rtorrent xmlrpc-c 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-nginx-xmlrpc-%E9%85%8D%E7%BD%AE&#34;&gt;4.2 Nginx xmlrpc 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-rutorrent-%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE&#34;&gt;4.3 ruTorrent 安装配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-rutorrent-%E8%AE%BF%E9%97%AE%E5%AF%86%E7%A0%81%E4%BF%9D%E6%8A%A4&#34;&gt;4.4 ruTorrent 访问密码保护&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E7%BB%93%E6%9D%9F&#34;&gt;五、结束&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;http://rakshasa.no/&#34;&gt;rTorren&lt;/a&gt; 是一款非常简洁优秀的BT客户端，它完全基于文本并可以在Linux终端中运行。 &lt;a href=&#34;http://code.google.com/p/rutorrent/&#34;&gt;ruTorrent&lt;/a&gt;  是基于PHP的一个rTorrent前端，提供图形化的界面来管理 rTorrent。&lt;/p&gt;
&lt;h2 id=&#34;一编译安装-libtorrent&#34;&gt;一、编译安装 libtorrent&lt;/h2&gt;
&lt;h3 id=&#34;11-安装编译工具&#34;&gt;1.1 安装编译工具&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install gcc-c++ libtool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install libsigc++20 libsigc++20-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12-下载编译安装&#34;&gt;1.2 下载、编译、安装&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://libtorrent.rakshasa.no/downloads/libtorrent-0.12.9.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libtorrent-0.12.9.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libtorrent-0.12.9
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编译安装-rtorrent&#34;&gt;二、编译安装 rtorrent&lt;/h2&gt;
&lt;h3 id=&#34;21-安装依赖的软件包&#34;&gt;2.1 安装依赖的软件包&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install gcc-c++ libtool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install libsigc++20 libsigc++20-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-配置环境变量&#34;&gt;2.2 配置环境变量&lt;/h3&gt;
&lt;p&gt;注：如果不先做这步，可能出现无法找到 libtorrent.so.5 等错误。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/lib/&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/ld.so.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;export&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;PKG_CONFIG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/lib/pkgconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-安装-xmlrpc&#34;&gt;2.3 安装 xmlrpc&lt;/h3&gt;
&lt;p&gt;如果你想直接通过web界面管理rtorrent，则此步不能省。rtorrent 0.7.5 以后的版本web gui是通过xmlrpc来驱动。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install xmlrpc-c-devel&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24-编译安装-rtorrent&#34;&gt;2.4 编译安装 rtorrent&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://libtorrent.rakshasa.no/downloads/rtorrent-0.8.9.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf rtorrent-0.8.9.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; rtorrent-0.8.9
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --with-xmlrpc-c
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三rtorrent-使用方法&#34;&gt;三、rTorrent 使用方法&lt;/h2&gt;
&lt;h3 id=&#34;31-rtorrent-后台启动脚本&#34;&gt;3.1 rtorrent 后台启动脚本&lt;/h3&gt;
&lt;p&gt;该脚本用于管理rtorrent，包括启动、停止、重启操作，脚本内容见下面链接。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/1326099&#34;&gt;https://gist.github.com/1326099&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注：若不想以root身份运行该脚本，请修改替换rtorrent.sh中的root字符。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/shell/rtorrent.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv rtorrent.sh /etc/init.d/rtorrent
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod a+x /etc/init.d/rtorrent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-rtorrent-运行方法&#34;&gt;3.2 rtorrent 运行方法&lt;/h3&gt;
&lt;p&gt;方法一（推荐）：使用上述管理脚本&lt;/p&gt;
&lt;p&gt;方法二（推荐）：通过Screen使用rTorrent，然后通过&lt;ctrl&gt;+A+D挂起、screen -r 恢复，详细快捷键见screen相关文档。&lt;/p&gt;
&lt;p&gt;方法三：直接在终端运行，然后通过&lt;ctrl&gt;+Q 退出。详细快捷键见官方文档&lt;a href=&#34;http://libtorrent.rakshasa.no/wiki/RTorrentUserGuide&#34;&gt;《RTorrentUserGuide》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/bin/rtorrent&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-rtorrent-配置&#34;&gt;3.3 rtorrent 配置&lt;/h3&gt;
&lt;p&gt;配置 rtorrent 是通过位于/home/username/.rtorrent.rc文件来完成。官方示例配置文件见 &lt;a href=&#34;http://libtorrent.rakshasa.no/browser/trunk/rtorrent/doc/rtorrent.rc#latest&#34;&gt;rtorrent.rc example&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;配置文件中文解释见下面链接，我不直接贴代码了，以免浪费文章篇幅。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/1325923&#34;&gt;https://gist.github.com/1325923&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注：配置文件里面所指定的目录要保证存在，否则启动rtorrent出错，可通过下面命令创建。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/rtorrent/&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;download, .session, .watch&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四rutorrent-安装配置&#34;&gt;四、ruTorrent 安装配置&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://code.google.com/p/rutorrent/&#34;&gt;ruTorrent &lt;/a&gt; 是用来可视化管理 rtorrent的，它本身非常简洁，但可通过插件实现非常强大的功能。&lt;/p&gt;
&lt;h3 id=&#34;41-rtorrent-xmlrpc-c-配置&#34;&gt;4.1 rtorrent xmlrpc-c 配置&lt;/h3&gt;
&lt;p&gt;安装配置ruTorrent需保证，支持php和xmlrpc-c的Web环境已经配置好，否则出错。web套件可以是 lighttpd、apache、nginx。&lt;/p&gt;
&lt;p&gt;xmlrpc-c 配置可参见官方文档 &lt;a href=&#34;http://libtorrent.rakshasa.no/wiki/RTorrentXMLRPCGuide&#34;&gt;《Using XMLRPC with rtorrent&lt;/a&gt; 本文以Nginx为例来说明。&lt;/p&gt;
&lt;p&gt;方法一：（官方不推荐）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;~/.rtorrent.rc&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;scgi_port = localhost:5000
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：（官方推荐）&lt;/p&gt;
&lt;p&gt;注意：下面三行代码一行都不能少，先后顺序不能变，否则出现 &amp;ldquo;Could not prepare socket for listening: Address already in use&amp;rdquo; 错误！&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;~/.rtorrent.rc&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;-EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;execute_nothrow=rm,/tmp/rpc.socket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;scgi_local = /tmp/rpc.socket
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;schedule = chmod,0,0,&amp;#34;execute=chmod,777,/tmp/rpc.socket&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42-nginx-xmlrpc-配置&#34;&gt;4.2 Nginx xmlrpc 配置&lt;/h3&gt;
&lt;p&gt;修改nginx站点配置文件，在server字段加入下面内容。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location /RPC2 &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    include scgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#scgi_pass 127.0.0.1:5000;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    scgi_pass unix:///tmp/rpc.socket&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-rutorrent-安装配置&#34;&gt;4.3 ruTorrent 安装配置&lt;/h3&gt;
&lt;p&gt;ruTorrent 详细配置可查看官方文档 &lt;a href=&#34;http://code.google.com/p/rutorrent/wiki/Config&#34;&gt;ruTorrent  Configuration&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://rutorrent.googlecode.com/files/rutorrent-3.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf rutorrent-3.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv rutorrent  /var/www
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R www-data:www-data  /var/www/rutorrent/share/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/\/\/ $scgi/$scgi/g&amp;#39;&lt;/span&gt; /var/www/rutorrent/conf/config.php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/$scgi_port = 5000/\/\/ $scgi_port = 5000/g&amp;#39;&lt;/span&gt; /var/www/rutorrent/conf/config.php
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/$scgi_host = &amp;#34;127/\/\/ $scgi_host = &amp;#34;127/g&amp;#39;&lt;/span&gt; /var/www/rutorrent/conf/config.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-rutorrent-访问密码保护&#34;&gt;4.4 ruTorrent 访问密码保护&lt;/h3&gt;
&lt;p&gt;创建密码文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;htpasswd -b -c /var/www/rutorrent/.htpasswds username passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改nginx站点配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location /rtorrent &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    auth_basic &lt;span class=&#34;s2&#34;&gt;&amp;#34;ruTorrent login&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    auth_basic_user_file /var/www/rtorrent/.htpasswds&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五结束&#34;&gt;五、结束&lt;/h2&gt;
&lt;p&gt;安装完成后，通过 http://youdomain/rutorrent 访问，然后输入帐号和密码即可看到以下界面。嗯，欢呼吧！混PT的小水管们。。。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/rutorrent.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/rutorrent.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://libtorrent.rakshasa.no/wiki&#34;&gt;http://libtorrent.rakshasa.no/wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://wiki.archlinux.org/index.php/RTorrent&#34;&gt;https://wiki.archlinux.org/index.php/RTorrent&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://blog.45639.com/post-27.html&#34;&gt;http://blog.45639.com/post-27.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://snowwolf725.blogspot.com/2010/07/rtorrent-rutorrent-rutorrent.html&#34;&gt;http://snowwolf725.blogspot.com/2010/07/rtorrent-rutorrent-rutorrent.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>计算机存储单位辨析</title>
        <link>https://www.bg7pbp.com/p/computer-storage-units/</link>
        <pubDate>Thu, 20 Oct 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/computer-storage-units/</guid>
        <description>&lt;p&gt;一个人们普遍都知道的常识是，硬盘的1GB=1000MB，操作系统是1G=1024M，但是当你面对 b,B,K,kB,KB,M,MB,G,GB 这些大小写敏感，缩写使用混乱的符号时，你还能分清楚区别和用法吗？&lt;/p&gt;
&lt;p&gt;在计算机领域，二进制乘数词头被用作表示大的数字，采用2的乘幂而不是用10的乘幂。但在1999年1月IEC引入IEC标准词头以前，二进制乘数词头因为没有专用的符号标准，而采用了国际单位制的词头符号，这导致了新的二进制乘数词头符号（IEC标准词头）出现后，两者出现了严重的混用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;中文名称：比特、位英文全称：Binary digit
英文缩写：b (bit)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;中文名称：字节英文全称：Byte
英文缩写：B (Byte)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;中文意思：千字节英文全称：Kilo binary byte
英文缩写：K (kilobyte) 、KiB (Kibibyte)
相似单位：kB（注：k代表1000）
书写规范：1K(KiB) = 1024B(Byte)、1kB = 1000B（注：k是小写）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;注：K是国际单位制词头符号，KiB是新的IEC标准词头符号。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;中文意思：兆字节英文全称：Mega binary byte
英文缩写：M (Megabyte)、MiB (Mebibyte)
相似单位：MB
书写规范：1M = 1024K = 1024×1024B、1MB = 1000kB = 1000×1000B&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;中文意思：吉字节英文全称：Giga binary byte
英文缩写：G (Gigabyte) 、GiB (Gibibyte)
相似单位：GB
书写规范：1G = 1024M = 1024×1024K = 1024×1024×1024B、1MB = 1000kB = 1000×1000B&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;同理，太字节 TiB (Tebibyte) &amp;lt; 拍字节 PiB (pebibyte) &amp;lt; 艾字节 EiB (exbibyte) &amp;lt; 泽字节 ZiB (zebibyte) &amp;lt; 尧字节 YiB (yobibyte)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;规律总结：&lt;/strong&gt; 一个字母则按1024计算，如K M G T P E Z Y，两个字母是按1000计算，如kB MB MGB(XM) TB PB EB ZB YB。&lt;/p&gt;
&lt;p&gt;图一：二进制乘数词头采用国际单位制词头符号&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/s/si.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/s/si.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;图二：99年以后，采用了新的二进制乘数词头符号（IEC标准词头）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/i/iec.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/i/iec.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://zh.wikipedia.org/wiki/%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%89%8D%E7%BC%80&#34;&gt;二进制乘数词头&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Linux 进程自动监控shell脚本V2</title>
        <link>https://www.bg7pbp.com/p/linux-process-auto-monitor-v2/</link>
        <pubDate>Thu, 15 Sep 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-process-auto-monitor-v2/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;一、使用方法：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cshell%E8%84%9A%E6%9C%AC%E5%86%85%E5%AE%B9&#34;&gt;二、Shell脚本内容&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9&#34;&gt;三、注意事项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E6%9B%B4%E6%96%B0%E5%8E%86%E5%8F%B2&#34;&gt;四、更新历史：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;该脚本用于监控VPS服务器负载，Web程序内存及CPU使用。当服务器系统负载或内存使用达到预设值，则重启该程序，或者某个php-cgi进程占用CPU过大，则直接kill掉该进程。目的在于缓解服务器资源耗尽导致意外宕机等情况。&lt;/p&gt;
&lt;h2 id=&#34;一使用方法&#34;&gt;一、使用方法：&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://gist.github.com/1216837.git gist-1216837
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim gist-1216837/sys-mon.sh //修改内存、CPU等预设阀值
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /var/script
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv gist-1216837/sys-mon.sh /var/script&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置每分钟执行一次&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* * * * * /bin/bash  /var/shell/sys-mon.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二shell脚本内容&#34;&gt;二、Shell脚本内容&lt;/h2&gt;
&lt;p&gt;建议打开下面网址查看最新版本。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://gist.github.com/1216837&#34;&gt;https://gist.github.com/1216837&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;#! /bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#====================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sys-mon.sh&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Copyright (c) 2011, WangYan &amp;lt;webmaster@wangyan.org&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# All rights reserved.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Distributed under the GNU General Public License, version 3.0.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Monitor system mem and load, if too high, restart some service.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# See: http://www.wangyan.cloud/sys-mon-shell-script.html&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# V 0.5, Date: 2011-12-08&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#====================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Need to monitor the service name&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Must be in /etc/init.d folder exists&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NAME_LIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;httpd nginx mysql&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Single process to allow the maximum CPU (%)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PID_CPU_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;25&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The maximum allowed memory (%)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;95&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The maximum allowed system load&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SYS_LOAD_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;6&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Log path settings&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LOG_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/log/sys-mon.log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Date time format setting&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +&lt;span class=&#34;s2&#34;&gt;&amp;#34;%y-%m-%d %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Your email address&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;EMAIL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;webmaster@example.com&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Your website url&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;MY_URL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;http://106.187.38.210/p.php&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#====================================================================&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; NAME in &lt;span class=&#34;nv&#34;&gt;$NAME_LIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_CPU_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_LIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -v root&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;IFS_TMP&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$IFS&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;IFS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;$&amp;#39;\n&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; PID in &lt;span class=&#34;nv&#34;&gt;$PID_LIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_NUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PID&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $2}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_CPU&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PID&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $3}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_MEM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PID&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $4}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#       echo &amp;#34;$NAME: PID_NUM($PID_NUM) PID_CPU($PID_CPU) PID_MEM($PID_MEM)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_CPU_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; + &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; + &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;gt;= &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU_MAX&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;php-fpm&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;httpd&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                sleep &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; &amp;gt;= &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU_MAX&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; -eq &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: kill &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_NUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;) successful (CPU:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                    &lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PID_NUM&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [WARNING!] &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;NAME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_NUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;) cpu usage is too high! (CPU:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;IFS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$IFS_TMP&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;SYS_LOAD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uptime &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $(NF-2)}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/,//&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;SYS_MON&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;CPU:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_CPU_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; MEM:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; LOAD:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#   echo -e &amp;#34;$NAME: $SYS_MON\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;SYS_LOAD_TOO_HIGH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN{print(&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD_MAX&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM_TOO_HIGH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN{print(&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM_MAX&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD_TOO_HIGH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM_TOO_HIGH&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        /etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sleep &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;i&amp;lt;4&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;i++&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pgrep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DATA_TIME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: Stop &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; successful! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [WARNING!] Stop &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; failed[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;]! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                pkill &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; killall &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        /etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sleep &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;((&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;ii&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;ii&amp;lt;4&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;ii++&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pgrep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$DATA_TIME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: Start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; successful!&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [WARNING!] Start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; failed[&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$ii&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;]! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                /etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                sleep &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;pgrep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [ERROR!] Start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; failed! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mail -s &lt;span class=&#34;s2&#34;&gt;&amp;#34;Start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; failed&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$EMAIL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;STATUS_CODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;curl -o /dev/null -s -w %&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;http_code&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$MY_URL&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#echo -e &amp;#34;STATUS CODE: $STATUS_CODE\n&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATUS_CODE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    sleep &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;STATUS_CODE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;curl -o /dev/null -s -w %&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;http_code&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$MY_URL&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$STATUS_CODE&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; !&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;200&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [WARNING!] Website Downtime! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; tee -a &lt;span class=&#34;nv&#34;&gt;$LOG_PATH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;${&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;DATA_TIME&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;: [WARNING!] Website Downtime! (&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_MON&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; mail -s &lt;span class=&#34;s2&#34;&gt;&amp;#34;Start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; failed&amp;#34;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$EMAIL&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;脚本内容不难理解，原理解释可参考 &lt;a href=&#34;http://www.wangyan.cloud/shell-vps-sys-mon-v1/&#34;&gt;Linux 进程自动监控shell脚本&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三注意事项&#34;&gt;三、注意事项&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;NAME_LIST 指定的监控程序必须在/etc/init.d 文件夹中存在，并且支持stop和start操作&lt;/li&gt;
&lt;li&gt;PID_CPU_MAX 指的是单个进程的CPU占用，只针对php-fpm或httpd。&lt;/li&gt;
&lt;li&gt;PID_MEM_SUM_MAX 指的是该程序所有进程实际内存占用，而并非系统总内存。&lt;/li&gt;
&lt;li&gt;EMAIL 只有在程序启动失败后，你才能收到邮件提醒。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;四更新历史&#34;&gt;四、更新历史：&lt;/h2&gt;
&lt;p&gt;2011.11.28： 去掉nginx502状态监控，完善进程cpu监控，修正数据不准确等问题。
2011.12.07： 继续修正cpu监控不正确问题，增加宕机后邮件通知功能。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>CentOS 创建本地YUM软件库</title>
        <link>https://www.bg7pbp.com/p/centos-sync-local-yum-mirror/</link>
        <pubDate>Mon, 12 Sep 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/centos-sync-local-yum-mirror/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80rsync-%E5%90%8C%E6%AD%A5%E8%84%9A%E6%9C%AC&#34;&gt;一、Rsync 同步脚本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%A6%81%E7%94%A8%E5%8E%9F%E6%9C%89%E7%9A%84%E6%BA%90&#34;&gt;二、禁用原有的源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%88%9B%E5%BB%BA%E6%9C%AC%E5%9C%B0repo%E6%96%87%E4%BB%B6&#34;&gt;三、创建本地.repo文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;首先从CentOS官方源 ( &lt;a href=&#34;http://msync.centos.org/&#34;&gt;http://msync.centos.org/&lt;/a&gt; )，同步一份本地镜像（约7G左右），然后禁用原有的源，并创建一个本地的.repo仓库文件。&lt;/p&gt;
&lt;h2 id=&#34;一rsync-同步脚本&#34;&gt;一、Rsync 同步脚本&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/shell/rsync_repo.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim rsync_repo.sh //修改&lt;span class=&#34;s2&#34;&gt;&amp;#34;local&amp;#34;&lt;/span&gt;值（本地镜像存放路径）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; rsync_repo.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./rsync_repo.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二禁用原有的源&#34;&gt;二、禁用原有的源&lt;/h2&gt;
&lt;p&gt;注：你也可以直接编辑.repos文件，加上参数&amp;quot;enabled=0&amp;quot;禁用源。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; i in &lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;ls /etc/yum.repos.d/&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt; mv /etc/yum.repos.d/&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt; /etc/yum.repos.d/&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;.bak&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;禁用fastestmirror插件，再也不需要这东西了。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sed -i &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/plugins=1/plugins=0/g&amp;#39;&lt;/span&gt;  /etc/yum.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三创建本地repo文件&#34;&gt;三、创建本地.repo文件&lt;/h2&gt;
&lt;p&gt;注意记得修改默认的&amp;quot;/mnt/hgfs/e/CentOS&amp;quot;本地镜像路径&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/conf/CentOS-Local.repo -P /etc/yum.repos.d
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /etc/yum.repos.d/rsync_repo.sh
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.centos.org/modules/tinycontent/index.php?id=22&#34;&gt;CentOS Mirroring HowTo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;%22http://daloradius.com/&#34;&gt;对话 UNIX: rsync 的高级应用&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>Nginx反向代理feedburner</title>
        <link>https://www.bg7pbp.com/p/nginx-reverse-proxy-feedburner/</link>
        <pubDate>Wed, 31 Aug 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-reverse-proxy-feedburner/</guid>
        <description>&lt;p&gt;如今，RSS托管服务，除了feedburner已经没有选择了。想想就几年前，feedsky因广告问题，好不热闹。当Blog已死的言论出现时，我还在笑他们无知，如今再看看，国外社交网络混战，国内恶心的微博营销铺天盖地，想想还是很感概的。。。&lt;/p&gt;
&lt;p&gt;目前 &lt;a href=&#34;http://feeds2.feedburner.com&#34;&gt;feeds2.feedburner.com&lt;/a&gt; 在国内是可以间歇访问的。建议试试下面方法，一劳永逸解决这问题。&lt;/p&gt;
&lt;h2 id=&#34;方法一&#34;&gt;方法一：&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Feed 地址：&lt;/strong&gt; &lt;a href=&#34;http://feed.wangyan.org&#34;&gt;http://feed.wangyan.org&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在nginx配置文件适当位置加入：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen 80&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    server_name  feed.wangyan.org&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host feeds.feedburner.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header X-Real-IP &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header X-Forwarded-For &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass http://feeds.feedburner.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        rewrite ^&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ /wang_yan&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;方法二&#34;&gt;方法二：&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Feed 地址：&lt;/strong&gt; &lt;a href=&#34;http://feed.wangyan.org&#34;&gt;http://wangyan.org/feed&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;在nginx配置文件适当位置加入：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location /feed &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header Host feeds.feedburner.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header X-Real-IP &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_set_header X-Forwarded-For &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        proxy_pass http://feeds.feedburner.com&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	rewrite ^ /wang_yan break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;注意事项&#34;&gt;注意事项：&lt;/h3&gt;
&lt;p&gt;1、proxy_set_header Host的值不是&amp;rsquo;$host&amp;rsquo;&lt;br&gt;
2、将rewrite中的wang_yan换成你的feed用户名&lt;br&gt;
3、将feedburner中的&amp;quot;Item link clicks&amp;quot;功能关闭&lt;/p&gt;</description>
        </item>
        <item>
        <title>MySQL 基础篇</title>
        <link>https://www.bg7pbp.com/p/mysql-basics/</link>
        <pubDate>Fri, 12 Aug 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mysql-basics/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%95%B0%E6%8D%AE%E5%BA%93%E5%9F%BA%E7%A1%80&#34;&gt;一、数据库基础&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E6%95%B0%E6%8D%AE%E5%BA%93%E6%A6%82%E5%BF%B5&#34;&gt;1.1、数据库概念&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E6%95%B0%E6%8D%AE%E5%BA%93%E8%A1%A8%E9%97%B4%E5%85%B3%E7%B3%BB&#34;&gt;1.2、数据库表间关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E7%99%BB%E5%BD%95%E8%BF%9E%E6%8E%A5%E5%88%B0-mysql&#34;&gt;1.3、登录连接到 MySQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cmysql-%E7%94%A8%E6%88%B7%E4%B8%8E%E6%9D%83%E9%99%90&#34;&gt;二、MySQL 用户与权限&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21mysql-%E6%9D%83%E9%99%90%E4%BB%8B%E7%BB%8D&#34;&gt;2.1、MySQL 权限介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E5%88%9B%E5%BB%BAmysql%E7%94%A8%E6%88%B7grant%E5%91%BD%E4%BB%A4&#34;&gt;2.2、创建MySQL用户（GRANT命令）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E6%92%A4%E9%94%80%E6%9D%83%E9%99%90revoke%E5%91%BD%E4%BB%A4&#34;&gt;2.3、撤销权限REVOKE命令&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89mysql-%E6%95%B0%E6%8D%AE%E5%BA%93%E5%92%8C%E8%A1%A8&#34;&gt;三、MySQL 数据库和表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Binsert-%E6%8F%92%E5%85%A5%E6%95%B0%E6%8D%AE&#34;&gt;四、INSERT 插入数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94select-%E6%9F%A5%E8%AF%A2%E8%AF%AD%E5%8F%A5&#34;&gt;五、SELECT 查询语句&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E5%8D%95%E8%A1%A8%E6%9F%A5%E8%AF%A2&#34;&gt;5.1 单表查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52-%E6%BB%A1%E8%B6%B3%E7%89%B9%E5%AE%9A%E6%9D%A1%E4%BB%B6%E6%9F%A5%E8%AF%A2&#34;&gt;5.2 满足特定条件查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53-%E5%8F%8C%E8%A1%A8%E5%85%B3%E8%81%94%E6%9F%A5%E8%AF%A2&#34;&gt;5.3 双表关联查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#54-%E5%A4%9A%E8%A1%A8%E5%85%B3%E8%81%94%E6%9F%A5%E8%AF%A2&#34;&gt;5.4 多表关联查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#55-%E5%B7%A6%E5%85%B3%E8%81%94%E6%9F%A5%E8%AF%A2%E6%9F%A5%E6%89%BE%E4%B8%8D%E5%8C%B9%E9%85%8D%E8%A1%8C&#34;&gt;5.5 左关联查询（查找不匹配行）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#56-%E4%BD%BF%E7%94%A8%E8%A1%A8%E7%9A%84%E5%88%AB%E5%90%8D-aliases&#34;&gt;5.6 使用表的别名 aliases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#57-%E5%88%97%E6%8E%92%E5%BA%8F-order-by&#34;&gt;5.7 列排序 order by&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#58-%E5%88%86%E7%BB%84%E4%B8%8E%E5%90%88%E8%AE%A1&#34;&gt;5.8 分组与合计&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#59-%E9%80%89%E6%8B%A9%E8%A6%81%E8%BF%94%E5%9B%9E%E7%9A%84%E8%A1%8C&#34;&gt;5.9 选择要返回的行&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E4%BD%BF%E7%94%A8%E5%AD%90%E6%9F%A5%E8%AF%A2&#34;&gt;六、使用子查询&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#61-%E5%9F%BA%E6%9C%AC%E5%AD%90%E6%9F%A5%E8%AF%A2&#34;&gt;6.1 基本子查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#62-%E5%AD%90%E6%9F%A5%E8%AF%A2%E6%93%8D%E4%BD%9C%E7%AC%A6&#34;&gt;6.2 子查询操作符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#63-%E5%85%B3%E8%81%94%E5%AD%90%E6%9F%A5%E8%AF%A2&#34;&gt;6.3 关联子查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#64-%E8%A1%8C%E5%AD%90%E6%9F%A5%E8%AF%A2&#34;&gt;6.4 行子查询&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#65-%E4%BD%BF%E7%94%A8%E5%AD%90%E6%9F%A5%E8%AF%A2%E4%BD%9C%E4%B8%BA%E4%B8%B4%E6%97%B6%E8%A1%A8&#34;&gt;6.5 使用子查询作为临时表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83%E6%9B%B4%E6%96%B0%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%B0%E5%BD%95&#34;&gt;七、更新数据库记录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E4%BF%AE%E6%94%B9%E8%A1%A8%E7%BB%93%E6%9E%84&#34;&gt;八、修改表结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B9%9D%E5%88%A0%E9%99%A4%E6%95%B0%E6%8D%AE%E5%BA%93%E8%AE%B0%E5%BD%95&#34;&gt;九、删除数据库记录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 《PHP和MySQL Web开发》 第8、9、10章阅读笔记，主要介绍 MySQL 入门基础知识！&lt;/p&gt;
&lt;h2 id=&#34;一数据库基础&#34;&gt;一、数据库基础&lt;/h2&gt;
&lt;h3 id=&#34;11数据库概念&#34;&gt;1.1、数据库概念&lt;/h3&gt;
&lt;p&gt;表：关系数据库由关系组成，关系通常称为表。列：表中的每一列都有一个名称和数据类型，列也叫“域”或“属性”。行：关系类型每一行具有相同的属性，行也称“记录”。健：表中标志列称为健或主键，可用来做表格间的引用。外键：主键出现在另一个表时，该主键称为外键。&lt;/p&gt;
&lt;h3 id=&#34;12数据库表间关系&#34;&gt;1.2、数据库表间关系&lt;/h3&gt;
&lt;p&gt;一对一：主键-主键一对多：主键&amp;ndash;外键多对多：主键1&amp;ndash;外键1外键2&amp;ndash;主键2&lt;/p&gt;
&lt;h3 id=&#34;13登录连接到-mysql&#34;&gt;1.3、登录连接到 MySQL&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;语法：mysql -h主机地址 -u用户名 －p用户密码
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：mysql -h127.0.0.1 -uroot -p123456&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;-h主机地址，可以有空格，若省略则使用localhost。&lt;/li&gt;
&lt;li&gt;-u用户名，可以有空格，若省略则使用登录操作系统的用户名。&lt;/li&gt;
&lt;li&gt;-p用户密码，必须相连不能有空格。&lt;/li&gt;
&lt;li&gt;MySQL 每个命令用分好隔开。&lt;/li&gt;
&lt;li&gt;SQL 语句不区分大小写，数据库和表名称则区分大小写。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二mysql-用户与权限&#34;&gt;二、MySQL 用户与权限&lt;/h2&gt;
&lt;h3 id=&#34;21mysql-权限介绍&#34;&gt;2.1、MySQL 权限介绍&lt;/h3&gt;
&lt;p&gt;MySQL 权限分四个级别，分别是全局、数据库、表、列。每个级别都有三种类型权限：1、用户权限，2、管理员权限，3、特殊权限。&lt;/p&gt;
&lt;p&gt;用户权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;select（查询）&lt;/li&gt;
&lt;li&gt;insert（插入）&lt;/li&gt;
&lt;li&gt;update（修改）&lt;/li&gt;
&lt;li&gt;delete（删除表）&lt;/li&gt;
&lt;li&gt;index（索引）&lt;/li&gt;
&lt;li&gt;alter（变更表结构）&lt;/li&gt;
&lt;li&gt;create（创建数据库）&lt;/li&gt;
&lt;li&gt;drop（删除库或表）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;管理员权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;create temporary tables&lt;/li&gt;
&lt;li&gt;file&lt;/li&gt;
&lt;li&gt;lock tables&lt;/li&gt;
&lt;li&gt;process&lt;/li&gt;
&lt;li&gt;reload&lt;/li&gt;
&lt;li&gt;replication client&lt;/li&gt;
&lt;li&gt;replication slave&lt;/li&gt;
&lt;li&gt;show databases&lt;/li&gt;
&lt;li&gt;shutdown&lt;/li&gt;
&lt;li&gt;super&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;特殊权限：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;all（用户+管理权限）&lt;/li&gt;
&lt;li&gt;usage（不授予权限）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22创建mysql用户grant命令&#34;&gt;2.2、创建MySQL用户（GRANT命令）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;grant&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;权限&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;数据库&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;to&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;用户名&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;主机&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;identified&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;require&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ssl_option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;grant&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;|&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;limit_options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;code&gt;*&lt;/code&gt;  指选中的数据库和所有表。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dbname.*&lt;/code&gt;  指选定数据库中的所有表。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;%&amp;quot;&lt;/code&gt;  是默认值，指所有主机。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;with grant option&lt;/code&gt;  表示允许用户向被人授予自己拥有的权限。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;limit_options 可用选项有：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;max_queries_per_hour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;max_updates_per_hour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;max_connections_per_hour&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;n&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23撤销权限revoke命令&#34;&gt;2.3、撤销权限REVOKE命令&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;revoke&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;权限&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;grant&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;option&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;数据库&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;用户名&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;主机&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：撤销grant option权限，可不指定数据库和表名。&lt;/p&gt;
&lt;h2 id=&#34;三mysql-数据库和表&#34;&gt;三、MySQL 数据库和表&lt;/h2&gt;
&lt;p&gt;创建数据库：create database 数据库名;
使用数据库：use 数据库名;
删除数据库：drop database 数据库名称;
创建数据库表：create table 数据表名称 (列名称);
删除数据库表：drop table 表名称；&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;create&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customersid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;int&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;unsigned&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auto_increment&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;primary&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;key&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;Amount&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;整形：1) smallint、2) int、3)bigint
浮点型：1) float(长度,小数位数)、2) double(长度,小数位数)
时间日期：1) date (YYYY-MM-DD)、2) time (HH:MM:SS)、3) datetime (YYYY-MM-DD HH:MM:SS)、3) year[(2|4)] (11或2011)
字符串：常用的有char（固定字符数）和text(长文本）&lt;/p&gt;
&lt;p&gt;&lt;code&gt;unsigned：&lt;/code&gt; 表示只能为0或正数&lt;code&gt;not null：&lt;/code&gt; 表示必须有一个值，但可以为空(null)&lt;code&gt;auto_increment&lt;/code&gt; 表示自动插入一个唯一标识值&lt;code&gt;primary key：&lt;/code&gt; 主键&lt;/p&gt;
&lt;h2 id=&#34;四insert-插入数据&#34;&gt;四、INSERT 插入数据&lt;/h2&gt;
&lt;p&gt;方法一&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;insert&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;insert&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[(&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)]&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;values&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;（插入多行记录）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;insert&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值1&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;值3&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：数字和日期不需要引号&lt;/p&gt;
&lt;h2 id=&#34;五select-查询语句&#34;&gt;五、SELECT 查询语句&lt;/h2&gt;
&lt;h3 id=&#34;51-单表查询&#34;&gt;5.1 单表查询&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;　&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：* 指所有列&lt;/p&gt;
&lt;h3 id=&#34;52-满足特定条件查询&#34;&gt;5.2 满足特定条件查询&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;比较运算符：=,&amp;gt;,&amp;lt;,&amp;gt;=,&amp;lt;=,!=,is not null,is null,between,in,not in,like,not like,regexp&lt;/p&gt;
&lt;p&gt;like是模式匹配，由文本加表示任意数量字符的&amp;quot;%&amp;ldquo;和表示单个字符的&amp;rdquo;_&amp;ldquo;组成。如：name like (&amp;ldquo;fred %&amp;rdquo;)&lt;/p&gt;
&lt;h3 id=&#34;53-双表关联查询&#34;&gt;5.3 双表关联查询&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;date&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ISBN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;price&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quantily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例：查询某个顾客所有订单&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;SELECT&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;FROM&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Julie Smith&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;AND&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意：切记不要遗漏最后一行，否则虽查询到该用户的所有记录（例如有4条记录），但这些记录对应的订单记录可能不是该用户的，因为MySQL只是按顺序列出前4条查询结果。&lt;/p&gt;
&lt;p&gt;表名称间逗号表示完全关联，它将所有表所有记录完全列出，故双表查询一定要指定关联条件。&lt;/p&gt;
&lt;p&gt;关联条件可以是等价关联，如客户表中的客户ID=订单表的客户ID。&lt;/p&gt;
&lt;h3 id=&#34;54-多表关联查询&#34;&gt;5.4 多表关联查询&lt;/h3&gt;
&lt;p&gt;实例：哪些顾客订购了关于Java的书&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;至少有一个订单的客户（结果可能有多个客户）&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;订单所包含的项目（每个客户每张订单可能有多个项目）&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;项目的详细信息&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;包含&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;java&amp;#39;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;一词的书&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;LIKE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;%java%&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：关联条件的总数量要比关联的表少一个。&lt;/p&gt;
&lt;h3 id=&#34;55-左关联查询查找不匹配行&#34;&gt;5.5 左关联查询（查找不匹配行）&lt;/h3&gt;
&lt;p&gt;实例：查询没有任何订单的客户。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;该行可以用&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;using (customerid)&amp;#34;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;代替。&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;使用&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;using语句&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，两个表中的列名称必须相同。&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;on&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;is&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;左关联：检索左表（客户表）中的每条记录，是否在右表（订单表）有匹配记录（按关联条件指定的匹配规则），如果没有则增加一行，该行右边的列为NULL&lt;/p&gt;
&lt;h3 id=&#34;56-使用表的别名-aliases&#34;&gt;5.6 使用表的别名 aliases&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;o&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：当要关联一个表到表本身的时候就必须使用表的别名&lt;/p&gt;
&lt;p&gt;实例：查找同城顾客&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;and&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;!=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;57-列排序-order-by&#34;&gt;5.7 列排序 order by&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注：默认是升序（asc)，也可以使用降序（desc）&lt;/p&gt;
&lt;h3 id=&#34;58-分组与合计&#34;&gt;5.8 分组与合计&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;常用合计函数&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;avg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;avg(列)：求平均值
sun(列)：求和
count(列)：非空值的行数
count(distinct 列)：本列中不同值的行数
count(*)：包含空值在内的行数&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;分组 group by&lt;/strong&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;avg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;group&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;having&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;avg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;给出每个顾客的平均值，而不是全部顾客平均值。
having类似于where,但having只适用于合计与分组。&lt;/p&gt;
&lt;h3 id=&#34;59-选择要返回的行&#34;&gt;5.9 选择要返回的行&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;limit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;limit 带两个参数,起始行号和返回行数。行号是已0开始索引的&lt;/p&gt;
&lt;h2 id=&#34;六使用子查询&#34;&gt;六、使用子查询&lt;/h2&gt;
&lt;h3 id=&#34;61-基本子查询&#34;&gt;6.1 基本子查询&lt;/h3&gt;
&lt;p&gt;实例：查找金额最大的订单&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;max&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;过程:先查最大金额是多少,然后查该金额的订单信息。&lt;/p&gt;
&lt;p&gt;&amp;ldquo;=&amp;ldquo;是比较操作符，&amp;quot;=&amp;ldquo;右边可以插入子查询操作符。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;desc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;limit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;62-子查询操作符&#34;&gt;6.2 子查询操作符&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;ANY (SOME)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查询t1表c1列，但该列必须大于t2表c1列中任意一个值。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;any&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;IN (=any)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查询t1表c1列，但该列必须等于t2表c1列中任意一个值。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;All&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;查询t1表c1列，但该列必须大于t2表c1列中所有值。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;all&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;63-关联子查询&#34;&gt;6.3 关联子查询&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ISBN&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;price&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orderid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;quantily&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;title&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;exists&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;order_items&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;isbn&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;首先查询books表中的isbn和title（所有书）&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;p&gt;exists 是子查询炒作符，只能用在关联子查询中。&lt;/p&gt;
&lt;h3 id=&#34;64-行子查询&#34;&gt;6.4 行子查询&lt;/h3&gt;
&lt;p&gt;实例：在一个表中查找存在于另一个表的行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;in&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c3&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;65-使用子查询作为临时表&#34;&gt;6.5 使用子查询作为临时表&lt;/h3&gt;
&lt;p&gt;将子查询放在FROM子句中，必须为子查询的结果定义一个别名。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;select&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;city&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Box Hill&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;as&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;box_hill_customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;七更新数据库记录&#34;&gt;七、更新数据库记录&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表名&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表达式&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;列&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表达式&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,...&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;条件&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;条件&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;limit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例:修改所有行记录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;books&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;price&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;*&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例2:修改某一行记录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;update&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;address&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;xxx&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;八修改表结构&#34;&gt;八、修改表结构&lt;/h2&gt;
&lt;p&gt;实例1：修改列数据类型&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;modify&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;char&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;70&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;not&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;null&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例2：增加一列&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;add&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tax&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;amount&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例3：删除一列&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;alter&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;orders&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;drop&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tax&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;九删除数据库记录&#34;&gt;九、删除数据库记录&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;表名&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;条件&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;order&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;by&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;err&#34;&gt;条件&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;limit&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例1：删除所有行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;实例2：删除某一行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;delete&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;from&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customers&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;where&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;customerid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Linux 进程自动监控shell脚本V1</title>
        <link>https://www.bg7pbp.com/p/linux-process-auto-monitor-v1/</link>
        <pubDate>Fri, 05 Aug 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-process-auto-monitor-v1/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;一、使用方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%8E%9F%E7%90%86%E8%A7%A3%E9%87%8A&#34;&gt;二、原理解释&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;主要用于监控 linux 服务器负载及内存占用，当负载或内存占用达到设置值后，便自动重启该进程以避免宕机。&lt;/p&gt;
&lt;h2 id=&#34;一使用方法&#34;&gt;一、使用方法&lt;/h2&gt;
&lt;p&gt;下载、解压、运行&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.wangyan.cloud/download/script/pid_auto_reboot.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf pid_auto_reboot.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./pid_auto_reboot.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置每分钟执行一次&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* * * * * /bin/bash  /var/shell/pid_auto_reboot.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二原理解释&#34;&gt;二、原理解释&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置最大内存占用百分比&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;PID_MEM_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;85&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置最大系统负载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;SYS_LOAD_MAX&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;3&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 设置需要监控的服务名称&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;NAME_LIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;php-fpm mysql&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; NAME in &lt;span class=&#34;nv&#34;&gt;$NAME_LIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 初始化内存统计&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 获取该程序总进程数&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_NUM_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; wc -l&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 列出每个进程内存占用百分比&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;PID_MEM_LIST&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;ps aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $4}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 计算所有进程总内存占用&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; PID_MEM in &lt;span class=&#34;nv&#34;&gt;$PID_MEM_LIST&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nv&#34;&gt;PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt; + &lt;span class=&#34;nv&#34;&gt;$PID_MEM&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; bc&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 获取最近一分钟系统负载&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;SYS_LOAD&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;uptime &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;{print $(NF-2)}&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sed &lt;span class=&#34;s1&#34;&gt;&amp;#39;s/,//&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 比较内存占用和系统负载是否超过阀值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;MEM_VULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN{print(&amp;#39;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;=&amp;#39;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_MAX&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;?&amp;#34;1&amp;#34;:&amp;#34;0&amp;#34;)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nv&#34;&gt;LOAD_VULE&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;awk &lt;span class=&#34;s1&#34;&gt;&amp;#39;BEGIN{print(&amp;#39;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;gt;=&amp;#39;&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD_MAX&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;?&amp;#34;1&amp;#34;:&amp;#34;0&amp;#34;)}&amp;#39;&lt;/span&gt;&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# 如果系统内存占用和系统负载超过阀值，则进行下面操作。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$MEM_VULE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$LOAD_VULE&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;#  写入日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +&lt;span class=&#34;s2&#34;&gt;&amp;#34;%y-%m-%d %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;killall &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;(MEM:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;,LOAD:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt;&amp;gt;&amp;gt; /var/log/autoreboot.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 正常停止服务&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        /etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        sleep &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;c1&#34;&gt;# 强制关闭&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        pkill &lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;c1&#34;&gt;#  重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        /etc/init.d/&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt; start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;       &lt;span class=&#34;c1&#34;&gt;#写入日志&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;$(&lt;/span&gt;date +&lt;span class=&#34;s2&#34;&gt;&amp;#34;%y-%m-%d %H:%M:%S&amp;#34;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;start &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;(MEM:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;,LOAD:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /var/log/autoreboot.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$NAME&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt; very health!(MEM:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$PID_MEM_SUM&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;,LOAD:&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$SYS_LOAD&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;)&amp;#34;&lt;/span&gt; &amp;gt; /dev/null
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;done&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;补充：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;即便在[[]]结构中，同样不能直接比较浮点数大小，例如：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[[&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;2.0&amp;#34;&lt;/span&gt; &amp;gt;  &lt;span class=&#34;s2&#34;&gt;&amp;#34;10&amp;#34;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;then&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#结果输出yes显然错了。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;yes&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;fi&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://www.hostloc.com/thread-38721-1-1.html&#34;&gt;http://www.hostloc.com/thread-38721-1-1.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>AWStats 国家地区扩展 GeoIP 安装配置</title>
        <link>https://www.bg7pbp.com/p/awstats-geoip-configuration/</link>
        <pubDate>Fri, 15 Jul 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/awstats-geoip-configuration/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%A7%A3%E5%8E%8B&#34;&gt;一、下载与解压&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-geoip-%E7%A8%8B%E5%BA%8F&#34;&gt;二、安装 GeoIP 程序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%9B%B4%E6%96%B0awstats%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;三、更新awstats配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;AWStats 安装后默认是不支持国家或地区的，来源全部显示为“未知”。只有安装在GeoIP后AWStats才能根据IP判断来源。&lt;/p&gt;
&lt;h2 id=&#34;一下载与解压&#34;&gt;一、下载与解压&lt;/h2&gt;
&lt;p&gt;其中 GeoIP 是国家数据，GeoLiteCity 是城市数据，GeoIPASNum 是组织数据&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /var/GeoIP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv GeoIP.dat.gz /var/GeoIP/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gunzip /var/GeoIP/GeoIP.dat.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv GeoLiteCity.dat.gz /var/GeoIP/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gunzip /var/GeoIP/GeoLiteCity.dat.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv GeoIPASNum.dat.gz /var/GeoIP/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gunzip /var/GeoIP/GeoIPASNum.dat.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装-geoip-程序&#34;&gt;二、安装 GeoIP 程序&lt;/h2&gt;
&lt;p&gt;先安装 GeoIP C API 然后再安装 GeoIP Perl 模块。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install libtool
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://geolite.maxmind.com/download/geoip/api/c/GeoIP-1.4.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf GeoIP-1.4.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; GeoIP-1.4.8/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://geolite.maxmind.com/download/geoip/api/perl/Geo-IP-1.39.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf Geo-IP-1.39.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Geo-IP-1.39
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;perl Makefile.PL &lt;span class=&#34;nv&#34;&gt;LIBS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-L/usr/local/lib&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三更新awstats配置文件&#34;&gt;三、更新awstats配置文件&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/awstats/awstats.xx.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#1422 行左右添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LoadPlugin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;geoip GEOIP_STANDARD /var/GeoIP/GeoIP.dat&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#1432 行左右添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LoadPlugin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;geoip_city_maxmind GEOIP_STANDARD /var/GeoIP/GeoLiteCity.dat&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#1469 行左右添加：&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LoadPlugin&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;geoip_org_maxmind GEOIP_STANDARD /var/GeoIP/GeoIPASNum.dat&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后更新统计数据：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /var/lib/awstats/*  &lt;span class=&#34;c1&#34;&gt;#删除旧的统计数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/awstats/tools/awstats_updateall.pl now&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://antezeta.com/awstats/geoip.html&#34;&gt;http://antezeta.com/awstats/geoip.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.andowson.com/posts/list/28.page&#34;&gt;http://www.andowson.com/posts/list/28.page&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
        </item>
        <item>
        <title>JAWStats 多个站点配置</title>
        <link>https://www.bg7pbp.com/p/jawstats-multi-site-config/</link>
        <pubDate>Thu, 14 Jul 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/jawstats-multi-site-config/</guid>
        <description>&lt;p&gt;在前文 &lt;a href=&#34;http://www.wangyan.cloud/vps-nginx-awstats-jawstats/&#34;&gt;Nginx 日志分析 AWStats + JAWStats 安装配置&lt;/a&gt; 中说过 JAWStats 是支持多个站点的，但若直接添加则存在一个很大的缺陷，只要能看到自己网站统计报告的，那么别人的统计报告也能查看。那有没办法实现，每个网站的统计都相互独立，只能各自查看呢？&lt;/p&gt;
&lt;p&gt;答案显然是肯定的，方法也有两种，一是给JAWStats 打个补丁，详细方法见：&lt;a href=&#34;http://compuccino.com/labs/blog/2010/09/03/howto-awstats-und-jawstats-multi-user-konfiguration-inkl-patch&#34;&gt;《How To: AWStats und JAWStats mit mehreren Benutzern – Konfiguration inkl. Patch und Skript》&lt;/a&gt;，二是稍微修改一下 &lt;code&gt;config.php&lt;/code&gt;  文件即可。毫无疑问，我选择了第二种不破坏原程序的做法。&lt;/p&gt;
&lt;p&gt;下面是完整设置，关键在于 &lt;code&gt;siteurl&lt;/code&gt; 和 &lt;code&gt;sitename&lt;/code&gt; 的设置，其中  &lt;code&gt;$_SERVER[&amp;quot;SERVER_NAME&amp;quot;]&lt;/code&gt;  作用在于能够获得当前网站域名。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// core config parameters
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sDefaultLanguage&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sConfigDefaultView&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;thismonth.all&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$bConfigChangeSites&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$bConfigUpdateSites&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sUpdateSiteFilename&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xml_update.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// individual site configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$aConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_SERVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;SERVER_NAME&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;statspath&amp;#34;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/lib/awstats/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;updatepath&amp;#34;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/awstats/wwwroot/cgi-bin/awstats.pl/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;siteurl&amp;#34;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$_SERVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;SERVER_NAME&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;sitename&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$_SERVER&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;SERVER_NAME&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;theme&amp;#34;&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;fadespeed&amp;#34;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;includes&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;language&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;完成后，你还需要在 Nginx 的每个server字段中添加下面内容：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;stats&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;www&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;location&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;~&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;fastcgi_pass&lt;/span&gt;  &lt;span class=&#34;mf&#34;&gt;127.0&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;fastcgi_index&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;index&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;nx&#34;&gt;fastcgi_param&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;SCRIPT_FILENAME&lt;/span&gt;  &lt;span class=&#34;nv&#34;&gt;$document_root&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            &lt;span class=&#34;k&#34;&gt;include&lt;/span&gt;  &lt;span class=&#34;nx&#34;&gt;fastcgi_params&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;auth_basic&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;JAWStats&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;auth_basic_user_file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;home&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;wangyan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;htpasswds&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.jawstats.com/community/thread125&#34;&gt;http://www.jawstats.com/community/thread125&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Nginx 日志分析 AWStats &#43; JAWStats 安装配置</title>
        <link>https://www.bg7pbp.com/p/nginx-awstats-jawstats-configuration/</link>
        <pubDate>Thu, 14 Jul 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-awstats-jawstats-configuration/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE-awstats&#34;&gt;一、安装和配置 Awstats&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85&#34;&gt;1. 下载与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E7%94%9F%E6%88%90%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2. 生成配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;3. 修改配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4-%E7%94%9F%E6%88%90-awstats-%E7%BB%9F%E8%AE%A1%E6%95%B0%E6%8D%AE&#34;&gt;4. 生成 Awstats 统计数据&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#5-%E8%BE%93%E5%87%BA%E7%BB%9F%E8%AE%A1%E7%BB%93%E6%9E%9C%E9%9D%99%E6%80%81%E9%A1%B5%E9%9D%A2-%E5%8F%AF%E9%80%89&#34;&gt;5. 输出统计结果静态页面 （可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#6-%E9%85%8D%E7%BD%AE-awstats-%E8%87%AA%E5%8A%A8%E8%BF%90%E8%A1%8C&#34;&gt;6. 配置 Awstats 自动运行&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AE-jawstats&#34;&gt;二、安装和配置 JAWStats&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E4%B8%8B%E8%BD%BD%E4%B8%8E%E5%AE%89%E8%A3%85&#34;&gt;2.1. 下载与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E4%BF%AE%E6%94%B9%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.2. 修改配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E5%AE%89%E8%A3%85%E4%B8%AD%E6%96%87%E8%AF%AD%E8%A8%80%E5%8C%85&#34;&gt;2.3. 安装中文语言包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E8%AE%BE%E7%BD%AEjawstats%E8%AE%BF%E9%97%AE%E5%AF%86%E7%A0%81&#34;&gt;2.4. 设置JAWStats访问密码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;code&gt;Awstats&lt;/code&gt;  是一款基于 Perl 的 WEB 日志分析工具，而 &lt;code&gt;JAWStats&lt;/code&gt; 是一款基于 PHP 的统计套件，旨在为 Awstats 提供更为精美图形界面。&lt;/p&gt;
&lt;h2 id=&#34;一安装和配置-awstats&#34;&gt;一、安装和配置 Awstats&lt;/h2&gt;
&lt;p&gt;Awstats 安装非常简单，但必须先确认你服务器上 Perl 的环境已经就绪。考虑到网站流量不大，每日一次的 Nginx 日志切割也可以省略了。&lt;/p&gt;
&lt;h3 id=&#34;1-下载与安装&#34;&gt;1. 下载与安装&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://prdownloads.sourceforge.net/awstats/awstats-7.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf awstats-7.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv awstats-7.0 /usr/local/awstats
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R root:root /usr/local/awstats&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2-生成配置文件&#34;&gt;2. 生成配置文件&lt;/h3&gt;
&lt;p&gt;使用 awstats_configure.pl 向导工具，生成每个网站的配置文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/awstats/tools
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./awstats_configure.pl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol&gt;
&lt;li&gt;输入 none 然后回车&lt;/li&gt;
&lt;li&gt;输入 y 确认创建配置文件&lt;/li&gt;
&lt;li&gt;输入配置文件名称，一般输入域名。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/a/awstats_01.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/a/awstats_01.jpg&#34;&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;配置文件使用默认路径 /etc/awstats&lt;/li&gt;
&lt;li&gt;按回车继续&lt;/li&gt;
&lt;li&gt;按回车完成配置文件的创建&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/a/awstats_02.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/a/awstats_02.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;3-修改配置文件&#34;&gt;3. 修改配置文件&lt;/h3&gt;
&lt;p&gt;Awstats 支持基于日期变化的动态日志文件，具体可以看注释。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/awstats/awstats.wangyan.org.conf 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LogFile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/nginx/logs/wangyan.org/access.log&amp;#34;&lt;/span&gt;（51行左右）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;4-生成-awstats-统计数据&#34;&gt;4. 生成 Awstats 统计数据&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#创建存放数据的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /var/lib/awstats
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#方法一：为指定的网站生成数据。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wangyan.org 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#方法二：为所有网站生成数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/awstats/tools/awstats_updateall.pl now&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;5-输出统计结果静态页面-可选&#34;&gt;5. 输出统计结果静态页面 （可选）&lt;/h3&gt;
&lt;p&gt;若在 Apache 上，那就可以直接打开网页查看统计了，当然 Nginx 也可以省略此步，因为 JAWStats 还尚未出场呢。。。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /var/www/awstats/wangyan.org &lt;span class=&#34;c1&#34;&gt;# 创建存放结果的目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/awstats/tools/awstats_buildstaticpages.pl -update  -config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;wangyan.org -lang&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;cn -dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/root/tmp -awstatsprog&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/awstats/wwwroot/cgi-bin/awstats.pl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;code&gt;/usr/local/awstats/tools/awstats_buildstaticpages.pl Awstats&lt;/code&gt;  静态页面生成工具&lt;code&gt;-update -config=wangyan.org&lt;/code&gt;  更新配置项&lt;code&gt;-lang=cn&lt;/code&gt;  语言为中文&lt;code&gt;-awstatsprog=/usr/local/awstats/wwwroot/cgi-bin/awstats.pl&lt;/code&gt;  Awstats 日志更新程序路径。&lt;/p&gt;
&lt;h3 id=&#34;6-配置-awstats-自动运行&#34;&gt;6. 配置 Awstats 自动运行&lt;/h3&gt;
&lt;p&gt;这个好办，设为每小时更新一次。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; * * * * /usr/local/awstats/tools/awstats_updateall.pl now&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装和配置-jawstats&#34;&gt;二、安装和配置 JAWStats&lt;/h2&gt;
&lt;p&gt;JAWStats 是基于 Awstats 统计数据的，但其界面更为强悍，有了JAWStats 你甚至可以抛弃第三方统计了。&lt;/p&gt;
&lt;h3 id=&#34;21-下载与安装&#34;&gt;2.1. 下载与安装&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://static.jawstats.com/src/jawstats-0.7beta.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /var/www/stats/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf jawstats-0.7beta.tar.gz -C /var/www/stats/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /var/www/stats/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp config.dist.php config.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22-修改配置文件&#34;&gt;2.2. 修改配置文件&lt;/h3&gt;
&lt;p&gt;官方配置说明见：&lt;a href=&#34;http://www.jawstats.com/documentation&#34;&gt;documentation&lt;/a&gt;
jawstats 是支持多站点的，每个 $aConfig 对应一个站点，并可以自由切换。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// core config parameters
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sDefaultLanguage&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// 设置默认语言
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sConfigDefaultView&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;thismonth.all&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$bConfigChangeSites&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//是否可以更换站点
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$bConfigUpdateSites&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;false&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//是否可以更新统计数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$sUpdateSiteFilename&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;xml_update.php&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;// individual site configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;nv&#34;&gt;$aConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;site1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;array&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;// site1 网站域名（注意不能乱填）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;statspath&amp;#34;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/lib/awstats/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//awstats 统计数据目录
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;updatepath&amp;#34;&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/awstats/wwwroot/cgi-bin/awstats.pl/&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//用于更新统计数据
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;siteurl&amp;#34;&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;http://blog.wangyan.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//点击首页标题后会前往这个地址
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;sitename&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;wangyan.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//首页标题
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;theme&amp;#34;&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;default&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;fadespeed&amp;#34;&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;250&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;password&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;my-1st-password&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//更新统计数据需要输入这个密码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;includes&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;s2&#34;&gt;&amp;#34;language&amp;#34;&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;zh-cn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23-安装中文语言包&#34;&gt;2.3. 安装中文语言包&lt;/h3&gt;
&lt;p&gt;首先下载 jawstats 多国语言包，解压缩后上传替换 lang 目录。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://www.jawstats.com/src/languagepack.zip&#34;&gt;http://www.jawstats.com/src/languagepack.zip&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;需要注意的是，你要修改 translations.php 文件的编码为UTF-8，不然全乱码了。另外修改汉化文件，也是translations.php，不能只修改zh-cn.js文件。&lt;/p&gt;
&lt;h3 id=&#34;24-设置jawstats访问密码&#34;&gt;2.4. 设置JAWStats访问密码&lt;/h3&gt;
&lt;p&gt;Nginx 支持为目录添加密码认证，若不想所有人都能访问到你的统计结果，那继续下面步骤吧。。。&lt;/p&gt;
&lt;p&gt;使用apache 的 htpasswd 来创建密码文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;语法：htpasswd -b -c /home/wangyan/.htpasswds 用户名 密码&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在Nginx的server字段内添加以下内容&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    location ~ /stats &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        root /var/www&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        location ~ &lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            fastcgi_pass  127.0.0.1:9000&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            fastcgi_index  index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            fastcgi_param  SCRIPT_FILENAME  &lt;span class=&#34;nv&#34;&gt;$document_root&lt;/span&gt;/&lt;span class=&#34;nv&#34;&gt;$fastcgi_script_name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;            include  fastcgi_params&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        auth_basic &lt;span class=&#34;s2&#34;&gt;&amp;#34;JAWStats&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        auth_basic_user_file /home/wangyan/.htpasswds&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后大功告成，输入 https://youdomain/stats/ 便可以访问了。&lt;/p&gt;
&lt;p&gt;参考资料 ：&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.ibm.com/developerworks/cn/linux/l-cn-awstats-nginx/&#34;&gt;http://www.ibm.com/developerworks/cn/linux/l-cn-awstats-nginx/&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 时区和自动校时设置</title>
        <link>https://www.bg7pbp.com/p/debian-ubuntu-ntp-sync/</link>
        <pubDate>Thu, 28 Apr 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/debian-ubuntu-ntp-sync/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%AE%BE%E7%BD%AE%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E5%8C%BA&#34;&gt;一、设置服务器时区&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%AE%BE%E7%BD%AE%E6%97%B6%E9%97%B4%E5%90%8C%E6%AD%A5%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;二、设置时间同步服务器&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80ntpdate-%E6%96%B9%E5%BC%8F&#34;&gt;方法一：ntpdate 方式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8Cntpd-%E6%96%B9%E5%BC%8F&#34;&gt;方法二：ntpd 方式&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;NTP 是通过网络自动校时的一种 TCP/IP 协议。Debian/Ubuntu 中有两种方式实现时间同步：ntpdate 和 ntpd，前者为一天调整一次时间，后者 ntpd 为守护进程，可以持续不断地调整时间。个人推荐使用 ntpd，它实际占用资源是很小的。&lt;/p&gt;
&lt;h2 id=&#34;一设置服务器时区&#34;&gt;一、设置服务器时区&lt;/h2&gt;
&lt;p&gt;如果是美国VPS，那么时区要首先设置，不然哪怕再精准的时间也是白搭。我一般使用 tzconfig 或 tzselect 工具来设置时区。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tzselect&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat &amp;gt;&amp;gt;~/.profile&lt;span class=&#34;s&#34;&gt;&amp;lt;&amp;lt;EOF
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;TZ=&amp;#39;Asia/Shanghai&amp;#39;; export TZ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;s&#34;&gt;EOF&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /etc/localtime
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二设置时间同步服务器&#34;&gt;二、设置时间同步服务器&lt;/h2&gt;
&lt;h3 id=&#34;方法一ntpdate-方式&#34;&gt;方法一：ntpdate 方式&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install -y ntpdate &lt;span class=&#34;c1&#34;&gt;#安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/cron.daily/ntpdate &lt;span class=&#34;c1&#34;&gt;#添加下面一行，每天同步。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ntpdate ntp.ubuntu.com cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /etc/cron.daily/ntpdate &lt;span class=&#34;c1&#34;&gt;#修改权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ntpdate -d cn.pool.ntp.org &lt;span class=&#34;c1&#34;&gt;#立即同步时间&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;方法二ntpd-方式&#34;&gt;方法二：ntpd 方式&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install -y ntpd &lt;span class=&#34;c1&#34;&gt;#安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/ntp.conf &lt;span class=&#34;c1&#34;&gt;#添加下面一行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server cn.pool.ntp.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/ntp restart &lt;span class=&#34;c1&#34;&gt;#重启&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以下适用于 debian&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install -y ntp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/ntp.conf &lt;span class=&#34;c1&#34;&gt;#修改为下面几行&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server 0.debian.pool.ntp.org iburst dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server 1.debian.pool.ntp.org iburst dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server 2.debian.pool.ntp.org iburst dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server 3.debian.pool.ntp.org iburst dynamic
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/ntp restart &lt;span class=&#34;c1&#34;&gt;#重启&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://people.ubuntu.com/~happyaron/ubuntu-docs-test/lucid/serverguide/zh_CN/NTP.html&#34;&gt;http://people.ubuntu.com/~happyaron/ubuntu-docs-test/lucid/serverguide/zh_CN/NTP.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cyberciti.biz/faq/debian-ubuntu-linux-install-ntpd/&#34;&gt;http://www.cyberciti.biz/faq/debian-ubuntu-linux-install-ntpd/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://e-boy.cn/artical/view/84303/&#34;&gt;http://e-boy.cn/artical/view/84303/&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>Linux中的head和tail命令</title>
        <link>https://www.bg7pbp.com/p/linux-head-tail-commands/</link>
        <pubDate>Wed, 16 Mar 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-head-tail-commands/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80head-%E5%91%BD%E4%BB%A4%E5%AE%9E%E4%BE%8B&#34;&gt;一、head 命令实例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Ctail-%E5%91%BD%E4%BB%A4%E5%AE%9E%E4%BE%8B&#34;&gt;二、tail 命令实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在Linux中，最常见读取文件命令是 cat、more 和 less，但若使用 tail 和 head 命令，它能更为方便的实现精确读取。&lt;/p&gt;
&lt;h2 id=&#34;一head-命令实例&#34;&gt;一、head 命令实例&lt;/h2&gt;
&lt;p&gt;1、默认，显示开头前10行。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、显示开头前k行。（以下3行效果一样）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head -k /etc/passwd（最常见用法）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head -n k /etc/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head -n +k /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、显示多文件开头前k行，并且不显示文件名的文件头。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head -q -n k file1 file2 file3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4、除最后k行外，显示剩余全部内容。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;head -n -k /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二tail-命令实例&#34;&gt;二、tail 命令实例&lt;/h2&gt;
&lt;p&gt;1、默认，显示最后10 行。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、显示最后k行。（以下3行效果一样）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -k etc/passwd （最常见用法）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -n k /etc/passwd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -n -k /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、显示最后k行，并且不显示文件名的文件头。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -q -n k file1 file2 file3 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4、从开头第k字节处开始输出。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -n +k /etc/passwd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5、参数-f使tail不停地去读最新的内容，因此有实时监视的效果，用Ctrl＋c来终止。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tail -f /var/log/messages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;以上只是一些简单实例，若使用sed命令，甚至是awk命令那就更强大了！&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Typecho 全站 SSL 配置</title>
        <link>https://www.bg7pbp.com/p/typecho-ssl-config/</link>
        <pubDate>Wed, 16 Mar 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/typecho-ssl-config/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1typecho-%E8%AE%BE%E7%BD%AE&#34;&gt;1、Typecho 设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#2nginx-%E9%87%8D%E5%AE%9A%E5%90%91%E8%AE%BE%E7%BD%AE&#34;&gt;2、Nginx 重定向设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Typecho 部署全站强制SSL，首先你要有的觉悟是忽略非Google引擎流量，甚至牺牲些速度。Typecho 实际配置非常简单，首先修改数据表&amp;quot;siteUrl&amp;quot;值，最后在nginx中重定向即可。&lt;/p&gt;
&lt;h2 id=&#34;1typecho-设置&#34;&gt;1、Typecho 设置&lt;/h2&gt;
&lt;p&gt;登录phpmyadmin，运行下面SQL语句。注意将&amp;quot;wangyan_blog&amp;quot;换成你数据库名，地址改为你的地址。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;sql&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;UPDATE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;wangyan_blog&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;typecho_options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;SET&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;https://wangyan.org/blog&amp;#39;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;WHERE&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;typecho_options&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;`&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;siteUrl&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2nginx-重定向设置&#34;&gt;2、Nginx 重定向设置&lt;/h3&gt;
&lt;p&gt;1、访问http自动转至https
2、对非google搜索引擎不强制转https。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$http_user_agent&lt;/span&gt; ~* &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;^baiduspider&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;bing&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;yahoo&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;msnbot&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;soso&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;sogou&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;iaskspider&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;yodao&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        rewrite ^&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; https://youdomain.com&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; permanent&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;上面语句意思是，根据 &lt;code&gt;http_user_agent&lt;/code&gt; 判断是否为爬虫，否则强制重定向。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>PureFTPd 一键安装脚本</title>
        <link>https://www.bg7pbp.com/p/pureftpd-one-click-install/</link>
        <pubDate>Thu, 10 Feb 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/pureftpd-one-click-install/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%AE%80%E4%BB%8B&#34;&gt;一、简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4&#34;&gt;二、安装步骤&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%88%AA%E5%9B%BE&#34;&gt;三、截图&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PureFTPd 编译安装相对比较简单，但是安装后，特别是web管理界面，是需要一定配置才能用于生产环境的。为此有了这个一键安装包的诞生。&lt;/p&gt;
&lt;p&gt;PureFTPd 是什么？这一键安装包是怎么工作的？请参考此文&lt;a href=&#34;http://www.wangyan.cloud/vps-pureftpd-install-from-source&#34;&gt;《Linux 从源码编译安装 pureftpd》&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;一简介&#34;&gt;一、简介&lt;/h3&gt;
&lt;p&gt;1、该一键安装包是一个Shell脚本，用于一键安装PureFTPd及web管理界面。&lt;del&gt;2、适用于Debian/Ubuntu系统，且通过 Linode 上测试。&lt;/del&gt;
2、适用于Debian/Ubuntu/Red Hat/CentOS系统。
3、可自动下载最新版本的PureFTPd编译安装，不需要人为更新。
4、支持MySQL用户，可设置相关权限及密码。
5、可修改此脚本的编译参数，这不会对安装造成错误。&lt;/p&gt;
&lt;h3 id=&#34;二安装步骤&#34;&gt;二、安装步骤&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;git clone git://github.com/wangyan/pureftpd.git
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pureftpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./install.sh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;直接下载已打包的版本&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;https://github.com/wangyan/pureftpd&#34;&gt;https://github.com/wangyan/pureftpd&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;1、输入服务器IP或者域名
2、网站根目录
3、MySQL Root 用户密码
4、MySQL ftpuser 用户密码，该用户是专门用来管理 PureFTPd 的。（该密码不需要你记住）
5、administartor 用户密码，该密码是Web管理界面管理员帐号密码。&lt;/p&gt;
&lt;h3 id=&#34;三截图&#34;&gt;三、截图&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://img.cdn.wangyan.cloud/pureftpd-1.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/p/pureftpd-1.png&#34; alt=&#34;pureftpd-1&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://img.cdn.wangyan.cloud/p/pureftpd-2.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/p/pureftpd-2.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;
&lt;a href=&#34;http://img.cdn.wangyan.cloud/p/pureftpd-3.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/p/pureftpd-3.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;补充：被动模式端口是 “30000-50000”，加载了防火墙的服务器需要打开。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新历史：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;2011.10.07: 更新至v0.4版&lt;/p&gt;</description>
        </item>
        <item>
        <title>s3cmd 安装使用指南</title>
        <link>https://www.bg7pbp.com/p/s3cmd-install-guide/</link>
        <pubDate>Thu, 10 Feb 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/s3cmd-install-guide/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E6%96%B9%E6%B3%95&#34;&gt;一、安装方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;二、使用方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%9B%AE%E5%BD%95%E5%A4%84%E7%90%86%E8%A7%84%E5%88%99&#34;&gt;三、目录处理规则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%90%8C%E6%AD%A5%E6%96%B9%E6%B3%95&#34;&gt;四、同步方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E5%B8%B8%E8%A7%84%E5%90%8C%E6%AD%A5%E6%93%8D%E4%BD%9C&#34;&gt;4.1、常规同步操作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E9%AB%98%E7%BA%A7%E5%90%8C%E6%AD%A5%E6%93%8D%E4%BD%9C&#34;&gt;4.2、高级同步操作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;http://s3tools.org/s3cmd&#34;&gt;s3cmd&lt;/a&gt; 是一款 &lt;a href=&#34;http://s3.amazonaws.com/&#34;&gt;Amazon S3&lt;/a&gt; 命令行工具。它不仅能上传、下载、同步，还能设置权限，下面是完整的安装使用指南。&lt;/p&gt;
&lt;h2 id=&#34;一安装方法&#34;&gt;一、安装方法&lt;/h2&gt;
&lt;p&gt;方法一：（Debian/Ubuntu ）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -O- -q http://s3tools.org/repo/deb-all/stable/s3tools.key &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; sudo apt-key add -
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget -O/etc/apt/sources.list.d/s3tools.list http://s3tools.org/repo/deb-all/stable/s3tools.list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get update &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo apt-get install s3cmd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;方法二：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/s3tools/s3cmd/1.0.0/s3cmd-1.0.0.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf s3cmd-1.0.0.tar.gz -C /usr/local/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /usr/local/s3cmd-1.0.0/ /usr/local/s3cmd/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/s3cmd/s3cmd /usr/bin/s3cmd&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二使用方法&#34;&gt;二、使用方法&lt;/h2&gt;
&lt;p&gt;1、配置，主要是 Access Key ID 和 Secret Access Key&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd --configure&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、列举所有 Buckets。（bucket 相当于根文件夹）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd ls&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、创建 bucket，且 bucket 名称是唯一的，不能重复。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd mb s3://my-bucket-name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4、删除空 bucket&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd rb s3://my-bucket-name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5、列举 Bucket 中的内容&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd ls s3://my-bucket-name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;6、上传 file.txt 到某个 bucket，&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd put file.txt s3://my-bucket-name/file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;7、上传并将权限设置为所有人可读&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd put --acl-public file.txt s3://my-bucket-name/file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;8、批量上传文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd put ./* s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;9、下载文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd get s3://my-bucket-name/file.txt file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;10、批量下载&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd get s3://my-bucket-name/* ./&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;11、删除文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd del s3://my-bucket-name/file.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;12、来获得对应的bucket所占用的空间大小&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd du -H s3://my-bucket-name&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三目录处理规则&#34;&gt;三、目录处理规则&lt;/h2&gt;
&lt;p&gt;以下命令都能将dir1 中的文件上传至 my-bucket-name，但效果只截然不同的。&lt;/p&gt;
&lt;p&gt;1）dir1 不带&amp;quot;/&amp;ldquo;斜杠，那么dir1会作为文件路径的一部分，相当于上传整个dir1目录，即类似 &amp;ldquo;cp -r dir1/&amp;rdquo;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/demo$ s3cmd put -r dir1 s3://my-bucket-name/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dir1/file1-1.txt -&amp;gt; s3://my-bucket-name/dir1/file1-1.txt  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; of 1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2）带&amp;rdquo;/&amp;ldquo;斜杠的 dir1，相当于上传dir1目录下的所有文件，即类似 &amp;ldquo;cp ./* &amp;quot;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/demo$ s3cmd put -r dir1/ s3://my-bucket-name/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dir1/file1-1.txt -&amp;gt; s3://my-bucket-name/file1-1.txt  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; of 1&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四同步方法&#34;&gt;四、同步方法&lt;/h2&gt;
&lt;p&gt;这是s3cmd 使用难点，但却是最实用的功能。官方使用说明见&lt;a href=&#34;http://s3tools.org/s3cmd-sync&#34;&gt;《s3cmd sync HowTo》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;首先明确，同步操作是要进行MD5校验的，只有当文件不同时，才会被传输。&lt;/p&gt;
&lt;h3 id=&#34;41常规同步操作&#34;&gt;4.1、常规同步操作&lt;/h3&gt;
&lt;p&gt;1、同步当前目录下所有文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd sync  ./  s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、加 &amp;ldquo;&amp;ndash;dry-run&amp;quot;参数后，仅列出需要同步的项目，不实际进行同步。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd sync  --dry-run ./  s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、加 &amp;quot; &amp;ndash;delete-removed&amp;quot;参数后，会删除本地不存在的文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd sync  --delete-removed ./  s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4、加 &amp;quot; &amp;ndash;skip-existing&amp;quot;参数后，不进行MD5校验，直接跳过本地已存在的文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd sync  --skip-existing ./  s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42高级同步操作&#34;&gt;4.2、高级同步操作&lt;/h3&gt;
&lt;p&gt;4.2.1、排除、包含规则（&amp;ndash;exclude 、&amp;ndash;include）&lt;/p&gt;
&lt;p&gt;file1-1.txt被排除，file2-2.txt同样是txt格式却能被包含。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;~/demo$ s3cmd sync --dry-run --exclude &lt;span class=&#34;s1&#34;&gt;&amp;#39;*.txt&amp;#39;&lt;/span&gt; --include &lt;span class=&#34;s1&#34;&gt;&amp;#39;dir2/*&amp;#39;&lt;/span&gt; ./  s3://my-bucket-name/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;exclude: dir1/file1-1.txt
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;upload: ./dir2/file2-2.txt -&amp;gt; s3://my-bucket-name/dir2/file2-2.txt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4.2.2、从文件中载入排除或包含规则。(&amp;ndash;exclude-from、&amp;ndash;include-from)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;s3cmd sync  --exclude-from pictures.exclude ./  s3://my-bucket-name/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;pictures.exclude 文件内容&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Hey, comments are allowed here ;-)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.jpg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;*.gif&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4.2.3、排除或包含规则支持正则表达式&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--rexclude 、--rinclude、--rexclude-from、--rinclude-from&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 快速架构DNS服务器</title>
        <link>https://www.bg7pbp.com/p/ubuntu-install-bind9/</link>
        <pubDate>Sun, 30 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-install-bind9/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80dns-%E8%AE%B0%E5%BD%95%E7%B1%BB%E5%9E%8B&#34;&gt;一、DNS 记录类型&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85-bind9&#34;&gt;二、安装 Bind9&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89dns-%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%9A%84%E9%85%8D%E7%BD%AE&#34;&gt;三、DNS 服务器的配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%88%9B%E5%BB%BA%E6%AD%A3%E5%90%91zone%E6%96%87%E4%BB%B6&#34;&gt;1．创建正向Zone文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E8%BD%AC%E5%8F%91%E9%85%8D%E7%BD%AE&#34;&gt;2、转发配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E6%B7%BB%E5%8A%A0dns%E8%AE%B0%E5%BD%95&#34;&gt;3、添加DNS记录&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bdns-%E6%B5%8B%E8%AF%95&#34;&gt;四、DNS 测试&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;DNS 服务器的作用是自动将域名地址转为IP地址。在架构邮局服务器的时候，往往需要本地调试，显然这离不开 DNS 服务器来做MX记录解析&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一dns-记录类型&#34;&gt;一、DNS 记录类型&lt;/h2&gt;
&lt;p&gt;1、A 记录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;www	IN	A	192.168.1.101&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、别名(CNAME)记录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;www	IN	A	192.168.1.101
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mail	IN	CNAME	www&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、NS 记录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@	IN	NS	wangyan.org.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@	IN	A	192.168.1.101&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;二安装-bind9&#34;&gt;二、安装 Bind9&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get -y install bind9&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改DNS服务器地址&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;nameserver 192.168.1.101&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/networking restart &lt;span class=&#34;c1&#34;&gt;#重启网络&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;三dns-服务器的配置&#34;&gt;三、DNS 服务器的配置&lt;/h3&gt;
&lt;h4 id=&#34;1创建正向zone文件&#34;&gt;1．创建正向Zone文件&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/bind/named.conf.local&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;添加下面内容，master代表主配置文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zone &lt;span class=&#34;s2&#34;&gt;&amp;#34;wangyan.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; master&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		file &lt;span class=&#34;s2&#34;&gt;&amp;#34;db.wangyan.org&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;2转发配置&#34;&gt;2、转发配置&lt;/h4&gt;
&lt;p&gt;转发的作用在于，如果找不到某个解析，转发到公开的DNS服务器来处理。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/bind/named.conf.options&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;forwarders &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		8.8.8.8&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;3添加dns记录&#34;&gt;3、添加DNS记录&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /etc/bind/db.local /var/cache/bind/db.wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /var/cache/bind/db.wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:%s/localhost/wangyan&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;org/g　&lt;span class=&#34;c1&#34;&gt;#将localhost替换为你的域名&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;四dns-测试&#34;&gt;四、DNS 测试&lt;/h3&gt;
&lt;p&gt;1、检查DNS是否设置&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cat /etc/resolv.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、检查MX记录是否生效&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nslookup -qt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mx extmail.org &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;windows&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;host -t mx example.com &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;linux&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、ping 工具&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ping wangyan.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4、dig 工具&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dig wangyan.org &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;linux&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5．named-checkzone 工具&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;named-checkzone wangyan.org /var/cache/bind/db.wangyan.org&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Nginx 二级子域名完美方案</title>
        <link>https://www.bg7pbp.com/p/nginx-subdomain-mapping/</link>
        <pubDate>Sat, 29 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-subdomain-mapping/</guid>
        <description>&lt;p&gt;对于批量添加虚拟主机的需求，&lt;a href=&#34;http://www.apache.org/&#34;&gt;Apache&lt;/a&gt; 有 &lt;a href=&#34;http://wangyan.org/docs/apache/mod/mod_vhost_alias.html&#34;&gt;vhost_alias&lt;/a&gt; 模块帮忙。Nginx 呢？其实神马都不需要，同样可以实现 Nginx 二级域名匹配子文件夹，且不匹配 &amp;ldquo;www&amp;rdquo;，但可以匹配包含 &amp;ldquo;www&amp;rdquo; 的子域名。&lt;/p&gt;
&lt;p&gt;首先看看目前网上搜到的方法。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt; ~* &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;))&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$subdomain&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    root  html/&lt;span class=&#34;nv&#34;&gt;$subdomain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;上面的 &amp;ldquo;~*&amp;rdquo; 表示不区分大小写，然后就是匹配任何 &amp;ldquo;xxx.xxx.xxx&amp;rdquo; 类型的网址，最后就悲剧了，不仅匹配了 &amp;ldquo;&lt;a href=&#34;https://www.yourdomian.com&#34;&gt;www.yourdomian.com&lt;/a&gt;&amp;rdquo; 甚至连 &amp;ldquo;我艹.$!@.com&amp;rdquo; 这类网址也匹配了。&lt;/p&gt;
&lt;p&gt;嗯，没错！这是一个正则问题。建议先阅读 &lt;a href=&#34;http://deerchao.net/tutorials/regex/regex.htm&#34;&gt;《正则表达式30分钟入门教程》&lt;/a&gt;、&lt;a href=&#34;http://www.wangyan.cloud/vps-nginx-location&#34;&gt;《Nginx Location 指令基础》&lt;/a&gt;，然后往下看&amp;hellip;&lt;/p&gt;
&lt;h3 id=&#34;完美解决方案&#34;&gt;完美解决方案&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt; ~* &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;?!www&lt;span class=&#34;se&#34;&gt;\b&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\w&lt;/span&gt;+&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\.\w&lt;/span&gt;+&lt;span class=&#34;se&#34;&gt;\.\w&lt;/span&gt;+ &lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nb&#34;&gt;set&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$subdomain&lt;/span&gt; /&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    root /home/wangyan/public_html&lt;span class=&#34;nv&#34;&gt;$subdomain&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    index index.html index.php&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;效果，下图可以看到，已经实现了，不匹配 &amp;ldquo;www&amp;rdquo; 但可以匹配包含 &amp;ldquo;www&amp;rdquo; 的子域名。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://img.cdn.wangyan.cloud/n/nginx-subdomain.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/n/nginx-subdomain.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;使用方法，请将上面代码复制到 server {} 标签中，然后重启nginx即可。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>配置Nginx前端Apache后端服务器</title>
        <link>https://www.bg7pbp.com/p/nginx-apache-reverse-proxy/</link>
        <pubDate>Thu, 27 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-apache-reverse-proxy/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86&#34;&gt;一、基础知识&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%BF%87%E7%A8%8B&#34;&gt;1.1、反向代理过程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12nginx-location-%E5%9F%BA%E7%A1%80&#34;&gt;1.2、Nginx location 基础&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%BE%91-nginx-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;二、编辑 Nginx 配置文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E6%B7%BB%E5%8A%A0proxy_set_header%E6%8C%87%E4%BB%A4&#34;&gt;2.1、添加&amp;quot;proxy_set_header&amp;quot;指令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E6%B7%BB%E5%8A%A0proxy_pass%E6%8C%87%E4%BB%A4&#34;&gt;2.2、添加&amp;quot;proxy_pass&amp;quot;指令&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80&#34;&gt;方法一：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C&#34;&gt;方法二：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E6%B7%BB%E5%8A%A0%E9%AB%98%E7%BA%A7%E9%80%89%E9%A1%B9%E9%80%89%E5%81%9A&#34;&gt;2.3、添加高级选项（选做）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BC%96%E8%BE%91-apache-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E9%80%89%E5%81%9A&#34;&gt;三、编辑 Apache 配置文件（选做）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;曾经对host2ez主机，它用的是nginx，但却能完美兼容apache感到很困惑，一番折腾后知道，原来只要由Nginx做前端处理静态文件，Apache做后端服务器即可，代价是可怜的内存又少了&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一基础知识&#34;&gt;一、基础知识&lt;/h2&gt;
&lt;h3 id=&#34;11反向代理过程&#34;&gt;1.1、反向代理过程&lt;/h3&gt;
&lt;p&gt;Nginx前端，Apache后端过程其实很简单，首先用户访问的是80端口的nginx，然后nginx将静态内容留给自己，其余的转发给非80端口的apache，apache处理完毕后再回传给nginx。&lt;/p&gt;
&lt;h3 id=&#34;12nginx-location-基础&#34;&gt;1.2、Nginx location 基础&lt;/h3&gt;
&lt;p&gt;详细见《Nginx Location 指令基础》，在不同的 Location 位置添加反向代理，Nginx 前端就充当了完全不一样的角色。&lt;/p&gt;
&lt;h2 id=&#34;二编辑-nginx-配置文件&#34;&gt;二、编辑 Nginx 配置文件&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/nginx/conf/nginx.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;21添加proxy_set_header指令&#34;&gt;2.1、添加&amp;quot;proxy_set_header&amp;quot;指令&lt;/h3&gt;
&lt;p&gt;编辑Nginx配置文件，在&amp;quot;http&amp;quot;字段内添加相应代码，发送发送真实IP到后端。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/nginx/conf/nginx.conf &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 向后端服务器发起请求时添加指定的header头信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_set_header  Host &lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 向后端服务器发送真实 IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_set_header  X-Real-IP &lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#让后端如php能直接通过变量获取真实IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_set_header  X-Forwarded-For &lt;span class=&#34;nv&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22添加proxy_pass指令&#34;&gt;2.2、添加&amp;quot;proxy_pass&amp;quot;指令&lt;/h3&gt;
&lt;p&gt;在相应 ”location&amp;quot; 字段添加如下反向代理语句。这部分是难点，也是国内教程都没有提及的地方。&lt;/p&gt;
&lt;h4 id=&#34;方法一&#34;&gt;方法一：&lt;/h4&gt;
&lt;p&gt;将所有请求都转发给后端 apache 处理，但由于 &amp;ldquo;~*&amp;rdquo; 优先级高于 &amp;ldquo;/&amp;rdquo; ，所以图片、JS、CSS例外，&amp;ldquo;expires&amp;rdquo; 用于设置缓存时间。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass  http://127.0.0.1:8080&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ~* &lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;jpg&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;jpeg&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;gif&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;png&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    access_log  off&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    expires  30d&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ~* &lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;js&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;css&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    access_log  off&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    expires  1d&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;方法二&#34;&gt;方法二：&lt;/h4&gt;
&lt;p&gt;只将.php后缀的文件，交由后端 apache 处理&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ~ &lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;php$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    proxy_pass  http://127.0.0.1:8080&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23添加高级选项选做&#34;&gt;2.3、添加高级选项（选做）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#请求连接后端服务器超时时间。即在规定时间，后端必须响应前端握手请求。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_connect_timeout  30&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#后端服务器响应时间。即连接成功，在后端排队等候处理不能超过的时间。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_read_timeout  60&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#后端数据回传时间。即在规定时间，后端服务器必须将所有数据回传完毕。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_send_timeout  30&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#从后端服务器读取的头信息的缓冲区大小。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_buffer_size  4k&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#从后端服务器读取的头信息的缓冲区数目和大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_buffers  &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; 32k&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;如果服务器繁忙，可申请的proxy_buffers大小
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_busy_buffers_size  64k&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#代理缓存临时文件大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_temp_file_write_size  64k&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#代理最大缓存临时文件大小&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;proxy_max_temp_file_size  128m&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三编辑-apache-配置文件选做&#34;&gt;三、编辑 Apache 配置文件（选做）&lt;/h2&gt;
&lt;p&gt;注意：mod_rpaf 模块不是必须安装，除非你需要开启 Apache 日志，但有多此一举之嫌，因为已经有 Nginx 日志了，再开 Apache 日志话就出现重复了。&lt;/p&gt;
&lt;p&gt;Apache rpaf 模块作用是获取Nginx转发过来的真实IP，否则在Apache日子中来访IP全部为127.0.0.1。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar zxvf mod_rpaf-0.6.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mod_rpaf-0.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/www/apache/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/apache/conf/httpd.conf LoadModule rpaf_module modules/mod_rpaf-2.0.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RPAFenable On
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RPAFproxy_ips 127.0.0.1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RPAFsethostname On
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;RPAFheader X-Forwarded-For &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Nginx Location 指令基础</title>
        <link>https://www.bg7pbp.com/p/nginx-location-directive/</link>
        <pubDate>Wed, 26 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-location-directive/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95&#34;&gt;一、基本语法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%8C%B9%E9%85%8D%E8%BF%87%E7%A8%8B&#34;&gt;二、匹配过程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE%E5%AE%9E%E4%BE%8B&#34;&gt;三、配置实例&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%85%A8%E5%B1%80%E5%8F%98%E9%87%8F&#34;&gt;四、全局变量&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nginx 中的 &lt;a href=&#34;http://wiki.nginx.org/NginxHttpCoreModule#location&#34;&gt;Location 指令&lt;/a&gt; 是&lt;a href=&#34;http://wiki.nginx.org/NginxChsHttpCoreModule&#34;&gt;NginxHttpCoreModule &lt;/a&gt;中重要指令。Location 指令比较简单，但却是配置 Nginx 过程中不得不去了解的。&lt;/p&gt;
&lt;p&gt;Location 指令，是用来为匹配的 URI 进行配置，URI 即语法中的&amp;quot;/uri/&amp;quot;，可以是字符串或正则表达式。但如果要使用正则表达式，则必须指定前缀。&lt;/p&gt;
&lt;h2 id=&#34;一基本语法&#34;&gt;一、基本语法&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location &lt;span class=&#34;o&#34;&gt;[=&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;~&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;~*&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;^~&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;@&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; /uri/ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt; … &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;〖=〗 表示精确匹配，如果找到，立即停止搜索并立即处理此请求。〖~ 〗 表示区分大小写匹配〖&lt;del&gt;*〗 表示不区分大小写匹配〖^&lt;/del&gt; 〗 表示只匹配字符串,不查询正则表达式。〖@〗 指定一个命名的location，一般只用于内部重定向请求。&lt;/p&gt;
&lt;h3 id=&#34;二匹配过程&#34;&gt;二、匹配过程&lt;/h3&gt;
&lt;p&gt;首先对字符串进行匹配查询，最确切的匹配将被使用。然后，正则表达式的匹配查询开始，匹配第一个结果后会停止搜索，如果没有找到正则表达式，将使用字符串的搜索结果，如果字符串和正则都匹配，那么正则优先级较高。&lt;/p&gt;
&lt;h3 id=&#34;三配置实例&#34;&gt;三、配置实例&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;location&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# 只匹配对 / 目录的查询.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; config A &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location  / &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# 匹配以 / 开始的查询，即所有查询都匹配。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; config B &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ^~ /images/ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# 匹配以 /images/ 开始的查询，不再检查正则表达式。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; config C &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;location ~* &lt;span class=&#34;se&#34;&gt;\.&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;gif&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;jpg&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;jpeg&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;c1&#34;&gt;# 匹配以gif, jpg, or jpeg结尾的文件，但优先级低于config C。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt; config D &lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;四全局变量&#34;&gt;四、全局变量&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$args&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#这个变量等于请求行中的参数。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$content_length&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#请求头中的Content-length字段。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$content_type&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#请求头中的Content-Type字段。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$document_root&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#当前请求在root指令中指定的值。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$host&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#请求主机头字段，否则为服务器名称。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$http_user_agent&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端agent信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$http_cookie&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端cookie信息&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$limit_rate&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#这个变量可以限制连接速率。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$request_body_file&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端请求主体信息的临时文件名。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$request_method&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端请求的动作，通常为GET或POST。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$remote_addr&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端的IP地址。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$remote_port&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#客户端的端口。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$remote_user&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#已经经过Auth Basic Module验证的用户名。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$request_filename&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#当前请求的文件路径，由root或alias指令与URI请求生成。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$query_string&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#与$args相同。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$scheme&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#HTTP方法（如http，https）。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$server_protocol&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#请求使用的协议，通常是HTTP/1.0或HTTP/1.1。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$server_addr&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#服务器地址，在完成一次系统调用后可以确定这个值。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$server_name&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#服务器名称。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$server_port&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#请求到达服务器的端口号。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$request_uri&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#包含请求参数的原始URI，不包含主机名，如：”/foo/bar.php?arg=baz”。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$uri&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#不带请求参数的当前URI，$uri不包含主机名，如”/foo/bar.html”。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$document_uri&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#与$uri相同。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、&lt;a href=&#34;http://wiki.nginx.org/NginxHttpCoreModule#location&#34;&gt;HttpCoreModule&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Apache2.2 使用 FastCGI 模块方法</title>
        <link>https://www.bg7pbp.com/p/apache-fastcgi-configuration/</link>
        <pubDate>Tue, 25 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/apache-fastcgi-configuration/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85-fastcgi-%E6%A8%A1%E5%9D%97&#34;&gt;一、编译与安装 FastCGI 模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%BE%91-apache22-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;二、编辑 Apache2.2 配置文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E8%BD%BD%E5%85%A5fastcgi%E6%A8%A1%E5%9D%97&#34;&gt;2.1、载入FastCGI模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E8%AE%BE%E7%BD%AEphp%E6%96%87%E4%BB%B6%E5%90%8E%E7%BC%80%E5%8F%8A%E8%A7%A3%E6%9E%90%E5%99%A8&#34;&gt;2.2、设置php文件后缀及解析器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E6%B7%BB%E5%8A%A0fastcgiexternalserver%E5%8F%8A%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7&#34;&gt;2.3、添加FastCGIExternalServer及目录属性&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E4%BD%9C%E7%94%A8%E5%8E%9F%E7%90%86&#34;&gt;三、作用原理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最新版的 php 5.3.4 已经默认启用 fastcgi ，此前已写过《Linux 从源码编译安装 PHP 5.3.4》，但是对于 Apache2.2 又该如何与 php 5.3.4 （ FastCGI 模式运行 ）相结合呢？&lt;/p&gt;
&lt;p&gt;目前我所知在Linux中，Apache2.2 要运行 php 脚本，有两中方法，一是使用mod_php 模块方式，另外一种就是使用FastCGI模块的的方式。&lt;/p&gt;
&lt;h2 id=&#34;一编译与安装-fastcgi-模块&#34;&gt;一、编译与安装 FastCGI 模块&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.6.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mod_fastcgi-2.4.6.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mod_fastcgi-2.4.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp Makefile.AP2 Makefile
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;nv&#34;&gt;top_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/apache
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install &lt;span class=&#34;nv&#34;&gt;top_dir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/apache&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编辑-apache22-配置文件&#34;&gt;二、编辑 Apache2.2 配置文件&lt;/h2&gt;
&lt;h3 id=&#34;21载入fastcgi模块&#34;&gt;2.1、载入FastCGI模块&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/apache/conf/httpd.conf &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule fastcgi_module modules/mod_fastcgi.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22设置php文件后缀及解析器&#34;&gt;2.2、设置php文件后缀及解析器&lt;/h3&gt;
&lt;p&gt;查找并在 &amp;ldquo;IfModule mime_module&amp;rdquo; 内添加下面代码&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;IfModule mime_module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AddHandler php-fastcgi .php 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Action php-fastcgi /fcgi-bin/php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ScriptAlias /fcgi-bin/ /var/fcgi-bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23添加fastcgiexternalserver及目录属性&#34;&gt;2.3、添加FastCGIExternalServer及目录属性&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;IfModule fastcgi_module&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    FastCGIExternalServer /var/fcgi-bin/php-fpm -host 127.0.0.1:9000
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/IfModule&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Directory &lt;span class=&#34;s2&#34;&gt;&amp;#34;/var/fcgi-bin/&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Options none
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Order allow,deny
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Allow from all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三作用原理&#34;&gt;三、作用原理&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;首先对 .php 后缀的文件使用 php-fastcgi (可随便起名)解析器。&lt;/li&gt;
&lt;li&gt;然后发现php-fastcgi不是内置的解析器。&lt;/li&gt;
&lt;li&gt;于是使用 action 指令定义该解析器，它实际上是 /var/php-fastcgi/ 目录下的一个叫 php-fpm 虚拟的文件。&lt;/li&gt;
&lt;li&gt;但是 apache 并不知道 /var/php-fastcgi/ 目录下的文件是需要执行的，必须用 ScriptAlias 定义个别名 /fcgi-bin/ 他实际指向/var/fcgi-bin/。（根据上文，ScriptAlias 别名内的文件会被执行，所以上面的action只能为 /fcgi-bin/php-fpm 而不能/var/fcgi-bin/php-fpm&lt;/li&gt;
&lt;li&gt;最后哪个虚拟文件其实就是127.0.0.1:9000了（必须全路径，不能使用/fcgi-bin/php-fpm）&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>Apache2.2 内置CGI 模块使用方法</title>
        <link>https://www.bg7pbp.com/p/apache-cgi-configuration/</link>
        <pubDate>Mon, 24 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/apache-cgi-configuration/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%9F%BA%E7%A1%80%E7%9F%A5%E8%AF%86&#34;&gt;一、基础知识&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E4%BB%80%E4%B9%88%E6%98%AF-cgi&#34;&gt;1.1、什么是 CGI？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E4%BB%80%E4%B9%88%E6%98%AF-apache-pma&#34;&gt;1.2、什么是 Apache PMA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13mod_cgi-%E5%92%8C-mod_cgid-%E5%8C%BA%E5%88%AB&#34;&gt;1.3、mod_cgi 和 mod_cgid 区别&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%89%A7%E8%A1%8C-cgi-%E7%9A%84%E6%96%B9%E6%B3%95&#34;&gt;二、执行 CGI 的方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E6%8C%87%E5%AE%9Ascriptalias%E7%9B%AE%E5%BD%95%E4%B8%BAcgi%E6%96%87%E4%BB%B6%E7%9B%AE%E5%BD%95&#34;&gt;2.1、指定ScriptAlias目录为CGI文件目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E6%8C%87%E5%AE%9A%E7%89%B9%E5%AE%9A%E6%96%87%E4%BB%B6%E5%90%8E%E7%BC%80%E4%B8%BAcgi%E6%96%87%E4%BB%B6&#34;&gt;2.2、指定特定文件后缀为CGI文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;为什么买的虚拟主机的 &amp;ldquo;public_html&amp;rdquo; 目录下总有那么一个空 &amp;ldquo;cgi-bin&amp;rdquo; 目录？再者为什么我将 cgi 文件不放刚才那个&amp;quot;cgi-bin&amp;quot; 目录下也同样也能运行？什么时候需要用到 &lt;a href=&#34;http://wangyan.org/docs/apache/mod/mod_mime.html#addtype&#34;&gt;AddType 指令&lt;/a&gt;？&lt;/p&gt;
&lt;h2 id=&#34;一基础知识&#34;&gt;一、基础知识&lt;/h2&gt;
&lt;h3 id=&#34;11什么是-cgi&#34;&gt;1.1、什么是 CGI？&lt;/h3&gt;
&lt;p&gt;简单说 CGI 是一种口，所有对 CGI 文件的访问请求，Web 服务器必须先作执行处理而不能直接把内容返回浏览器。&lt;/p&gt;
&lt;h3 id=&#34;12什么是-apache-pma&#34;&gt;1.2、什么是 Apache PMA&lt;/h3&gt;
&lt;p&gt;Apache PMA，即多路处理模块，详细介绍见 ，&lt;a href=&#34;http://wangyan.org/docs/apache/mpm.html&#34;&gt;apache2.2 官方文档&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;apache2.2 默认使用 prefork ，如果需要选择 worker ，那么必须在apache2.2 编译时使用“&amp;ndash;with-mpm=” 选项静态编译进核心。可通过&amp;quot;httpd -l&amp;quot;查询当前的PMA模式。&lt;/p&gt;
&lt;p&gt;prefork 采用进程的方式，Worker 采用进程与线程混合方式，海量的请求时，prefork 较快但耗资源，worker 相反。&lt;/p&gt;
&lt;h3 id=&#34;13mod_cgi-和-mod_cgid-区别&#34;&gt;1.3、mod_cgi 和 mod_cgid 区别&lt;/h3&gt;
&lt;p&gt;Apache PMA 为 prefork 时使用mod_cgi模块，PMA 为worker 时使用mod_cgid模块。详细介绍见文档 &lt;a href=&#34;http://wangyan.org/docs/apache/mod/mod_cgi.html&#34;&gt;Apache Module mod_cgi&lt;/a&gt;、&lt;a href=&#34;http://wangyan.org/docs/apache/mod/mod_cgid.html&#34;&gt;Apache Module mod_cgid&lt;/a&gt;。即在用户层面，这两个模块本质上是相同的。&lt;/p&gt;
&lt;h2 id=&#34;二执行-cgi-的方法&#34;&gt;二、执行 CGI 的方法&lt;/h2&gt;
&lt;h3 id=&#34;21指定scriptalias目录为cgi文件目录&#34;&gt;2.1、指定ScriptAlias目录为CGI文件目录&lt;/h3&gt;
&lt;p&gt;在 ScriptAlias 目录的文件均被认为是 CGI i脚本，另外要设置该目录属性，但无需添加 ExecCGI 选项。&lt;/p&gt;
&lt;p&gt;指定目录别名及路径，注意是“ScriptAlias”而不是“Alias”&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ScriptAlias /cgi-bin/ &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/cgi-bin/&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置该目录属性，绝对路径，千万不要漏了 &amp;ldquo;Allow from all&amp;rdquo; 切记！&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Directory &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/cgi-bin&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    AllowOverride None
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Options None
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Order allow,deny
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Allow from all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Directory&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22指定特定文件后缀为cgi文件&#34;&gt;2.2、指定特定文件后缀为CGI文件&lt;/h3&gt;
&lt;p&gt;在 ScriptAlias 目录的文件均被认为是 CGI i脚本，那么目录之外是否可以？可以！但要指定后缀、设置目录属性，且启用ExecCGI选项。&lt;/p&gt;
&lt;p&gt;指定后缀有两种方法，一是定义MIME类型为application/x-httpd-cgi，二是使用 AddHandler 或 SetHandler 指令激活内置的 cgi-script 处理器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AddType application/x-httpd-cgi .cgi &lt;span class=&#34;c1&#34;&gt;#方法一&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AddHandler cgi-script .cgi &lt;span class=&#34;c1&#34;&gt;#方法二&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置CGI的目录属性，必须在Options指令中启用ExecCGI选项&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Directory &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/htdocs/cgi-bin&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Options ExecCGI
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AllowOverride None
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Order allow,deny
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Allow from all
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Directory&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Linux 从源码编译安装 pureftpd</title>
        <link>https://www.bg7pbp.com/p/pureftpd-install-from-source/</link>
        <pubDate>Sun, 23 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/pureftpd-install-from-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85&#34;&gt;二、编译与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E5%92%8C%E9%85%8D%E7%BD%AEweb%E7%AE%A1%E7%90%86%E6%A8%A1%E5%9D%97&#34;&gt;二、安装和配置web管理模块&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;搭建FTP服务器，人肉尝试了 ProFTPd、PureFTPd、WU-FTPd、VsFTPd，最后选择了 PureFTPd，优点是安装使用方便、文档众多、功能一点也不含糊，大家用了都说好&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;p&gt;1.1、安装 MySQL 5 ：mysql-5.1.53-linux-i686-glibc23 （安装方法）&lt;/p&gt;
&lt;p&gt;1.2、安装基础编译环境&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install build-essential -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;1.3、更新MySQL共享库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/mysql/lib/&amp;#34;&lt;/span&gt; &amp;gt;&amp;gt; /etc/ld.so.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ldconfig&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编译与安装&#34;&gt;二、编译与安装&lt;/h2&gt;
&lt;p&gt;不要急着复制，先看看这些编译选项都有什么用，再干不迟。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar zxvf pure-ftpd-1.0.29.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; pure-ftpd-1.0.29/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/pureftpd &lt;span class=&#34;nv&#34;&gt;CFLAGS&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;-O2 --with-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql --with-altlog --with-cookie --with-diraliases --with-ftpwho --with-language&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;simplified-chinese --with-paranoidmsg --with-peruserlimits --with-quotas --with-ratios --with-sysquotas --with-throttling --with-virtualchroot --with-virtualhosts --with-welcomemsg&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install cp configuration-file/pure-config.pl /usr/local/pureftpd/sbin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /usr/local/pureftpd/sbin/pure-config.pl
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /usr/local/pureftpd/conf/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp configuration-file/pure-ftpd.conf /usr/local/pureftpd/conf/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--prefix：路径，默认在/usr/local/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--sysconfdir：配置文件路径，默认在 prefix/etc下。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--localstatedir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;：runtime文件目录，默认在prefix/var
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-altlog：支持将日志输出成特定格式，以便用于分析。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-brokenrealpath：如altlog或pure-uploadscript不能工作，开启此项。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-tls:：开启TLS支持
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-certfile&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;: SSL证书位置，默认在/etc/ssl/private/pure-ftpd.pem
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-cookie: 当使用者登入时显示自定义的标题信息。&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;见&lt;span class=&#34;s1&#34;&gt;&amp;#39;-F&amp;#39;&lt;/span&gt; 选项&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-diraliases: 支持目录别名
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-everything: 建立启用大部份功能的服务器（不建议&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-extauth：支持额外认证模块
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-ftpwho: 支持&lt;span class=&#34;s1&#34;&gt;&amp;#39;pure-ftpwho&amp;#39;&lt;/span&gt;命令，建议在standalone模式使用，inet较慢。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-language&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;simplified-chinese：输出信息为简体中文
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-ldap&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;：开启LDAP目录支持，需先安装OpenLDAP
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-minimal:最小化安装，对应with-everything。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;：用MySQL管理用户数据
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-nonroot:非root用户也能开启FTp（不建议）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-pam：认证模块，在mysql、pam、puredb、ldap、pgsql中选一个即可。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-paranoidmsg：显示错误提示信息给用户
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-peruserlimits:支持每个用户并发连接限制
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-probe-random-dev: 使用随机设备，在linux和bsd中无效。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-puredb: 本地用户数据存储，支持虚拟用户。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-quotas: 启用虚拟配额。可限制使用者储存在他的账号中的最大档案数。也可以限制总共的大小容量。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-ratios: 支援上传/下载比率限制
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-sysquotas: 支持系统配额（不是PrueFTPd的虚拟配额），要使用用系统配额时才启用这项。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-throttling: 支持带宽限制
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-uploadscript: 成功上传后可自动自动调用扩展程序。这需要安装&lt;span class=&#34;s1&#34;&gt;&amp;#39;pure-uploadscript&amp;#39;&lt;/span&gt;。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-virtualchroot: 通常使用者不能离开家目录，启用这项，再配合symbolic links，就变成可能了。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-virtualhosts: 支持虚拟主机。就是可为每个IP地址设不同的匿名登入区域。如果只有一个IP就用不着这项。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-welcomemsg: 像其它一样FTP servers读取&lt;span class=&#34;s1&#34;&gt;&amp;#39;welcome.msg&amp;#39;&lt;/span&gt;档案。但是Pure-ftpd预设是使用&lt;span class=&#34;s1&#34;&gt;&amp;#39;.banner&amp;#39;&lt;/span&gt;档案。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-boring: 显示&lt;span class=&#34;s2&#34;&gt;&amp;#34;professionnal-looking&amp;#34;&lt;/span&gt; 消息
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-bonjour: 在 MacOS X 中，开启 Bonjour 支持
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-rfc2640: 开启字符集转换支持
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-implicittls: 建立 FTPS 服务器，该协议是不兼容的，永远不要启用，除非你知道自己在做什么。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-privsep: 关闭权限分离，不推荐
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-ascii: 不支持 7位 ASCII，不推荐，除非你完全忽略win用户。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-capabilities: 如果系统没有libcap库，可关闭它，但会降低安全性。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-globbing: 不支持通配符，可减少内存使用。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-humor：关闭humor，感觉是个奇怪的东西。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-inetd：如果都是用standalone模式，可加这选项让程序小一点。不能同时关闭standalone
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-iplogging:不记录ip地址
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-nonalnum:严格的文件名检查，只允许基本字母数字字符。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-unicode:不允许非拉丁字符。如果你不推荐在文件名中使用特殊字符。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-sendfile：sendfile是一种内核机制，一般不关闭。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-shadow：忽略shadow密码，除非你使用PAM, LDAP 或者 SQL。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-standalone:不使用standalone模式，可使程序更小，但standalone模式是建议的方式。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--without-usernames: UIDs 和 GIDs代替用户名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二安装和配置web管理模块&#34;&gt;二、安装和配置web管理模块&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://machiel.generaal.net/files/pureftpd/ftp_v2.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf ftp_v2.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv ftp/ /home/wwwroot/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.1、浏览器中打开&amp;quot;http://youdomain.com/ftp/install.php&amp;quot; 一路下一步，最后将灰色区域的内容复制到配置文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/pureftpd/conf/pureftpd-mysql.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.2、修改 &amp;ldquo;/usr/local/pureftpd/etc/pure-ftpd.conf“ 找到 MySQLConfigFile 这行去掉前面的#号，并修改正确的目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MySQLConfigFile /usr/local/pureftpd/conf/pureftpd-mysql.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.3、将配置文件权限改回来。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /home/wwwroot/ftp/config.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.4、开机自动重启&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://small-script.googlecode.com/files/pureftpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv pureftpd /etc/init.d/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /etc/init.d/pureftpd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d pureftpd defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、&lt;a href=&#34;http://www.fishnote.net/?p=248&#34;&gt;pure-ftpd安装图文教程&lt;/a&gt;&lt;br&gt;
2、&lt;a href=&#34;http://www.ajaxstu.com/FTPfuwuqi/280185.html&#34;&gt;pure-ftpd 架设与说明&lt;/a&gt;&lt;br&gt;
3、&lt;a href=&#34;http://blog.45639.com/post-3.html&#34;&gt;Debian/Ubuntu 安装Pureftpd并实现磁盘限额(原创)&lt;/a&gt;&lt;br&gt;
4、&lt;a href=&#34;http://linux.justinhartman.com/PureFTPd_Installation_and_Setup&#34;&gt;PureFTPd Installation and Setup&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Linux 用户磁盘空间配额管理</title>
        <link>https://www.bg7pbp.com/p/linux-disk-quota-management/</link>
        <pubDate>Sat, 22 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-disk-quota-management/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%A7%84%E5%88%92%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&#34;&gt;一、规划文件系统&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E7%9A%84%E5%AE%B9%E9%87%8F%E7%AD%89%E4%BF%A1%E6%81%AF&#34;&gt;1.1、查看文件系统的容量等信息&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%98%AF%E5%90%A6%E5%B7%B2%E5%8A%A0%E5%85%A5quota%E6%94%AF%E6%8C%81&#34;&gt;1.2、查看文件系统是否已加入quota支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E4%B8%BA%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%B7%BB%E5%8A%A0quota%E6%94%AF%E6%8C%81&#34;&gt;1.3、为文件系统添加quota支持&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14%E4%B8%B4%E6%97%B6%E6%B7%BB%E5%8A%A0quota%E6%94%AF%E6%8C%81%E9%80%89%E5%81%9A&#34;&gt;1.4、临时添加quota支持（选做）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15%E9%87%8D%E6%96%B0%E6%8C%82%E8%BD%BD%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F&#34;&gt;1.5、重新挂载文件系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#16%E6%9F%A5%E7%9C%8B%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%8C%82%E8%BD%BD%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE&#34;&gt;1.6、查看文件系统挂载是否正确&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#17%E6%B7%BB%E5%8A%A0%E6%96%B0%E7%A1%AC%E7%9B%98%E6%8C%82%E8%BD%BD%E5%88%B0home%E7%9B%AE%E5%BD%95%E9%80%89%E5%81%9A&#34;&gt;1.7、添加新硬盘挂载到/home目录（选做）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E5%88%9D%E5%A7%8B%E5%8C%96%E5%90%AF%E5%8A%A8%E5%85%B3%E9%97%AD-quota&#34;&gt;二、安装、初始化、启动、关闭 Quota&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E5%AE%89%E8%A3%9D%E7%A1%AC%E7%9B%98-quota-%E5%A5%97%E4%BB%B6&#34;&gt;2.1、安裝硬盘 quota 套件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E5%88%9D%E5%A7%8B%E5%8C%96-quota-%E8%A7%84%E5%88%99%E6%96%87%E4%BB%B6&#34;&gt;2.2、初始化 quota 规则文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%85%8D%E7%BD%AE-quota-%E8%A7%84%E5%88%99&#34;&gt;三、配置 Quota 规则&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E4%B8%BA%E7%94%A8%E6%88%B7%E7%BB%84%E8%AE%BE%E7%BD%AE%E7%A3%81%E7%9B%98%E7%A9%BA%E9%97%B4%E9%99%90%E9%A2%9D&#34;&gt;3.1、为用户/组设置磁盘空间限额:&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E4%B8%BA%E6%89%B9%E9%87%8F%E7%94%A8%E6%88%B7%E5%A4%8D%E5%88%B6%E8%A7%84%E5%88%99&#34;&gt;3.2、为批量用户复制规则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E4%B8%BA%E7%94%A8%E6%88%B7%E7%BB%84%E8%AE%BE%E7%BD%AE%E5%AE%BD%E9%99%90%E6%9C%9F&#34;&gt;3.3、为用户/组设置宽限期&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bquota-%E6%8A%A5%E8%A1%A8&#34;&gt;四、Quota 报表&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E7%94%A8%E6%88%B7%E7%BB%84%E9%99%90%E9%A2%9D%E6%8A%A5%E8%A1%A8&#34;&gt;4.1、用户/组限额报表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F%E9%99%90%E9%A2%9D%E6%8A%A5%E8%A1%A8&#34;&gt;4.2、文件系统限额报表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94quota-%E6%B5%8B%E8%AF%95%E4%B8%8E%E7%AE%A1%E7%90%86&#34;&gt;五、Quota 测试与管理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Linux下要实现磁盘空间限制，需要安裝 quota 套件来实现。用户磁盘空间限制是以文件系统(分区)为单位的，想要限制在/home目录空间大小，那么必须为/home单独挂载一个分区&lt;/p&gt;
&lt;h2 id=&#34;一规划文件系统&#34;&gt;一、规划文件系统&lt;/h2&gt;
&lt;h3 id=&#34;11查看文件系统的容量等信息&#34;&gt;1.1、查看文件系统的容量等信息&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;df -h /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12查看文件系统是否已加入quota支持&#34;&gt;1.2、查看文件系统是否已加入quota支持&lt;/code&gt;&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13为文件系统添加quota支持&#34;&gt;1.3、为文件系统添加quota支持&lt;/h3&gt;
&lt;p&gt;编辑fstab文件，选择要设定 Quota 的文件系统，然后加入 usrquota 和 grpquota 选项：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/fstab
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/dev/sda1 /     ext3    defaults,usrquota,grpquota &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;其中 /dev/sda1 可以用 uuid 标识信息来代替&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;UUID&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;a8454012-1fff-4d33-baa5-b57fb7d3e1e2  /   ext3  defaults,usrquota,grpquota &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;那如何查看磁盘与分区的标识信息？&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -all /dev/disk/by-uuid&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;14临时添加quota支持选做&#34;&gt;1.4、临时添加quota支持（选做）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount -o remount,usrquota,grpquota /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;15重新挂载文件系统&#34;&gt;1.5、重新挂载文件系统&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount -o remount /&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;16查看文件系统挂载是否正确&#34;&gt;1.6、查看文件系统挂载是否正确&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount -a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;17添加新硬盘挂载到home目录选做&#34;&gt;1.7、添加新硬盘挂载到/home目录（选做）&lt;/h3&gt;
&lt;p&gt;如果你/home目录没有独立挂载一个分区，后期你可能想增加一个新的分区&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkfs.ext3 /dev/sda6 &lt;span class=&#34;c1&#34;&gt;#格式化并加载一个新分区&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /media/home
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mount /dev/sda1 /media/home 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -rf /media/home/* /home &lt;span class=&#34;c1&#34;&gt;#复制旧/home的内容到新/home目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;umound /media/home fdisk -l &lt;span class=&#34;c1&#34;&gt;#查看硬盘数及分区情况&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;fdisk  /dev/sda &lt;span class=&#34;c1&#34;&gt;#操作硬盘的命令&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;d:删除分区、l:列出所有分区类型、m:列出帮助信息、n:添加一个分区、p:列出分区表信息、q:不保存退出、t:改变分区类型、w:把分区表写入硬盘并退出&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://www.linuxsir.org/main/?q=node/81&#34;&gt;实例解说 fdisk 使用方法&lt;/a&gt;
&lt;a href=&#34;http://www.hksilicon.com/kb/articles/2163/Linux-umount-Device-is-busy&#34;&gt;umount 出現 &amp;ldquo;Device is busy&amp;quot;解法&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;二安装初始化启动关闭-quota&#34;&gt;二、安装、初始化、启动、关闭 Quota&lt;/h2&gt;
&lt;h3 id=&#34;21安裝硬盘-quota-套件&#34;&gt;2.1、安裝硬盘 quota 套件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install quota quotatool&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;其中 quotatool 是一个基于命令行的磁盘配额设置和管理工具&lt;/p&gt;
&lt;h3 id=&#34;22初始化-quota-规则文件&#34;&gt;2.2、初始化 quota 规则文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;quotacheck -avugm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; /quota.* &lt;span class=&#34;c1&#34;&gt;#修改规则文件权限&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;-a 为所有添加了quota支持的文件系统，建立 quota 规则文件
-v 显示建立 quota 规则文件过程中的信息
-u 建立 aquota.user 规则文件
-g 建立 aquota.group 规则文件
-m 强制初始化
2.3、启动关闭 quota 的服务
quotaon -avug #启动 quota 的服务
quotaoff -auvg #关闭 quota 的服务&lt;/p&gt;
&lt;h2 id=&#34;三配置-quota-规则&#34;&gt;三、配置 Quota 规则&lt;/h2&gt;
&lt;h3 id=&#34;31为用户组设置磁盘空间限额&#34;&gt;3.1、为用户/组设置磁盘空间限额:&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edquota -u username
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edquota -g groupname&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;filesystem：说明该限制值是针对哪个分区，例如&amp;rdquo;&amp;quot;/&amp;ldquo;或&amp;rdquo;/home&amp;quot;
blocks：使用者已使用的磁盘区块数量，该值由quota自动算出
soft：单位为KB，一个非强制性磁盘空间限额
hard：单位为KB，一个强制性磁盘空间限额
inodes：使用者已使用的档案数目
soft：非强制性的inode的限制
hard：强制性的inode的限制&lt;/p&gt;
&lt;h3 id=&#34;32为批量用户复制规则&#34;&gt;3.2、为批量用户复制规则&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edquota -p group1 user1,user2,user3 ..&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33为用户组设置宽限期&#34;&gt;3.3、为用户/组设置宽限期&lt;/h3&gt;
&lt;p&gt;通常将 hard 值设置大于 soft 值，就是为了让宽限期发挥作用，默认超额宽限期为7天。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;edquota -t&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四quota-报表&#34;&gt;四、Quota 报表&lt;/h2&gt;
&lt;h3 id=&#34;41用户组限额报表&#34;&gt;4.1、用户/组限额报表&lt;/h3&gt;
&lt;p&gt;-s 使用1024倍数来指定单位，会显示如M 之类的单位。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;quota -uvs user1 user2 user3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;quota -gvs group1 group2 group3&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42文件系统限额报表&#34;&gt;4.2、文件系统限额报表&lt;/h3&gt;
&lt;p&gt;查看所有使用者的 quota 限制情況&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;repquota -auvs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五quota-测试与管理&#34;&gt;五、Quota 测试与管理&lt;/h2&gt;
&lt;p&gt;1、切换到user1用户
2、向当前目录的bigfile文件写入10次，每次1m的数据
3、如果写入大小没有超过 hard 值，那么进入宽限期倒计时。
4、如果写入超过hard值，那么写入失败。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;su user1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dd &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/dev/zero &lt;span class=&#34;nv&#34;&gt;of&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;bigfile &lt;span class=&#34;nv&#34;&gt;bs&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;1M &lt;span class=&#34;nv&#34;&gt;count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;参考资料：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、&lt;a href=&#34;http://tbala.net/x/linux2008/Linux-02ADV-200909.html&#34;&gt;磁碟配額&lt;/a&gt;
2、&lt;a href=&#34;http://linux.vbird.org/linux_basic/0420quota.php&#34;&gt;磁碟配額(Quota)與進階檔案系統管理&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Linux 从源码编译安装 Nginx</title>
        <link>https://www.bg7pbp.com/p/nginx-install-from-source/</link>
        <pubDate>Fri, 21 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/nginx-install-from-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E5%AE%89%E8%A3%85-openssl&#34;&gt;1.1、安装 OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E5%87%86%E5%A4%87-pcre-%E5%BA%93&#34;&gt;1.2、准备 pcre 库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13%E5%87%86%E5%A4%87-zlib-%E5%BA%93&#34;&gt;1.3、准备 zlib 库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85-nignx&#34;&gt;二、编译与安装 Nignx&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E4%B8%8B%E8%BD%BD%E5%88%9B%E5%BB%BA%E4%B8%B4%E6%97%B6%E7%9B%AE%E5%BD%95&#34;&gt;2.1、下载、创建临时目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85&#34;&gt;2.2、编译与安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8-nginx-%E8%84%9A%E6%9C%AC&#34;&gt;2.3、开机自启动 nginx 脚本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89-nignx-%E9%85%8D%E7%BD%AE&#34;&gt;三、 Nignx 配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bnginx-%E9%85%8D%E7%BD%AE%E5%8F%82%E8%80%83%E8%B5%84%E6%96%99&#34;&gt;四、nginx 配置参考资料&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nginx 是一个高性能的 HTTP 和 反向代理服务器，也是一个 IMAP/POP3/SMTP 代理服务器。Nginx 编译安装比较简单，难点在于配置。下面是 Nignx 0.8.54 编译安装和简单配置笔记。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;h3 id=&#34;11安装-openssl&#34;&gt;1.1、安装 OpenSSL&lt;/h3&gt;
&lt;p&gt;OpenSSL 版本：openssl-1.0.0c （&lt;a href=&#34;http://wangyan.org/blog/install-openssl-from-source.html&#34;&gt;安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;h3 id=&#34;12准备-pcre-库&#34;&gt;1.2、准备 pcre 库&lt;/h3&gt;
&lt;p&gt;pere 是为了让 nginx 支持正则表达式。只是准备，并不安装，是为了避免在64位系统中出现错误。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.11.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf pcre-8.11.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13准备-zlib-库&#34;&gt;1.3、准备 zlib 库&lt;/h3&gt;
&lt;p&gt;同样只是准备，并不安装，是为了避免在64位系统中出现错误。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://zlib.net/zlib-1.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf zlib-1.2.5.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编译与安装-nignx&#34;&gt;二、编译与安装 Nignx&lt;/h2&gt;
&lt;h3 id=&#34;21下载创建临时目录&#34;&gt;2.1、下载、创建临时目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nginx.org/download/nginx-0.8.54.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf nginx-0.8.54.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; nginx-0.8.54
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /var/tmp/nginx&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22编译与安装&#34;&gt;2.2、编译与安装&lt;/h3&gt;
&lt;p&gt;详细编译配置选项见&lt;a href=&#34;http://blog.chinaunix.net/u4/121823/showart_2418466.html&#34;&gt;《Nginx编译参数解析》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/nginx --pid-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/run/nginx.pid --lock-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lock/nginx.lock --with-http_ssl_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_gzip_static_module --with-http_stub_status_module --with-mail --with-mail_ssl_module --with-pcre&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;../pcre-8.11 --with-zlib&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;../zlib-1.2.5 --with-debug --http-client-body-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/tmp/nginx/client --http-proxy-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/tmp/nginx/proxy --http-fastcgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/tmp/nginx/fastcgi --http-uwsgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/tmp/nginx/uwsgi --http-scgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/tmp/nginx/scgi make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/nginx/sbin/nginx /usr/sbin/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;ndash;prefix #nginx安装目录，默认在/usr/local/nginx&amp;ndash;pid-path #pid问件位置，默认在logs目录&amp;ndash;lock-path #lock问件位置，默认在logs目录&amp;ndash;with-http_ssl_module #开启HTTP SSL模块，以支持HTTPS请求。&amp;ndash;with-http_dav_module #开启WebDAV扩展动作模块，可为文件和目录指定权限&amp;ndash;with-http_flv_module #支持对FLV文件的拖动播放&amp;ndash;with-http_realip_module #支持显示真实来源IP地址&amp;ndash;with-http_gzip_static_module #预压缩文件传前检查，防止文件被重复压缩&amp;ndash;with-http_stub_status_module #取得一些nginx的运行状态&amp;ndash;with-mail #允许POP3/IMAP4/SMTP代理模块&amp;ndash;with-mail_ssl_module #允许POP3／IMAP／SMTP可以使用SSL／TLS&amp;ndash;with-pcre=../pcre-8.11 #注意是未安装的pcre路径&amp;ndash;with-zlib=../zlib-1.2.5 #注意是未安装的zlib路径&amp;ndash;with-debug #允许调试日志&amp;ndash;http-client-body-temp-path #客户端请求临时文件路径&amp;ndash;http-proxy-temp-path #设置http proxy临时文件路径&amp;ndash;http-fastcgi-temp-path #设置http fastcgi临时文件路径&amp;ndash;http-uwsgi-temp-path=/var/tmp/nginx/uwsgi #设置uwsgi 临时文件路径&amp;ndash;http-scgi-temp-path=/var/tmp/nginx/scgi #设置scgi 临时文件路径&lt;/p&gt;
&lt;h3 id=&#34;23开机自启动-nginx-脚本&#34;&gt;2.3、开机自启动 nginx 脚本&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://small-script.googlecode.com/files/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv nginx /etc/init.d/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d nginx defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三-nignx-配置&#34;&gt;三、 Nignx 配置&lt;/h2&gt;
&lt;p&gt;1、将 &amp;ldquo;root html;&amp;rdquo; 改为你网站目录，比如 &amp;ldquo;root /home/wwwroot;&amp;rdquo;
2、支持php，将 &amp;ldquo;location ~ .php$&amp;rdquo; 字段内所有#号注释全部去掉。
3、平滑重启，&amp;ldquo;nginx -s reload&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;四nginx-配置参考资料&#34;&gt;四、nginx 配置参考资料&lt;/h2&gt;
&lt;p&gt;1、&lt;a href=&#34;http://wiki.nginx.org/NginxChs&#34;&gt;Nginx 的中文维基&lt;/a&gt;
英文不好没事，一切从这里开始。&lt;/p&gt;
&lt;p&gt;2、&lt;a href=&#34;http://product.dangdang.com/product.aspx?product_id=20807089&#34;&gt;《实战Nginx：取代Apache的高性能Web服务器》&lt;/a&gt;（&lt;a href=&#34;http://dl.dbank.com/c0xiqx3u6p&#34;&gt;PDF 下载&lt;/a&gt;）
应该是国内最权威一本书了，包括 nginx方方面面，读完它能让你少走不少弯路。&lt;/p&gt;
&lt;p&gt;3、&lt;a href=&#34;http://www.howtocn.org/nginx:directiveindex&#34;&gt;Nginx 指令索引&lt;/a&gt;
不理解别人配置文件？到这里“Ctrl+F”搜搜吧，你就找到答案了。&lt;/p&gt;
&lt;p&gt;4、&lt;a href=&#34;http://www.howtocn.org/nginx:%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E9%AB%98%E6%80%A7%E8%83%BD%E7%9A%84nginx_fastcgi%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;关于Nginx的一些优化(突破十万并发)&lt;/a&gt;
CPU、内存强劲的可以尝试下，同样思路，相反可以将nginx优化成低内存消耗。&lt;/p&gt;
&lt;p&gt;5、&lt;a href=&#34;http://blog.s135.com/nginx_php_v6/&#34;&gt;Nginx 0.8.x + PHP 5.2.13（FastCGI）搭建胜过Apache十倍的Web服务器&lt;/a&gt;
经典文章，建议从最后看起，前面的忽略&lt;/p&gt;
&lt;p&gt;6、&lt;a href=&#34;http://blog.52news.com/article.asp?id=1580&#34;&gt;nginx 多虚拟主机配置&lt;/a&gt;
顾名思义，添加多个虚拟主机的方法，都是添加多个 server 字段实现。&lt;/p&gt;
&lt;p&gt;7、&lt;a href=&#34;http://blog.licess.org/nginx-autoindex/&#34;&gt;Nginx 打开目录浏览功能&lt;/a&gt;
Nginx 默认是不允许列出整个目录的，这是个很实用的小技巧。&lt;/p&gt;
&lt;p&gt;&amp;hellip;&amp;hellip;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 从源码编译安装 PHP 5.3.4</title>
        <link>https://www.bg7pbp.com/p/php-fpm-install-from-source/</link>
        <pubDate>Thu, 20 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-fpm-install-from-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E4%BB%80%E4%B9%88%E6%98%AF-fastcgiphp-fpmfastcgi-&#34;&gt;一、什么是 FastCGI、PHP-FPM、FastCGI ？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;二、准备工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-php5-gd&#34;&gt;三、编译安装 php5-gd&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%AE%89%E8%A3%85%E5%9F%BA%E7%A1%80%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83&#34;&gt;3.1、安装基础编译环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E5%AE%89%E8%A3%85-libpng-libjpeg-libfreetype&#34;&gt;3.2、安装 libpng、 libjpeg、 libfreetype&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-libiconv&#34;&gt;3.3、源码编译安装 Libiconv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-gd-2035&#34;&gt;3.4、源码编译安装 gd-2.0.35&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-php5-%E6%89%A9%E5%B1%95%E5%BA%93&#34;&gt;四、编译安装 php5 扩展库&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41libxmllibmhashlibmcryptmcryptlibldaplibsasl&#34;&gt;4.1、libxml、libmhash、libmcrypt、mcrypt、libldap、libsasl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-curl-7213&#34;&gt;4.2、编译安装 curl-7.21.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-php534-fastcgi&#34;&gt;五、编译安装 php5.3.4 (FastCGI)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E9%85%8D%E7%BD%AE-php-fpm&#34;&gt;六、配置 php-fpm&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#62%E5%BC%80%E6%9C%BA%E8%87%AA%E5%8A%A8%E9%87%8D%E5%90%AF-php-fpm&#34;&gt;6.2、开机自动重启 php-fpm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从 php 5.3.3 起，就可直接使用 PHP-FPM ，不再需要打补丁了。此前已写过&lt;a href=&#34;http://www.wangyan.cloud/vps-php-install-from-source&#34;&gt;《Linux 从源码编译安装 PHP 5》&lt;/a&gt;，但是以 mod_php 模块方式，而非 FastCGI 模式运行 php ，并不适用于 Lighttpd、Nginx、LiteSpeed ，而且当时对所有模块都采用编译安装也显得过于繁琐。&lt;/p&gt;
&lt;h2 id=&#34;一什么是-fastcgiphp-fpmfastcgi-&#34;&gt;一、什么是 FastCGI、PHP-FPM、FastCGI ？&lt;/h2&gt;
&lt;p&gt;CGI是一种口；FastCGI 是 CGI 的扩展，让 CGI 更高效；PHP-FPM 是一个 PHP FastCGI 管理器；同理 Spawn-FCGI 是一个通用的 FastCGI 管理器，它是 lighttpd 中的一部份。&lt;/p&gt;
&lt;p&gt;因此，以 FastCGI 模式运行 php 5.3.4，主要有两种方式，一是 PHP-FPM、二是 Spawn-FCGI ，本文要讲的是以 PHP-FPM 方式运行管理 php。&lt;/p&gt;
&lt;p&gt;参考资料：&lt;/p&gt;
&lt;p&gt;1、&lt;a href=&#34;http://syre.blogbus.com/logs/20092011.html&#34;&gt;《php-fpm文档中文翻译》&lt;/a&gt;
2、&lt;a href=&#34;http://www.mike.org.cn/articles/what-is-cgi-fastcgi-php-fpm-spawn-fcgi/&#34;&gt;《什么是CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI？》&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;二准备工作&#34;&gt;二、准备工作&lt;/h2&gt;
&lt;p&gt;系统环境：Ubuntu-10.10-Server-I386
OpenSSL 版本：openssl-1.0.0c
OpenSSH 版本：openssh-5.6p1
MySQL 5 版本：mysql-5.1.53-linux-i686-glibc23&lt;/p&gt;
&lt;h2 id=&#34;三编译安装-php5-gd&#34;&gt;三、编译安装 php5-gd&lt;/h2&gt;
&lt;h3 id=&#34;31安装基础编译环境&#34;&gt;3.1、安装基础编译环境&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install build-essential -y&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32安装-libpng-libjpeg-libfreetype&#34;&gt;3.2、安装 libpng、 libjpeg、 libfreetype&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apt-get install libpng12-dev libjpeg62-dev libfreetype6-dev -y&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33源码编译安装-libiconv&#34;&gt;3.3、源码编译安装 Libiconv&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libiconv-1.13.1.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libiconv-1.13.1/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34源码编译安装-gd-2035&#34;&gt;3.4、源码编译安装 gd-2.0.35&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.libgd.org/releases/gd-2.0.35.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf gd-2.0.35.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; gd-2.0.35/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-libiconv-prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-png --with-freetype --with-jpeg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四编译安装-php5-扩展库&#34;&gt;四、编译安装 php5 扩展库&lt;/h2&gt;
&lt;h3 id=&#34;41libxmllibmhashlibmcryptmcryptlibldaplibsasl&#34;&gt;4.1、libxml、libmhash、libmcrypt、mcrypt、libldap、libsasl&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install libxml2-dev libmhash-dev libmcrypt-dev mcrypt libldap2-dev libsasl2-dev libssh2-1-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42编译安装-curl-7213&#34;&gt;4.2、编译安装 curl-7.21.3&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://curl.haxx.se/download/curl-7.21.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf curl-7.21.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; curl-7.21.3/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五编译安装-php534-fastcgi&#34;&gt;五、编译安装 php5.3.4 (FastCGI)&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://cn.php.net/distributions/php-5.3.4.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf php-5.3.4.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; php-5.3.4/ ./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php --with-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql --with-mysqli&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql/bin/mysql_config --with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr --with-png-dir --with-jpeg-dir --with-freetype-dir --with-iconv-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-gd&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --enable-gd-native-ttf --with-libxml-dir --with-zlib --with-mhash --with-mcrypt --with-ldap --with-ldap-sasl --with-curl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-curlwrappers --enable-bcmath --enable-calendar --enable-mbstring --enable-ftp --enable-zip --enable-sockets --enable-exif --enable-zend-multibyte --enable-fpm --with-fpm-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data --with-fpm-group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;www-data make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp php.ini-production /usr/local/php/lib/php.ini&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;ndash;prefix #指定php5安装目录&amp;ndash;with-mysql #指定mysql安装目录&amp;ndash;with-mysqli #添加mysqli扩展支持&amp;ndash;with-openssl #指定openssl安装目录&amp;ndash;with-png-dir #GD所需的png库&amp;ndash;with-jpeg-dir #GD所需的jpeg库&amp;ndash;with-freetype-dir #指定freetype字体库&amp;ndash;with-iconv-dir #指定iconv函数库，用于字符集转换&amp;ndash;with-gd #指定GD库目录&amp;ndash;enable-gd-native-ttf #添加TrueType字符串函数库&amp;ndash;with-libxml-dir #指定libxml2库目录&amp;ndash;with-zlib #压缩库目录&amp;ndash;with-mhash #指定哈希函数库目录&amp;ndash;with-mcrypt #指定mcrypt加密函数库&amp;ndash;with-ldap #指定ldap库&amp;ndash;with-curl #指定cURL库&amp;ndash;with-curlwrappers #运用curl工具打开url流&amp;ndash;enable-bcmath #高精度数学函数支持&amp;ndash;enable-calendar #开启对日历的支持&amp;ndash;enable-mbstring #多字节、字符串支持&amp;ndash;enable-ftp #开启对ftp的支持&amp;ndash;enable-zip #开启对zip的支持&amp;ndash;enable-sockets #开启sockets支持&amp;ndash;enable-exif #图片元数据支持&amp;ndash;enable-zend-multibyte #zend多字节的支持&amp;ndash;enable-fpm #开启FastCGI的进程管理支持&amp;ndash;with-fpm-user #运行fpm的用户&amp;ndash;with-fpm-user #运行fpm的组&lt;/p&gt;
&lt;h2 id=&#34;六配置-php-fpm&#34;&gt;六、配置 php-fpm&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/php/etc/php-fpm.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;查找下面语句，并将前面&amp;quot;#&amp;ldquo;号去掉。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;pid&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; run/php-fpm.pid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;error_log&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; log/php-fpm.log
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;log_level&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; notice
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.start_servers
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.min_spare_servers
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pm.max_spare_servers&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;62开机自动重启-php-fpm&#34;&gt;6.2、开机自动重启 php-fpm&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /etc/init.d/php-fpm
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d php-fpm defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Linux 文件及文件夹权限</title>
        <link>https://www.bg7pbp.com/p/linux-file-directory-permissions/</link>
        <pubDate>Wed, 19 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-file-directory-permissions/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%9F%A5%E7%9C%8B-linux-%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90&#34;&gt;一、查看 Linux 文件权限&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%9D%83%E9%99%90%E6%A0%87%E7%A4%BA%E7%AC%A6&#34;&gt;二、权限标示符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%BF%AE%E6%94%B9-linux-%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90&#34;&gt;二、修改 Linux 文件权限&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80&#34;&gt;方法一&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C&#34;&gt;方法二&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89linux-%E5%B8%B8%E7%94%A8%E6%96%87%E4%BB%B6%E6%9D%83%E9%99%90&#34;&gt;三、Linux 常用文件权限&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;普及 linux 基础知识，Linux 文件及文件夹权限，不要动不动就 777 权限。网上教程过于复杂啰嗦，简单总结如下&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一查看-linux-文件权限&#34;&gt;一、查看 Linux 文件权限&lt;/h2&gt;
&lt;p&gt;ls -l （通用）
ll （Ubuntu适用，等于ls -al）&lt;/p&gt;
&lt;h2 id=&#34;二权限标示符&#34;&gt;二、权限标示符&lt;/h2&gt;
&lt;p&gt;r（读）、w(写）、x（执行）
4（读）、2（写）、1（执行）&lt;/p&gt;
&lt;p&gt;注：目录必须有执行权才能读取&lt;/p&gt;
&lt;h2 id=&#34;二修改-linux-文件权限&#34;&gt;二、修改 Linux 文件权限&lt;/h2&gt;
&lt;h3 id=&#34;方法一&#34;&gt;方法一&lt;/h3&gt;
&lt;p&gt;chmod -R 777 dir/&lt;/p&gt;
&lt;p&gt;-R 更改dir 目录及dir内所有子文件和文件夹
777 指将“文件所属用户、所属用户组、其它用户”改为读、写、执行。&lt;/p&gt;
&lt;h3 id=&#34;方法二&#34;&gt;方法二&lt;/h3&gt;
&lt;p&gt;chmod 参数：a（用户及组）、u(用户)、g(组)、0(其他用户)
chmod 运算符：+(加)、-(减)、=(赋予)&lt;/p&gt;
&lt;p&gt;chmod +x file.txt （用户、组、其他用户，加执行权）
chmod u+x file.txt （用户，加执行权）&lt;/p&gt;
&lt;h2 id=&#34;三linux-常用文件权限&#34;&gt;三、Linux 常用文件权限&lt;/h2&gt;
&lt;p&gt;777（读写执行、读写执行、读写执行）
755（读写执行、读执行、读执行）
644（读写、读、读）
400（读、禁止、禁止）&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian 5 安装配置笔记</title>
        <link>https://www.bg7pbp.com/p/debian-install-config/</link>
        <pubDate>Tue, 18 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/debian-install-config/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E5%9F%BA%E6%9C%AC%E7%B3%BB%E7%BB%9F&#34;&gt;一、安装基本系统&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cdebian-%E7%BD%91%E7%BB%9C%E8%AE%BE%E7%BD%AE&#34;&gt;二、Debian 网络设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21ip%E5%9C%B0%E5%9D%80%E8%AE%BE%E7%BD%AE&#34;&gt;2.1、IP地址设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8%E9%9D%99%E6%80%81ip&#34;&gt;使用静态IP&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8-dhcp-%E6%9C%8D%E5%8A%A1&#34;&gt;使用 DHCP 服务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22dns%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE&#34;&gt;2.2、DNS服务器设置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E9%87%8D%E5%90%AF%E7%BD%91%E7%BB%9C&#34;&gt;2.3、重启网络&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AE%BE%E7%BD%AE-apt-%E8%BD%AF%E4%BB%B6%E6%BA%90&#34;&gt;三、设置 APT 软件源&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31debian-%E5%AE%98%E6%96%B9%E6%BA%90&#34;&gt;3.1、Debian 官方源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E5%9B%BD%E5%86%85%E7%BD%91%E6%98%93%E6%BA%90&#34;&gt;3.2、国内网易源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E7%BE%8E%E5%9B%BD%E5%AE%98%E6%96%B9%E6%BA%90&#34;&gt;3.3、美国官方源&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E4%BD%BF%E7%94%A8apt-get%E8%BF%98%E6%98%AF-aptitude-&#34;&gt;四、使用apt-get还是 aptitude ?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%9C%A8-debian-%E4%BD%BF%E7%94%A8-sudo&#34;&gt;五、在 debian 使用 sudo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%ADdebian-%E4%B8%AD%E6%96%87%E8%AE%BE%E7%BD%AE&#34;&gt;六、Debian 中文设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#61%E9%85%8D%E7%BD%AE-local&#34;&gt;6.1、配置 Local&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#62%E5%85%B3%E4%BA%8Elocal%E9%BB%98%E8%AE%A4%E8%AF%AD%E8%A8%80%E9%80%89%E6%8B%A9&#34;&gt;6.2、关于Local默认语言选择&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#63%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE-zhcon&#34;&gt;6.3、安装配置 zhcon&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83debian-%E5%88%86%E8%BE%A8%E7%8E%87%E8%AE%BE%E7%BD%AE&#34;&gt;七、Debian 分辨率设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#71zhcon-%E5%88%86%E8%BE%A8%E7%8E%87&#34;&gt;7.1、zhcon 分辨率&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#72%E5%AD%97%E7%AC%A6%E7%BB%88%E7%AB%AF%E5%88%86%E8%BE%A8%E7%8E%87&#34;&gt;7.2、字符终端分辨率&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E6%A1%8C%E9%9D%A2%E7%8E%AF%E5%A2%83%E8%AE%BE%E7%BD%AE&#34;&gt;八、桌面环境设置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Debian 不是一种 Linux 发行版。Debian 是一个大的系统组织框架，平时所说的 Debian 是指 Debian GNU/Linux 。安装 Debian 过程与 Ubuntu 基本一致。不同的是如果你是首次安装，那么 Debian 字符终端中文显示乱码、方块的问题，则会让你相当恼火，这也将是本文重点。&lt;/p&gt;
&lt;h2 id=&#34;一安装基本系统&#34;&gt;一、安装基本系统&lt;/h2&gt;
&lt;p&gt;下载 debian-506-i386-DVD-1.iso，语言选可以中文，根据提示一路下一步，最后只安装标准系统，其他的都不要。&lt;/p&gt;
&lt;h2 id=&#34;二debian-网络设置&#34;&gt;二、Debian 网络设置&lt;/h2&gt;
&lt;p&gt;与 Ubuntu 相同，在安装 Debian 后，一般就已自动配置好了。&lt;/p&gt;
&lt;h3 id=&#34;21ip地址设置&#34;&gt;2.1、IP地址设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/network/interfaces&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;使用静态ip&#34;&gt;使用静态IP&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Theloopback network interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iface lo inet loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The primary network interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iface eth0 inet static   &lt;span class=&#34;c1&#34;&gt;#设置eth0为固定IP&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;address 192.168.1.101    &lt;span class=&#34;c1&#34;&gt;#ip地址&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;netmask 255.255.255.0    &lt;span class=&#34;c1&#34;&gt;#子网掩码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gateway 192.168.1.1      &lt;span class=&#34;c1&#34;&gt;#网关（ 重要）&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;使用-dhcp-服务&#34;&gt;使用 DHCP 服务&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# Theloopback network interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto lo
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iface lo inet loopback
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# The primary network interface&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;auto eth0
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;iface eth0 inet dhcp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22dns服务器设置&#34;&gt;2.2、DNS服务器设置&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/resolv.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nameserver 192.168.1.1   &lt;span class=&#34;c1&#34;&gt;#因为我这里网关就是DNS服务器所以是相同的&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23重启网络&#34;&gt;2.3、重启网络&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/etc/init.d/networking restart  &lt;span class=&#34;c1&#34;&gt;#重启&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ping baidu.com &lt;span class=&#34;c1&#34;&gt;#测试&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ctrl + c &lt;span class=&#34;c1&#34;&gt;#退出ping&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三设置-apt-软件源&#34;&gt;三、设置 APT 软件源&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /etc/apt/sources.list /etc/apt/sources.list.old
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/apt/sources.list
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get update&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;31debian-官方源&#34;&gt;3.1、Debian 官方源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://ftp.debian.org/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://ftp.debian.org/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://ftp.debian.org/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://ftp.debian.org/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://security.debian.org/ lenny/updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://security.debian.org/ lenny/updates main contrib non-free&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32国内网易源&#34;&gt;3.2、国内网易源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://mirrors.163.com/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://mirrors.163.com/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://mirrors.163.com/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://mirrors.163.com/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://security.debian.org/ lenny/updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://security.debian.org/ lenny/updates main contrib non-free&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33美国官方源&#34;&gt;3.3、美国官方源&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://http.us.debian.org/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://http.us.debian.org/debian/ lenny main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://http.us.debian.org/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://http.us.debian.org/debian/ lenny-proposed-updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb http://security.debian.org/ lenny/updates main contrib non-free
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;deb-src http://security.debian.org/ lenny/updates main contrib non-free&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四使用apt-get还是-aptitude-&#34;&gt;四、使用apt-get还是 aptitude ?&lt;/h2&gt;
&lt;p&gt;这涉及 &lt;a href=&#34;http://qref.sourceforge.net/Debian/quick-reference/ch-package.zh-cn.html&#34;&gt;Debian 软件包管理&lt;/a&gt; 的相关基础知识，建议使用aptitude，用法见 &lt;a href=&#34;http://linuxtoy.org/archives/aptitude_quick_reference.html&#34;&gt;aptitude 快速使用参考&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;建议在apttude选项中，取消“安装推荐软件”。&lt;/p&gt;
&lt;h2 id=&#34;五在-debian-使用-sudo&#34;&gt;五、在 debian 使用 sudo&lt;/h2&gt;
&lt;p&gt;如果不想 su 到 root 用户执行某些操作，那就将当前用户添加到 sudo 组吧。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install sudo &lt;span class=&#34;c1&#34;&gt;#安装sudo&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod +w /etc/sudoers &lt;span class=&#34;c1&#34;&gt;#获取配置文件写入权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/sudoers &lt;span class=&#34;c1&#34;&gt;#编辑配置文件&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;在 root &lt;span class=&#34;nv&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;ALL&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ALL 后添加一行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;用户名 &lt;span class=&#34;nv&#34;&gt;ALL&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=(&lt;/span&gt;ALL&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; ALL
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod -w /etc/sudoers &lt;span class=&#34;c1&#34;&gt;#改回权限&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;exit&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#退出root&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;六debian-中文设置&#34;&gt;六、Debian 中文设置&lt;/h2&gt;
&lt;p&gt;解决 Debian 字符终端中文乱码、方块问题，是我初次安装 debian 后第一个棘手问题。最后结论是：目前 Debian 无法解决该问题，必须安装 zhcon 工具来解决。&lt;/p&gt;
&lt;h3 id=&#34;61配置-local&#34;&gt;6.1、配置 Local&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install locales
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure locales&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;跳出一个文字选择界面（如果安装时选择中文，此时文字全是乱码），page up/dn 翻页、空格键选择以下编码&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;en_US.UTF-8 UTF-8
zh_CN.GBK GBK
zh_CN.GB2312
zh_CN.UTF-8 UTF-8&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;然后 Tab 鍵切换到 OK，最后默认语言选择 en_US.UTF-8
编辑 locale 文件，检查 lang 是否设置为 en_US.UTF-8 了，没有则修改。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/default/locale&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;62关于local默认语言选择&#34;&gt;6.2、关于Local默认语言选择&lt;/h3&gt;
&lt;p&gt;建议 Local 默认语言选择 en_US.UTF-8，&lt;/p&gt;
&lt;p&gt;选择 zh_CN.UTF-8 那么字符终端，会出现方块中文提示。选择 en_US.UTF-8 那么字符终端，全英文提示。选择 en_US.UTF-8 那么 Gnome 启动后也是英文（注：在 zhcon 中启动 gnome 是中文）。&lt;/p&gt;
&lt;h3 id=&#34;63安装配置-zhcon&#34;&gt;6.3、安装配置 zhcon&lt;/h3&gt;
&lt;p&gt;目前 Debian 不能解决字符终端中文显示问题，必须安装 zhcon 工具来解决。详细方法见：&lt;a href=&#34;http://www.debianedu.org/shells/tools/zhcon&#34;&gt;字符终端中文显示输入工具zhcon&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install zhcon &lt;span class=&#34;c1&#34;&gt;#安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zhcon --utf8 --drv&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;vga &lt;span class=&#34;c1&#34;&gt;#启动（ctrl + d 退出）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /root/.&lt;span class=&#34;s1&#34;&gt;&amp;#39;bash&amp;#39;&lt;/span&gt;rc
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;添加 &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;zhcon&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;zhcon --utf8 --drv=vga&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;特别提醒！进入 zhcon 必须以 root 身份，或者 sudo 获得权限，否则进入的 zhcon 是中文乱码提示，即便 local 设置为 en_US.UTF-8。&lt;/p&gt;
&lt;h2 id=&#34;七debian-分辨率设置&#34;&gt;七、Debian 分辨率设置&lt;/h2&gt;
&lt;h3 id=&#34;71zhcon-分辨率&#34;&gt;7.1、zhcon 分辨率&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/zhcon.conf 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;x_resolution&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;800&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;y_resolution&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;480&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;72字符终端分辨率&#34;&gt;7.2、字符终端分辨率&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /boot/grub/menu.lst&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在kernel条目后面加上vga=376（376表示800X480X32），&lt;a href=&#34;http://#&#34;&gt;更多数值&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;八桌面环境设置&#34;&gt;八、桌面环境设置&lt;/h2&gt;
&lt;p&gt;只安装基本的gnome，如果是将Debian做服务器，此步可省。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install x-window-system-core  &lt;span class=&#34;c1&#34;&gt;#安装基本图形界面&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude gnome-core gnome-themes &lt;span class=&#34;c1&#34;&gt;#安装GNOME核心及主题&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install xfonts-wqy &lt;span class=&#34;c1&#34;&gt;#文泉驿中文字体&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;startx &lt;span class=&#34;c1&#34;&gt;#启动X-Windows&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg-reconfigure xserver-xorg &lt;span class=&#34;c1&#34;&gt;#如果启动失败，重洗配置X-Window&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装必要的 Gnome 管理工具，详细说明见&lt;a href=&#34;http://www.debianedu.org/guide/desktop/gnome/custom-install-gnome&#34;&gt;《自定义安装GNOME桌面》&lt;/a&gt;（推荐阅读！）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude install file-roller gconf-editor  gnome-nettool gnome-network-admin gnome-power-manager gnome-screensaver gnome-system-monitor gnome-system-tools gnome-volume-manager&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;file-roller #归档管理器，各种压缩包的图形前端
gconf-editor #GConf配置编辑系统
gnome-nettool #网络程序工具
gnome-network-admin #网络管理工具
gnome-power-manager #电源管理器前端
gnome-screensaver #屏幕保护和锁定程序
gnome-system-monitor #系统资源监测/任务管理器
gnome-system-tools #系统管理工具
gnome-volume-manager #本地磁盘卷管理器&lt;/p&gt;
&lt;p&gt;（持续更新，未完待续&amp;hellip;&amp;hellip;）&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Linux 从二进制版安装 MySQL 5</title>
        <link>https://www.bg7pbp.com/p/mysql-install-binary/</link>
        <pubDate>Sun, 16 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/mysql-install-binary/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11mysql%E7%89%88%E6%9C%AC%E4%BB%8B%E7%BB%8D&#34;&gt;1.1、MySQL版本介绍&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12%E4%B8%8B%E8%BD%BD%E4%BA%8C%E8%BF%9B%E5%88%B6%E5%88%86%E5%8F%91%E7%89%88&#34;&gt;1.2、下载二进制分发版&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cmysql%E5%AE%89%E8%A3%85%E8%BF%87%E7%A8%8B&#34;&gt;二、MySQL安装过程&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E6%B7%BB%E5%8A%A0%E7%94%A8%E6%88%B7%E5%92%8C%E7%BB%84&#34;&gt;2.1、添加用户和组&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E8%A7%A3%E5%8E%8B%E5%88%B0%E6%8C%87%E5%AE%9A%E7%9B%AE%E5%BD%95&#34;&gt;2.2、解压到指定目录&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%B1%8F%E8%94%BD%E6%97%A7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6-%E5%A6%82%E6%9E%9C%E6%9C%89&#34;&gt;2.3、屏蔽旧配置文件 (如果有)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E6%9B%B4%E6%94%B9%E6%9D%83%E9%99%90&#34;&gt;2.4、更改权限&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E5%88%9D%E5%A7%8B%E5%8C%96%E6%8E%88%E6%9D%83%E8%A1%A8&#34;&gt;2.5、初始化授权表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26%E6%9B%B4%E6%94%B9%E6%95%B0%E6%8D%AE%E7%9B%AE%E5%BD%95%E6%9D%83%E9%99%90&#34;&gt;2.6、更改数据目录权限&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#27%E5%A4%8D%E5%88%B6%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.7、复制配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#28%E5%BB%BA%E7%AB%8B%E8%BD%AF%E9%93%BE%E6%8E%A5&#34;&gt;2.8、建立软链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#29%E5%90%AF%E5%8A%A8mysql%E6%9C%8D%E5%8A%A1&#34;&gt;2.9、启动MySQL服务&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85%E5%90%8E%E6%B5%8B%E8%AF%95%E4%B8%8E%E5%90%AF%E5%8A%A8&#34;&gt;三、安装后测试与启动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#31%E6%A3%80%E6%9F%A5mysql%E6%9C%8D%E5%8A%A1&#34;&gt;3.1、检查MySQL服务&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#32%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%E5%92%8C%E5%81%9C%E6%AD%A2mysql&#34;&gt;3.2、自动启动和停止MySQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E5%90%AF%E5%8A%A8%E5%81%9C%E6%AD%A2%E9%87%8D%E5%90%AF&#34;&gt;3.3、启动、停止、重启&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#331mysql-%E5%90%AF%E5%8A%A8%E6%96%B9%E6%B3%95&#34;&gt;3.3.1、MySQL 启动方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#332mysql-%E5%81%9C%E6%AD%A2%E6%96%B9%E6%B3%95&#34;&gt;3.3.2、MySQL 停止方法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#333mysql-%E9%87%8D%E5%90%AF%E6%96%B9%E6%B3%95&#34;&gt;3.3.3、MySQL 重启方法&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bmysql%E8%B4%A6%E6%88%B7%E5%AE%89%E5%85%A8%E8%AE%BE%E7%BD%AE&#34;&gt;四、MySQL账户安全设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E6%A3%80%E6%B5%8Bmysql%E8%B4%A6%E6%88%B7%E6%83%85%E5%86%B5&#34;&gt;4.1、检测MySQL账户情况&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E8%AE%BE%E7%BD%AEroot%E8%B4%A6%E6%88%B7%E5%AF%86%E7%A0%81&#34;&gt;4.2、设置root账户密码&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#421%E4%BD%BF%E7%94%A8mysqladmin%E8%AE%BE%E7%BD%AE%E5%AF%86%E7%A0%81&#34;&gt;4.2.1、使用mysqladmin设置密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#422%E4%BD%BF%E7%94%A8set-password%E8%AE%BE%E7%BD%AE%E5%AF%86%E7%A0%81%E6%8E%A8%E8%8D%90&#34;&gt;4.2.2、使用SET PASSWORD设置密码（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43%E5%88%A0%E9%99%A4%E5%8C%BF%E5%90%8D%E5%B8%90%E6%88%B7&#34;&gt;4.3、删除匿名帐户&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94mysql-%E7%9B%B8%E5%85%B3%E8%AE%BE%E7%BD%AE&#34;&gt;五、MySQL 相关设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51mysql%E5%AD%97%E7%AC%A6%E9%9B%86&#34;&gt;5.1、MySQL字符集&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E7%BB%93%E8%AF%AD&#34;&gt;六、结语&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;MySQL、Sql Server、Oracle是三大主流数据库，MySQL也是LAMP安装配置中难度较大的，详细使用指南见英文官方手册&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/en/index.html&#34;&gt;《MySQL 5.1 Reference Ma较nual》&lt;/a&gt;，选择二进制分发版，可以避免很多错误的出现，性能方面也比自己源码编译要强。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;h3 id=&#34;11mysql版本介绍&#34;&gt;1.1、MySQL版本介绍&lt;/h3&gt;
&lt;p&gt;MySQL 官方放出的版本比较多，但没有针对 ubuntu 的版本，所以只能选择二进制分发版和源码分发版，前者已经编译并经过优化了，后者没有。&lt;/p&gt;
&lt;p&gt;MySQL 二进制分发版的文件名格式为 mysql-VERSION-OS.tar.gz，其中 VERSION 是版本号(例如，5.1.51)，OS表示分发版安装的操作系统类型(例如，linux-i686)。&lt;/p&gt;
&lt;h3 id=&#34;12下载二进制分发版&#34;&gt;1.2、下载二进制分发版&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;系统环境：Ubuntu 10.10&lt;/li&gt;
&lt;li&gt;下载地址：http://dev.mysql.com/downloads/&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://mirror.csclub.uwaterloo.ca/mysql/Downloads/MySQL-5.1/mysql-5.1.53-linux-i686-glibc23.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二mysql安装过程&#34;&gt;二、MySQL安装过程&lt;/h2&gt;
&lt;h3 id=&#34;21添加用户和组&#34;&gt;2.1、添加用户和组&lt;/h3&gt;
&lt;p&gt;创建mysql组和mysql用户，该用户只需要在系统中存在，不需要登录，所以添加了 -r 选项。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -r -g mysql mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22解压到指定目录&#34;&gt;2.2、解压到指定目录&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mysql-5.1.53-linux-i686-glibc23.tar.gz -C /usr/local/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /usr/local/mysql-5.1.53-linux-i686-glibc23 /usr/local/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23屏蔽旧配置文件-如果有&#34;&gt;2.3、屏蔽旧配置文件 (如果有)&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24更改权限&#34;&gt;2.4、更改权限&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R mysql .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chgrp -R mysql .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;25初始化授权表&#34;&gt;2.5、初始化授权表&lt;/h3&gt;
&lt;p&gt;安装MySQL之前，必须创建 MySQL 数据目录和初始化授权表，授权表定义了初始 MySQL 用户账户和访问权限。（&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/installing.html#mysql-install-db&#34;&gt;了解更多&lt;/a&gt;）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scripts/mysql_install_db --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这一步可能出现很多错误，当出现错误后，删除date数据目录，重新再来，直到出现如下图提示。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://img.cdn.wangyan.cloud/m/mysql-install-db.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/m/mysql-install-db.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;26更改数据目录权限&#34;&gt;2.6、更改数据目录权限&lt;/h3&gt;
&lt;p&gt;初始化授权表后会产生 date 目录，该目录所有者必须改为 mysql。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R root .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown -R mysql data&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;27复制配置文件&#34;&gt;2.7、复制配置文件&lt;/h3&gt;
&lt;p&gt;如果你不复制，MySQL 服务器将使用默认设置。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir /etc/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp support-files/my-medium.cnf /etc/mysql/my.cnf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;28建立软链接&#34;&gt;2.8、建立软链接&lt;/h3&gt;
&lt;p&gt;将 &amp;ldquo;/usr/local/mysql/bin&amp;rdquo; 路径加入系统变量中，即直接编辑/etc/environment文件，或者新建软链接。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/mysql/bin/mysqld_safe /usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/mysql/bin/mysqladmin /usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/mysql/bin/mysql /usr/local/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;29启动mysql服务&#34;&gt;2.9、启动MySQL服务&lt;/h3&gt;
&lt;p&gt;mysqld_safe 是用来启动MySQL服务的，它比 mysqld 多了一些安全特性（&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#mysqld-safe&#34;&gt;关于mysqld_safe&lt;/a&gt;），mysqld_safe 的许多选项与mysqld的相同（&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#server-options&#34;&gt;关于 mysqld 命令行选项&lt;/a&gt;）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysqld_safe --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysql &lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;注意：user参数和&amp;amp;符号必不可少，如果出现问题，见&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/installing.html#starting-server&#34;&gt;启动故障诊断和排除&lt;/a&gt;，直到如下图所示。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;http://img.cdn.wangyan.cloud/m/mysqld_safe.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/m/mysqld_safe.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三安装后测试与启动&#34;&gt;三、安装后测试与启动&lt;/h2&gt;
&lt;h2 id=&#34;31检查mysql服务&#34;&gt;3.1、检查MySQL服务&lt;/h2&gt;
&lt;p&gt;首先确保MySQL服务已启动，方法见上面第二8条，能否成功启动关键在于mysql_install_db初始化授权表是否顺利，然后使用mysqladmin来验证MySQL服务。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysqladmin version //检查服务器版本
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysqlshow //列出所有数据库
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysqlshow mysql //列出mysql数据库中的所有表&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Ubuntu 中还可以使用检查进程的方法，查看MySQL是否启动&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps -A &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep mysql //查看mysql是否已经后台运行
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;kill&lt;/span&gt; -9 进程号 //强制杀死进程&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32自动启动和停止mysql&#34;&gt;3.2、自动启动和停止MySQL&lt;/h3&gt;
&lt;p&gt;关于Ubuntu自动启动见&lt;a href=&#34;http://www.wangyan.cloud/ubuntu-update-rc-d&#34;&gt;《Ubuntu系统update-rc.d命令详解》&lt;/a&gt;，官方文档见&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/installing.html#automatic-start&#34;&gt;自动启动和停止 MySQL&lt;/a&gt;。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp support-files/mysql.server /etc/init.d/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d mysql defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;33启动停止重启&#34;&gt;3.3、启动、停止、重启&lt;/h2&gt;
&lt;h3 id=&#34;331mysql-启动方法&#34;&gt;3.3.1、MySQL 启动方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 service 启动：service mysql start&lt;/li&gt;
&lt;li&gt;使用 mysqld 脚本启动：/etc/init.d/mysql start&lt;/li&gt;
&lt;li&gt;使用 safe_mysqld 启动：/usr/local/mysql/bin/mysqld_safe &amp;ndash;user=mysql &amp;amp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;332mysql-停止方法&#34;&gt;3.3.2、MySQL 停止方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 service 停止：service mysql stop&lt;/li&gt;
&lt;li&gt;使用 mysqld 脚本停止：/etc/init.d/mysql stop&lt;/li&gt;
&lt;li&gt;使用 mysqladmin 停止：/usr/local/mysql/bin/mysqladmin -u root -p shutdown&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;333mysql-重启方法&#34;&gt;3.3.3、MySQL 重启方法&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;使用 service 重启：service mysql restart&lt;/li&gt;
&lt;li&gt;使用 mysqld 脚本停止：/etc/init.d/mysql restart&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;四mysql账户安全设置&#34;&gt;四、MySQL账户安全设置&lt;/h2&gt;
&lt;p&gt;官方文档见 &lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/en/default-privileges.html&#34;&gt;Securing the Initial MySQL Accounts&lt;/a&gt;（&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/installing.html#default-privileges&#34;&gt;使初始MySQL账户安全&lt;/a&gt;），简单来说就是修改匿名账户密码或者删除，设置root账户密码。&lt;/p&gt;
&lt;h3 id=&#34;41检测mysql账户情况&#34;&gt;4.1、检测MySQL账户情况&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt;SELECT User, Host, Password FROM mysql.user&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a href=&#34;http://img.cdn.wangyan.cloud/m/mysql-default-privileges.png&#34;&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/m/mysql-default-privileges.png&#34; alt=&#34;&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;42设置root账户密码&#34;&gt;4.2、设置root账户密码&lt;/h3&gt;
&lt;p&gt;方法有三种，分别是：使用SET PASSWORD语句、使用UPDATE语句、使用mysqladmin命令行客户端程序。建议使用SET PASSWORD语句，因为mysqladmin虽然简单，但是是只能为localhost主机设置密码。&lt;/p&gt;
&lt;h4 id=&#34;421使用mysqladmin设置密码&#34;&gt;4.2.1、使用mysqladmin设置密码&lt;/h4&gt;
&lt;p&gt;格式：mysqladmin -u 用户名 -p  password 新密码注：因为开始时root没有密码，所以-p一项就可以省略了。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysqladmin -u root -p password &lt;span class=&#34;s2&#34;&gt;&amp;#34;123456&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;422使用set-password设置密码推荐&#34;&gt;4.2.2、使用SET PASSWORD设置密码（推荐）&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt; SET PASSWORD FOR &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt; SET PASSWORD FOR &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;127.0.0.1&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt; SET PASSWORD FOR &lt;span class=&#34;s1&#34;&gt;&amp;#39;root&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;ubuntu&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; PASSWORD&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;123456&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; //ubuntu换为你的主机名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;[&lt;img src=&#34;http://img.cdn.wangyan.cloud/m/mysql-set-password.png&#34; alt=&#34;&#34;&gt;](&lt;a href=&#34;http://img.cdn.wangyan.cloud/m/mysql-set&#34;&gt;http://img.cdn.wangyan.cloud/m/mysql-set&lt;/a&gt; password.png)&lt;/p&gt;
&lt;h3 id=&#34;43删除匿名帐户&#34;&gt;4.3、删除匿名帐户&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/mysql/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;bin/mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt; DROP USER &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt; DROP USER &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;@&lt;span class=&#34;s1&#34;&gt;&amp;#39;ubuntu&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; //ubuntu换为你的主机名&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五mysql-相关设置&#34;&gt;五、MySQL 相关设置&lt;/h2&gt;
&lt;h3 id=&#34;51mysql字符集&#34;&gt;5.1、MySQL字符集&lt;/h3&gt;
&lt;p&gt;MySQL二进制分发版用&amp;quot;&amp;ndash;with-extra-charsets=complex&amp;quot;编译而成，因此可以处理latin1和所有多字节二进制字符集，所以一般不需要强制客户端或服务端使用专用字符集。（中文手册：&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html#character-sets&#34;&gt;MySQL本地化和国际应用&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;查看MySQL当前字符集&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql -u root -p
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mysql&amp;gt;show variables like &lt;span class=&#34;s1&#34;&gt;&amp;#39;char%&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;设置client和mysqld默认字符集&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/mysql/my.cnf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;在&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;client&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;和&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mysql&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;后面添加
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;default-character-set&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;utf8&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;重启mysql&lt;/p&gt;
&lt;h2 id=&#34;六结语&#34;&gt;六、结语&lt;/h2&gt;
&lt;p&gt;结束了&amp;hellip;被折腾了一整天，最大的感悟是：学习MySQL，神马Google搜索、百度一下都是浮云，最好得老师是英文官方手册&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/en/index.html&#34;&gt;《MySQL 5.1 Reference Manual》&lt;/a&gt;（&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.1/zh/index.html&#34;&gt;中文版（较旧）&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;==&lt;strong&gt;补充内容：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、补充了3.3（启动、停止、重启），5.1（MySQL字符集）【2010.11.23】&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Apache 添加 OpenSSL 支持</title>
        <link>https://www.bg7pbp.com/p/apache-ssl-configuration/</link>
        <pubDate>Sat, 15 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/apache-ssl-configuration/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80-%E5%8A%A0%E8%BD%BD-apache-ssl-%E6%A8%A1%E5%9D%97&#34;&gt;一、 加载 Apache SSL 模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%BE%91-apache-ssl-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;二、编辑 Apache SSL 配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89firefox-%E6%B5%8F%E8%A7%88%E5%99%A8%E8%AE%BE%E7%BD%AE&#34;&gt;三、Firefox 浏览器设置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E5%AF%BC%E5%85%A5ca%E6%A0%B9%E8%AF%81%E4%B9%A6&#34;&gt;4.1、导入CA根证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E5%AF%BC%E5%85%A5%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;4.2、导入服务器证书&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果前面的 &lt;a href=&#34;http://www.wangyan.cloud/ubuntu-ssl-install&#34;&gt;OpenSSL 安装&lt;/a&gt;、&lt;a href=&#34;http://www.wangyan.cloud/linux-ssl-certificate&#34;&gt;OpenSSL 证书生成&lt;/a&gt;、 &lt;a href=&#34;http://www.wangyan.cloud/vps-apache-install-from-source&#34;&gt;Apache 2 编译安装&lt;/a&gt;，一切都顺利的话，那么为要网站添加 SSL 支持，就显得想当容易了。&lt;/p&gt;
&lt;h2 id=&#34;一-加载-apache-ssl-模块&#34;&gt;一、 加载 Apache SSL 模块&lt;/h2&gt;
&lt;p&gt;如果已经安装过 apache2.2 ，现在需要额外添加 SSL 支持，那么你需要重新编译安装一次 apache2。&lt;/p&gt;
&lt;p&gt;编辑 httpd.conf，分别查找下面2行代码，并去掉前面的#&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/apache/conf/httpd.conf 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule ssl_module modules/mod_ssl.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Include conf/extra/httpd-ssl.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二编辑-apache-ssl-配置文件&#34;&gt;二、编辑 Apache SSL 配置文件&lt;/h2&gt;
&lt;p&gt;这只是一个最简单的配置文件，更多知识见&lt;a href=&#34;http://wangyan.org/docs/apache/ssl/index.html&#34;&gt;《Apache的SSL/TLS加密》&lt;/a&gt;、&lt;a href=&#34;http://www.sanzui.com/article/html/other/it/sanzui/1048.html&#34;&gt;《ssl.conf配置文件简要说明》&lt;/a&gt;、&lt;a href=&#34;http://lamp.linux.gov.cn/OpenSSL/OpenSSL_install_config.html&#34;&gt;《OpenSSL安装与配置指南》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/apache/conf/extra/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv httpd-ssl.conf httpd-ssl.conf.bak &lt;span class=&#34;c1&#34;&gt;#备份&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim httpd-ssl.conf &lt;span class=&#34;c1&#34;&gt;#编辑，填入下面内容。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Listen &lt;span class=&#34;m&#34;&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;VirtualHost *:443&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerAdmin you@example.com
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DocumentRoot &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/htdocs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerName wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ErrorLog &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/logs/error_log&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SSLEngine on
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SSLCertificateFile &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/conf/ssl.crt&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;SSLCertificateKeyFile &lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/apache/conf/ssl.key&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三firefox-浏览器设置&#34;&gt;三、Firefox 浏览器设置&lt;/h2&gt;
&lt;p&gt;因为服务器证书是自建CA自签署的，所以浏览器会出现警告，比如Firefox警告“此连接是不受信任的”。&lt;/p&gt;
&lt;h3 id=&#34;41导入ca根证书&#34;&gt;4.1、导入CA根证书&lt;/h3&gt;
&lt;p&gt;Firefox，编辑&amp;ndash;首选项&amp;ndash;高级&amp;ndash;加密&amp;ndash;证书机构&amp;ndash;导入位于 /usr/local/ssl/demoCA/ucacert.pem&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/l/lamp-ssl_4.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/l/lamp-ssl_5.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;42导入服务器证书&#34;&gt;4.2、导入服务器证书&lt;/h3&gt;
&lt;p&gt;服务器选项卡，先导入/usr/local/ssl/demoCA/certs，然后编辑权限。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/l/lamp-ssl_6.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;http://img.cdn.wangyan.cloud/l/lamp-ssl_7.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 从源码编译安装 Apache 2</title>
        <link>https://www.bg7pbp.com/p/apache-install-source/</link>
        <pubDate>Fri, 14 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/apache-install-source/</guid>
        <description>&lt;p&gt;在六大Web服务器软件，&lt;a href=&#34;http://httpd.apache.org/&#34;&gt;Apache&lt;/a&gt;、&lt;a href=&#34;http://www.iis.net/&#34;&gt;IIS&lt;/a&gt;、&lt;a href=&#34;http://www.lighttpd.net/&#34;&gt;Lighttpd&lt;/a&gt;、&lt;a href=&#34;http://nginx.org/&#34;&gt;Nginx&lt;/a&gt;、&lt;a href=&#34;http://www.litespeed.com&#34;&gt;LiteSpeed&lt;/a&gt;、&lt;a href=&#34;http://www.zeus.com/&#34;&gt;Zeus&lt;/a&gt;中，Apache 的世界使用量排名始终位居榜首，并且Apache 安装简单，参考资料众多，所以绝对是Web 服务器软件的首选。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;p&gt;系统版本：Ubuntu-10.10-Server-I386&lt;/p&gt;
&lt;h3 id=&#34;11安装基础编译环境&#34;&gt;1.1、安装基础编译环境&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;aptitude  install build-essential&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;12编译安装-zlib-库&#34;&gt;1.2、编译安装 Zlib 库&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;wget http://zlib.net/zlib-1.2.5.tar.gz
tar -zxf zlib-1.2.5.tar.gz
cd zlib-1.2.5/
./configure --prefix=/usr/local
make &amp;amp;&amp;amp; make install&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;13安装-openssl-可选&#34;&gt;1.3、安装 OpenSSL （可选）&lt;/h3&gt;
&lt;p&gt;详细安装见 &lt;a href=&#34;http://www.wangyan.cloud/ubuntu-ssl-install&#34;&gt;《Linux 从源码编译安装 OpenSSL》&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;二编译安装-apache22&#34;&gt;二、编译安装 Apache2.2&lt;/h2&gt;
&lt;p&gt;这是 apache2.2 安装最大的难点，详细说明见 apache2.2 中文文档&lt;a href=&#34;http://wangyan.org/docs/apache/programs/configure.html&#34;&gt;配置源代码树&lt;/a&gt;部分，其中&lt;a href=&#34;http://wangyan.org/docs/apache/programs/configure.html#modoptions&#34;&gt;关于模块选项&lt;/a&gt;。&lt;/p&gt;
&lt;h3 id=&#34;我的选择-推荐&#34;&gt;我的选择 （推荐）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.apache.org/dist/httpd/httpd-2.2.17.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf httpd-2.2.17.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; httpd-2.2.17/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure  --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/apache --enable-mods-shared&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;most --enable-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;shared --with-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;使用模块有两种方法：一是静态连接进核心，二是作为DSO模块动态加载&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-mods-shared&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;most 动态加载大部分模块
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;shared 动态加载 mod-ssl 模块
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;static 静态加载 mod-ssl 模块&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;另一种选择&#34;&gt;另一种选择&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure  --enable-so --enable-rewrite --enable-ssl --with-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;上面意思是将 mod_so 和 mo_rewrite、ssl 模块静态编译进 apache（还可以添加更多模块），mod_so 作用是允许 apache 以后运行时作为 DSO 模块动态加载，等同于 &amp;ndash;enable-modules=so&lt;/p&gt;
&lt;h2 id=&#34;三启动apache服务器&#34;&gt;三、启动Apache服务器&lt;/h2&gt;
&lt;p&gt;两种方法，可以使用 apachectl 或者 httpd 皆可。简单说 apachectl 是控制器，可以开、关、重启 apache ，是启动脚本。httpd 是后台守护进程，是apache的主程序。因此apachectl中必须指明httpd路径。（&lt;a href=&#34;http://wangyan.org/docs/apache2.2/programs/apachectl.html&#34;&gt;更多介绍&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;将apachectl加入系统变量中，即直接编辑/etc/environment文件，或者新建软链接。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/apache/bin/apachectl /usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/apache/bin/httpd /usr/local/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apachectl -k start
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apachectl -k stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apachectl -k restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四开机自动启动-apache&#34;&gt;四、开机自动启动 Apache&lt;/h2&gt;
&lt;p&gt;这里首先要清楚什么是运行级别，详细介绍见&lt;a href=&#34;http://www.wangyan.cloud/ubuntu-update-rc-d&#34;&gt;《Ubuntu系统update-rc.d命令详解》&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;方法一推荐&#34;&gt;方法一（推荐）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s /usr/local/apache/bin/apachectl /etc/init.d/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d apachectl defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;方法二-图形界面&#34;&gt;方法二 （图形界面）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo install sysv-rc-conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo sysv-rc-conf //找到apachectl 将其2，3，4，5都选中&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五其他&#34;&gt;五、其他&lt;/h2&gt;
&lt;h3 id=&#34;51apache-升级&#34;&gt;5.1、Apache 升级&lt;/h3&gt;
&lt;p&gt;除非有大的版本号变动，否则可按原编译选项重新编译安装即可。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure  --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/apache --enable-mods-shared&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;most --enable-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;shared --with-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apachectl -k graceful-stop
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apachectl -k start&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52apache-配置&#34;&gt;5.2、Apache 配置&lt;/h3&gt;
&lt;p&gt;详细 Apache2.2 配置见&lt;a href=&#34;http://www.wangyan.cloud/install-php-from-source.html&#34;&gt;《Linux 从源码编译安装及配置 PHP 5》&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 从源码编译安装 PHP 5</title>
        <link>https://www.bg7pbp.com/p/php-install-from-source/</link>
        <pubDate>Thu, 13 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-install-from-source/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-gd&#34;&gt;二、编译安装 GD&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-zlib&#34;&gt;2.1、编译安装 Zlib&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-png&#34;&gt;2.2、编译安装 PNG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-jpeg&#34;&gt;2.3、编译安装 JPEG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-libiconv&#34;&gt;2.4、编译安装 Libiconv&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-freetype&#34;&gt;2.5、编译安装 FreeType&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-gd&#34;&gt;2.6、编译安装 GD&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-php-5&#34;&gt;三、编译安装 PHP 5&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-libxml&#34;&gt;3.1、编译安装 LibXML&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-mhash&#34;&gt;3.2、编译安装 Mhash&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-libmcrypt--mcrypt&#34;&gt;3.3、编译安装 LibMcrypt &amp;amp; Mcrypt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34%E5%AE%89%E8%A3%85%E7%BC%96%E8%AF%91-curl&#34;&gt;3.4、安装编译 Curl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#35%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-php533&#34;&gt;3.5、编译安装 php5.3.3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%B0%86apache%E4%B8%8Ephp5%E7%9B%B8%E7%BB%93%E5%90%88&#34;&gt;四、将Apache与PHP5相结合&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E8%AE%BE%E7%BD%AEphp%E6%96%87%E4%BB%B6%E5%90%8E%E7%BC%80&#34;&gt;4.1、设置php文件后缀&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E8%AE%BE%E7%BD%AEapache%E7%9A%84%E9%BB%98%E8%AE%A4%E6%96%87%E4%BB%B6%E5%90%8D%E6%AC%A1%E5%BA%8F&#34;&gt;4.2、设置apache的默认文件名次序&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43%E5%BC%80%E5%90%AFapache-rewrite-%E6%A8%A1%E5%9D%97&#34;&gt;4.3、开启Apache Rewrite 模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44%E5%85%B3%E9%97%AD%E9%9D%9E%E5%BF%85%E9%A1%BB%E7%9A%84apache%E6%A8%A1%E5%9D%97&#34;&gt;4.4、关闭非必须的Apache模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#45%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-zendoptimizer&#34;&gt;4.5、编译安装 ZendOptimizer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#46%E9%87%8D%E5%90%AFapache%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;4.6、重启Apache服务器&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E6%B7%BB%E5%8A%A0-php5-%E6%89%A9%E5%B1%95&#34;&gt;五、添加 php5 扩展&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85memcache%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AB%AF-%E5%8F%AF%E9%80%89&#34;&gt;4.1、编译安装Memcache服务器端 (可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85memcache%E7%9A%84php%E6%89%A9%E5%B1%95&#34;&gt;4.2、编译安装Memcache的PHP扩展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43%E4%BF%AE%E6%94%B9phpini%E6%96%87%E4%BB%B6&#34;&gt;4.3、修改php.ini文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-eaccelerator&#34;&gt;4.3、编译安装 eaccelerator&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%AE%89%E8%A3%85-phpmyadmin&#34;&gt;五、安装 phpmyadmin&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51%E5%AE%89%E8%A3%85-phpmyadmin-338&#34;&gt;5.1、安装 phpMyAdmin-3.3.8&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52%E6%BF%80%E6%B4%BB%E9%93%BE%E6%8E%A5%E8%A1%A8%E7%9A%84%E9%99%84%E5%8A%A0%E5%8A%9F%E8%83%BD&#34;&gt;5.2、激活链接表的附加功能&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E8%AE%BE%E7%BD%AE%E7%9F%AD%E8%AF%AD%E5%AF%86%E7%A0%81&#34;&gt;5.3、配置文件设置短语密码&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E7%BB%93%E8%AF%AD&#34;&gt;五、结语&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PHP 是一种在服务器端执行的脚本语言，主要用来制作动态网页以提供浏览器读取，但也可以用来开发命令行脚本程序和用户端的GUI应用程序。PHP 可以在许多的不同种的服务器、操作系统、平台上运行，也可以和许多数据库系统结合。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;p&gt;系统版本：Ubuntu-10.10-Server-I386&lt;/p&gt;
&lt;p&gt;OpenSSL 版本：openssl-1.0.0c （&lt;a href=&#34;http://www.wangyan.cloud/ubuntu-ssl-install&#34;&gt;安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;OpenSSH 版本：openssh-5.6p1 （&lt;a href=&#34;http://www.wangyan.cloud/ubuntu-ssl-ssh&#34;&gt;安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;Apache 版本：httpd-2.2.17 （&lt;a href=&#34;http://www.wangyan.cloud/vps-apache-install-from-source&#34;&gt;安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;MySQL 5 版本：mysql-5.1.53-linux-i686-glibc23 （&lt;a href=&#34;http://www.wangyan.cloud/vps-mysql-from-binaries&#34;&gt;安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;h2 id=&#34;二编译安装-gd&#34;&gt;二、编译安装 GD&lt;/h2&gt;
&lt;p&gt;GD不是必须的，如果要安装GD，那么 jpeg 库，png 库，zlib 库则是必须的，其余的选择安装。&lt;/p&gt;
&lt;h3 id=&#34;21编译安装-zlib&#34;&gt;2.1、编译安装 Zlib&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://zlib.net/zlib-1.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf zlib-1.2.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; zlib-1.2.5/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22编译安装-png&#34;&gt;2.2、编译安装 PNG&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://ftp.simplesystems.org/pub/libpng/png/src/libpng-1.4.4.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libpng-1.4.4.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libpng-1.4.4/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23编译安装-jpeg&#34;&gt;2.3、编译安装 JPEG&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.ijg.org/files/jpegsrc.v8b.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf jpegsrc.v8b.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; jpeg-8b/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24编译安装-libiconv&#34;&gt;2.4、编译安装 Libiconv&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.13.1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libiconv-1.13.1.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libiconv-1.13.1/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;25编译安装-freetype&#34;&gt;2.5、编译安装 FreeType&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/freetype/freetype2/2.4.3/freetype-2.4.3.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -jxf freetype-2.4.3.tar.bz2 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; freetype-2.4.3/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;26编译安装-gd&#34;&gt;2.6、编译安装 GD&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.libgd.org/releases/gd-2.0.36RC1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf gd-2.0.36RC1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; gd-2.0.36RC1/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-libiconv-prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-png&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-freetype&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-jpeg&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三编译安装-php-5&#34;&gt;三、编译安装 PHP 5&lt;/h2&gt;
&lt;h3 id=&#34;31编译安装-libxml&#34;&gt;3.1、编译安装 LibXML&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://xmlsoft.org/sources/libxml2-2.7.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libxml2-2.7.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libxml2-2.7.8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32编译安装-mhash&#34;&gt;3.2、编译安装 Mhash&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/mhash/mhash/0.9.9.9/mhash-0.9.9.9.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -jxf mhash-0.9.9.9.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mhash-0.9.9.9/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33编译安装-libmcrypt--mcrypt&#34;&gt;3.3、编译安装 LibMcrypt &amp;amp; Mcrypt&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libmcrypt-2.5.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libmcrypt-2.5.8/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果要编译安装 Mcrypt，那么必须先安装 Mhash 和 LibMcrypt，否则会报错。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/mcrypt/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf mcrypt-2.6.8.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mcrypt-2.6.8/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s   /usr/local/bin/libmcrypt-config   /usr/local/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/lib ./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;编译安装 Mcrypt，配置时切勿遗漏了在环境变量 LD_LIBRARY_PATH 中指明库的搜索路径 ，或者按一下方法在 /etc/ld.so.conf 动态链接库文件中添加库的搜索路径。（&lt;a href=&#34;http://blog.csdn.net/zwhfyy/archive/2009/03/09/3971350.aspx&#34;&gt;资料1&lt;/a&gt;、&lt;a href=&#34;http://hi.baidu.com/ever__love/blog/item/62473a97ed1aa145d1135eba.html&#34;&gt;资料2&lt;/a&gt;）。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#编辑，添加共享库路径。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/ld.so.conf 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;添加一行：/usr/local/lib
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ldconfig //更新ld.so.cache&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34安装编译-curl&#34;&gt;3.4、安装编译 Curl&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.libssh2.org/download/libssh2-1.2.7.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libssh2-1.2.7.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libssh2-1.2.7/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://curl.haxx.se/download/curl-7.21.2.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf curl-7.21.2.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; curl-7.21.2/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-ssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl --with-libssh2&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;35编译安装-php533&#34;&gt;3.5、编译安装 php5.3.3&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://cn.php.net/distributions/php-5.3.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf php-5.3.3.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; php-5.3.3/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-apxs2&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/apache/bin/apxs &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-mysqli&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mysql/bin/mysql_config &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-jpeg-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-png-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-zlib-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-freetype-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-iconv-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-gd-native-ttf &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-gd-jis-conv &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-gd&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-libxml-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-mhash&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-mcrypt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-openssl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-curl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--with-curlwrappers &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-bcmath &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-wddx &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-calendar &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-mbstring &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-ftp &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-zip &lt;span class=&#34;se&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-sockets
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四将apache与php5相结合&#34;&gt;四、将Apache与PHP5相结合&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp php.ini-production /usr/local/php/lib/php.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/apache/conf/httpd.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;41设置php文件后缀&#34;&gt;4.1、设置php文件后缀&lt;/h3&gt;
&lt;p&gt;查找&amp;quot;AddType application/x-gzip .gz .tgz&amp;quot;，在下面添加：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;AddType application/x-httpd-php .php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42设置apache的默认文件名次序&#34;&gt;4.2、设置apache的默认文件名次序&lt;/h3&gt;
&lt;p&gt;查找&amp;quot;index.html&amp;quot;，后面添加“index.php”&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;index.htm index.html  index.php &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43开启apache-rewrite-模块&#34;&gt;4.3、开启Apache Rewrite 模块&lt;/h3&gt;
&lt;p&gt;查找&amp;quot;Options FileInfo&amp;quot; 将&amp;quot;AllowOverride none&amp;quot;
改为 &amp;ldquo;AllowOverride all&amp;rdquo; //&lt;/p&gt;
&lt;h3 id=&#34;44关闭非必须的apache模块&#34;&gt;4.4、关闭非必须的Apache模块&lt;/h3&gt;
&lt;p&gt;因为前期我将所有模块都编译了，所以现在要关闭暂不需要的模块以节省资源。必须开启的模块如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule authz_host_module modules/mod_authz_host.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule mime_module modules/mod_mime.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule autoindex_module modules/mod_autoindex.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule dir_module modules/mod_dir.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule alias_module modules/mod_alias.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule rewrite_module modules/mod_rewrite.so
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;LoadModule php5_module        modules/libphp5.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;45编译安装-zendoptimizer&#34;&gt;4.5、编译安装 ZendOptimizer&lt;/h3&gt;
&lt;p&gt;官方说明最新版的ZendOptimizer-3.3.9只适用于php5.2，不过你用在php5.3倒也不至于出错。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://downloads.zend.com/optimizer/3.3.9/ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp ZendOptimizer.so /usr/local/lib&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/php/lib/php.ini
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;ZendOptimizer&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;zend_optimizer.optimization_level&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;15&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;zend_extension&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/lib/ZendOptimizer.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;46重启apache服务器&#34;&gt;4.6、重启Apache服务器&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;httpd -k restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五添加-php5-扩展&#34;&gt;五、添加 php5 扩展&lt;/h2&gt;
&lt;p&gt;服务器运行一段时间后，可能需求额外添加某个扩展，这就需要在不重新编译PHP的情况下独立添加扩展。下面以Memcache为例说明。&lt;/p&gt;
&lt;h3 id=&#34;41编译安装memcache服务器端-可选&#34;&gt;4.1、编译安装Memcache服务器端 (可选）&lt;/h3&gt;
&lt;p&gt;因为Memcache用到了libevent这个库用于Socket的处理，所以先安装libevent。（&lt;a href=&#34;http://blog.csdn.net/canduecho/archive/2008/01/31/2074168.aspx&#34;&gt;Memcache是什么？&lt;/a&gt;、&lt;a href=&#34;http://www.ccvita.com/257.html&#34;&gt;Memcache如何安装？&lt;/a&gt;）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf libevent-1.4.14b-stable.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; libevent-1.4.14b-stable/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://memcached.googlecode.com/files/memcached-1.4.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf memcached-1.4.5.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; memcached-1.4.5/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --with-libevent&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;42编译安装memcache的php扩展&#34;&gt;4.2、编译安装Memcache的PHP扩展&lt;/h3&gt;
&lt;p&gt;添加扩展一般我们只需到php源码ext目录下找即可，但因为php没有自带Memcache扩展，所以你需要另外下载。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://pecl.php.net/get/memcache-3.0.5.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf memcache-3.0.5.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; memcache-3.0.5/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo /usr/local/php5/bin/phpize
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --enable-memcache --with-php-config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php5/bin/php-config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;安装完后会看倒下面提示：Installing shared extensions:/usr/local/php5/lib/php/extensions/no-debug-non-zts-20090626/&lt;/p&gt;
&lt;p&gt;运行memcached： &amp;ldquo;/usr/local/bin/memcached&amp;rdquo;，新建php文件检测是否成功：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$mem&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;new&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;Memcache&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$mem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;127.0.0.1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;11211&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$mem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;set&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;This is a test!&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;60&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$val&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$mem&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;get&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$val&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43修改phpini文件&#34;&gt;4.3、修改php.ini文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo gvim /usr/local/php/lib/php.ini&lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;## 将 extension_dir = &amp;#34;./&amp;#34; 改为&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extension_dir&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;memcache.so&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;保存退出后，用以下命令检查php配置文件是否正确，然后重启Apache服务器&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/php5/bin/php -v
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo httpd -k restart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43编译安装-eaccelerator&#34;&gt;4.3、编译安装 eaccelerator&lt;/h3&gt;
&lt;p&gt;eaccelerator安装方法同上面基本一致（&lt;a href=&#34;http://blog.s135.com/post/202/&#34;&gt;详细资料&lt;/a&gt;）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar jxf eaccelerator-0.9.6.1.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; eaccelerator-0.9.6.1/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo /usr/local/php5/bin/phpize
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --enable-eaccelerator&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;shared --with-php-config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php/bin/php-config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/local/cache&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;修改php.ini文件，在[ZendOptimizer]前面加入下面代码，然后重启apache&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;eaccelerator&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;extension&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/eaccelerator.so&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.shm_size&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;32&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.cache_dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;/usr/local/cache&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.enable&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.optimizer&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.check_mtime&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.debug&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.filter&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.shm_max&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.shm_ttl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;3600&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.shm_prune_period&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;3600&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.shm_only&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;0&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.compress&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;1&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eaccelerator.compress_level&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;9&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五安装-phpmyadmin&#34;&gt;五、安装 phpmyadmin&lt;/h2&gt;
&lt;h3 id=&#34;51安装-phpmyadmin-338&#34;&gt;5.1、安装 phpMyAdmin-3.3.8&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nchc.dl.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.3.8.1/phpMyAdmin-3.3.8.1-all-languages.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf phpMyAdmin-3.3.8.1-all-languages.tar.gz -C /usr/local/apache/htdocs/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /usr/local/apache/htdocs/phpMyAdmin-3.3.8.1-all-languages/ /usr/local/apache/htdocs/phpMyAdmin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/apache/htdocs/phpMyAdmin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp libraries/config.default.php ./config.inc.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52激活链接表的附加功能&#34;&gt;5.2、激活链接表的附加功能&lt;/h3&gt;
&lt;p&gt;不想出现“链接表的附加功能尚未激活。要查出原因，请点击此处“这样提示就照做吧。&lt;/p&gt;
&lt;p&gt;5.2.1.先建立一个名为phpmyadmin的数据库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql -u root -p 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;CREATE DATABASE &lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;phpmyadmin&lt;span class=&#34;sb&#34;&gt;```&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5.2.2.然后把目录下scripts/create_tables.sql导入到这个库&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/local/mysql/bin/mysql -u root -p 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;use phpmyadmin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;source&lt;/span&gt; /usr/local/apache/htdocs/phpMyAdmin/scripts/create_tables.sql&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.编辑config.inc.php配置文件.&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /usr/local/apache/htdocs/phpMyAdmin/config.inc.php&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pmadb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bookmarktable&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;relation&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;table_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;table_coords&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pdf_pages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;column_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;history&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tracking&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将上面语句改成下面的&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pmadb&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;           &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;phpmyadmin&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;bookmarktable&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;   &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_bookmark&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;relation&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_relation&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;table_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;      &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_table_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;table_coords&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;    &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_table_coords&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;pdf_pages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;       &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_pdf_pages&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;column_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;     &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_column_info&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;history&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;         &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_history&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;designer_coords&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_designer_coords&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;Servers&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;][&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tracking&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;        &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;pma_tracking&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;53配置文件设置短语密码&#34;&gt;5.3、配置文件设置短语密码&lt;/h3&gt;
&lt;p&gt;同理，不想出现“配置文件现在需要一个短语密码。“这样提示，就照做吧。&lt;/p&gt;
&lt;p&gt;编辑config.inc.php配置文件. 修改$cfg[&amp;lsquo;blowfish_secret&amp;rsquo;]的值，其中&amp;rsquo;abc&amp;rsquo;为任意值&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;$cfg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;blowfish_secret&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;abc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五结语&#34;&gt;五、结语&lt;/h2&gt;
&lt;p&gt;至此，基本的LAMP环境搭建结束了，上述方法同样适用于ubuntu server 和 Debian 。需要说的是目前只是进行了初步的配置，没做任何安全配置，实际部署还请参考其他相关文章。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu 从源码编译安装 OpenSSH</title>
        <link>https://www.bg7pbp.com/p/ubuntu-compile-openssh/</link>
        <pubDate>Wed, 12 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-compile-openssh/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%85%B3%E4%BA%8E-openssh&#34;&gt;一、关于 OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E5%89%8D%E7%9A%84%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;二、编译前的准备工作&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E6%9F%A5%E7%9C%8B-openssh-%E7%89%88%E6%9C%AC&#34;&gt;2.1、查看 OpenSSH 版本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E5%AE%89%E8%A3%85-openssl-%E5%8F%8A%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83&#34;&gt;2.2、安装 OpenSSL 及编译环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%A4%87%E4%BB%BD-openssh-%E6%97%A7%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;2.3、备份 OpenSSH 旧配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E5%8D%B8%E8%BD%BD%E6%97%A7%E7%89%88-openssh&#34;&gt;2.4、卸载旧版 OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-openssh&#34;&gt;三、编译安装 OpenSSH&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%85%B3%E4%BA%8E%E7%89%B9%E6%9D%83%E5%88%86%E7%A6%BB&#34;&gt;3.1、关于特权分离&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-openssh&#34;&gt;3.2、编译安装 OpenSSH&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8-sshd&#34;&gt;3.3、开机自启动 sshd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B-openssh-%E5%AE%89%E5%85%A8%E9%85%8D%E7%BD%AE&#34;&gt;四、 OpenSSH 安全配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41%E6%9F%A5%E7%9C%8B-openssh-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;4.1、查看 OpenSSH 配置文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42%E7%94%9F%E6%88%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AF%86%E9%92%A5%E5%AF%B9&#34;&gt;4.2、生成服务器密钥对&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44%E7%BC%96%E8%BE%91-sshd_config-%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6&#34;&gt;4.4、编辑 sshd_config 配置文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%9F%BA%E4%BA%8E%E5%AF%86%E9%92%A5%E7%9A%84%E8%AE%A4%E8%AF%81&#34;&gt;五、基于密钥的认证&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51%E5%9C%A8%E6%9C%AC%E5%9C%B0%E7%94%9F%E6%88%90%E5%AF%86%E9%92%A5%E5%AF%B9&#34;&gt;5.1、在本地生成密钥对&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52%E4%B8%8A%E4%BC%A0%E5%85%AC%E9%92%A5%E8%87%B3%E6%9C%8D%E5%8A%A1%E5%99%A8&#34;&gt;5.2、上传公钥至服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53%E5%BB%BA%E7%AB%8B%E5%AE%89%E5%85%A8%E8%BF%9E%E6%8E%A5&#34;&gt;5.3、建立安全连接&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%ADssh-%E5%B8%90%E5%8F%B7%E7%AE%A1%E7%90%86&#34;&gt;六、SSH 帐号管理&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;简单的说 &lt;a href=&#34;http://www.openssh.com/&#34;&gt;OpenSSH&lt;/a&gt; 是一组安全远程的连接工具，主要包括了几个部份：ssh、sshd、scp、sftp、ssh-keygen、ssh-agent、ssh-add。OpenSSH 安装配置比较复杂，难点在配置，特别是在 VPS 中，配置不当就完全无法链接 VPS 了。&lt;/p&gt;
&lt;h2 id=&#34;一关于-openssh&#34;&gt;一、关于 OpenSSH&lt;/h2&gt;
&lt;p&gt;OpenSSH 是一组用于安全地访问远程计算机的连接工具。它可以作为 rlogin、 rsh rcp 以及 telnet 的直接替代品使用。更进一步， 其他任何 TCP/IP 连接都可以通过 SSH 安全地进行隧道/转发。 OpenSSH 对所有的传输进行加密， 从而有效地阻止了窃听、 连接劫持，以及其他网络级的攻击。（关于 &lt;a href=&#34;http://zh.wikipedia.org/zh-cn/SSH&#34;&gt;SSL&lt;/a&gt;、&lt;a href=&#34;http://zh.wikipedia.org/zh-cn/SSH&#34;&gt;SSH&lt;/a&gt;）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;ssh（SSH 客户端，用于登录建立连接，是 rlogin 与 Telnet的安全替代方案）&lt;/li&gt;
&lt;li&gt;sshd （SSH 服务端，典型的独立守护进程）&lt;/li&gt;
&lt;li&gt;scp、sftp （文件安全传输工具，rcp、ftp 安全的替代方案）&lt;/li&gt;
&lt;li&gt;ssh-keygen （用于产生 RSA 或 DSA 密钥）&lt;/li&gt;
&lt;li&gt;ssh-agent、ssh-add（帮助用户不需要每次都要输入金钥密码的工具）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二编译前的准备工作&#34;&gt;二、编译前的准备工作&lt;/h2&gt;
&lt;h3 id=&#34;21查看-openssh-版本&#34;&gt;2.1、查看 OpenSSH 版本&lt;/h3&gt;
&lt;p&gt;部分 Linux 系统已默认安装了  OpenSSH，像 Ubuntu Server 10.10 就已安装了 OpenSSH_5.5p1&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh -v&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22安装-openssl-及编译环境&#34;&gt;2.2、安装 OpenSSL 及编译环境&lt;/h3&gt;
&lt;p&gt;必须先安装依赖 OpenSSL，具体见&lt;a href=&#34;http://wangyan.org/blog/install-openssl-from-source.html&#34;&gt;《Linux 从源码编译安装 OpenSSL》&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&#34;23备份-openssh-旧配置文件&#34;&gt;2.3、备份 OpenSSH 旧配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /etc/init.d/ssh /etc/init.d/ssh.old
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -r /etc/ssh /etc/ssh.old
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp ~/.ssh/authorized_keys ~/.ssh/authorized_keys.old&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24卸载旧版-openssh&#34;&gt;2.4、卸载旧版 OpenSSH&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get purge openssh-client openssh-server&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三编译安装-openssh&#34;&gt;三、编译安装 OpenSSH&lt;/h2&gt;
&lt;h3 id=&#34;31关于特权分离&#34;&gt;3.1、关于特权分离&lt;/h3&gt;
&lt;p&gt;所谓特权分离(Privilege Separation)实际上是一种 OpenSSH 的安全机制，该特性默认开启，可通过配置文件中的 UsePrivilegeSeparation 指令开启或关闭。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p  /var/empty &lt;span class=&#34;c1&#34;&gt;#设置一个空目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chown 0:0 /var/empty &lt;span class=&#34;c1&#34;&gt;#所有者和组，0代表&amp;#34;root&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;000&lt;/span&gt; /var/empty &lt;span class=&#34;c1&#34;&gt;#目录权限设置为&amp;#34;000&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd sshd &lt;span class=&#34;c1&#34;&gt;#建立sshd组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -g sshd -c &lt;span class=&#34;s1&#34;&gt;&amp;#39;sshd privsep&amp;#39;&lt;/span&gt; -d /var/empty -s /bin/false sshd &lt;span class=&#34;c1&#34;&gt;#用于特权分离的非特权用户&amp;#34;sshd&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32编译安装-openssh&#34;&gt;3.2、编译安装 OpenSSH&lt;/h3&gt;
&lt;p&gt;详细编译选项见 &lt;a href=&#34;http://lamp.linux.gov.cn/OpenSSH/OpenSSH_INSTALL.html&#34;&gt;《OpenSSH-4.7p1 安装指南》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://ftp.aso.ee/pub/OpenBSD/OpenSSH/portable/openssh-5.6p1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf openssh-5.6p1.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; openssh-5.6p1/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --sysconfdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssh --with-ssl-dir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl --with-privsep-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/empty --with-privsep-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;sshd  --with-zlib&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/lib --with-ssl-engine --with-md5-passwords --disable-etc-default-login
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ndash;prefix 安装目录&lt;br&gt;
&amp;ndash;sysconfdir 配置文件目录&lt;br&gt;
&amp;ndash;with-ssl-dir 指定 OpenSSL 的安装目录&lt;br&gt;
&amp;ndash;with-privsep-path 非特权用户的chroot目录&lt;br&gt;
&amp;ndash;with-privsep-user=sshd 指定非特权用户为sshd&lt;br&gt;
&amp;ndash;with-zlib 指定zlib库的安装目录&lt;br&gt;
&amp;ndash;with-md5-passwords 支持读取经过MD5加密的口令&lt;br&gt;
&amp;ndash;with-ssl-engine 启用OpenSSL的ENGINE支持&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;33开机自启动-sshd&#34;&gt;3.3、开机自启动 sshd&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv /etc/init.d/ssh.old /etc/init.d/sshd &lt;span class=&#34;c1&#34;&gt;#使用原来的启动脚本&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /etc/init.d/sshd &lt;span class=&#34;c1&#34;&gt;#编辑，然后替换路径。&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d mysql defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#将原路径&amp;#34;/usr/sbin替换为&amp;#34;/usr/local/sibn&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:%s/usr&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;sbin/usr&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;local&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;sbin/g
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#将原路径&amp;#34;/etc/ssh替换为&amp;#34;/usr/local/ssh&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;:%s/etc&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;ssh/usr&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;local&lt;span class=&#34;se&#34;&gt;\/&lt;/span&gt;ssh/g&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四-openssh-安全配置&#34;&gt;四、 OpenSSH 安全配置&lt;/h2&gt;
&lt;h3 id=&#34;41查看-openssh-配置文件&#34;&gt;4.1、查看 OpenSSH 配置文件&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/ssh&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;moduli #ssh服务器的Diffie-Hellman密钥文件&lt;br&gt;
ssh_config #ssh客户端配置文件&lt;br&gt;
sshd_config  #ssh服务器配置文件&lt;br&gt;
ssh_host_dsa_key #ssh服务器dsa算法私钥&lt;br&gt;
ssh_host_dsa_key.pub #ssh服务器dsa算法公钥&lt;br&gt;
ssh_host_rsa_key #ssh服务器rsa算法私钥&lt;br&gt;
ssh_host_rsa_key.pub #ssh服务器rsa算法公钥&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;42生成服务器密钥对&#34;&gt;4.2、生成服务器密钥对&lt;/h3&gt;
&lt;p&gt;默认 OpenSSH 安装完毕后就自动生成了，如果丢失可通过下面命令重新生成。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t rsa1 -f /etc/ssh/ssh_host_key -N &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#适用于ssh-1版&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;600&lt;/span&gt; /etc/ssh/ssh_host_*
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;chmod &lt;span class=&#34;m&#34;&gt;644&lt;/span&gt; /etc/ssh/ssh_host_*.pub&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;系统密钥对是不能设置密码的， -N 后面 是两个 单引号 ！表示密码串为空。&lt;/li&gt;
&lt;li&gt;注意公钥和私钥的权限是不同的。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;44编辑-sshd_config-配置文件&#34;&gt;4.4、编辑 sshd_config 配置文件&lt;/h3&gt;
&lt;p&gt;事实上该配置文件不需要修改也能正常启动 sshd ，下面是该配置文件的简要中文解释。详细解释见&lt;a href=&#34;http://lamp.linux.gov.cn/OpenSSH/sshd_config.html&#34;&gt;《sshd_config 中文手册》&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Port 22 #默认端口  
ListenAddress #监听的网络地址  
AddressFamily #监听的IP地址类型  
Protocol 2 #SSH协议的版本号，默认为1  

#主机私钥文件的位置
HostKey /usr/local/ssh/ssh_host_rsa_key
HostKey /usr/local/ssh/ssh_host_dsa_key

在SSH-1协议下，以固定周期生成服务器密钥及大小。
KeyRegenerationInterval 1h
ServerKeyBits 1024

SyslogFacility AUTH #指定日志子系统(facility)
LogLevel INFO #指定日志详细程度

LoginGraceTime 2m #2分种内必须认证成功，0 无限制。
PermitRootLogin yes #是否允许 root 登录
StrictModes yes #连接请求前对相关文件权限检查。
MaxAuthTries 6 #指定每个连接最大允许的认证次数
MaxSessions 10 #最大允许保持多少个未认证的连接
RSAAuthentication yes #否允许使用纯 RSA 公钥认证，仅用于SSH-1。
PubkeyAuthentication yes #是否允许公钥认证，仅用于SSH-2。

#用来登录的 RSA/DSA 公钥存放位置，
AuthorizedKeysFile     .ssh/authorized_keys

RhostsRSAAuthentication no  #是否使用强可信主机认证，仅用于SSH-1。
HostbasedAuthentication no #同上，仅用于SSH-2。
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略用户的 ~/.ssh/known_hosts 文件
IgnoreUserKnownHosts no
是否在 RhostsRSAAuthentication 或 HostbasedAuthentication 过程中忽略 .rhosts 和 .shosts 文件。
IgnoreRhosts yes

PasswordAuthentication yes #是否使用密码认证
PermitEmptyPasswords no #是否允许密码为空的用户远程登录
ChallengeResponseAuthentication yes #是否允许 challenge-response 认证

Kerberos认证相关设置，可忽略
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

是否允许使用基于 GSSAPI 的用户认证。
#GSSAPIAuthentication no
是否在用户退出登录后自动销毁用户凭证缓存
#GSSAPICleanupCredentials yes

AllowAgentForwarding yes #是否允许端口转发
AllowTcpForwarding yes #是否允许TCP端口转发
GatewayPorts no #是否允许远程主机连接本地的转发端口。

X11Forwarding no #是否允许进行 X11 转发。
X11DisplayOffset 10 #指定X11 转发的第一个可用的显示区数字。
X11UseLocalhost yes #是否将X11转发服务器绑定到本地loopback地址

PrintMotd yes #每次登录时打印 /etc/motd 文件内容
PrintLastLog yes #每次登录时打印最后一位用户的登录时间
TCPKeepAlive yes #是否向客户端发送 TCP keepalive 消息。

UseLogin no #是否在交互式会话的登录过程中使用 login 
UsePrivilegeSeparation yes #创建非特权子进程来进行权限分离。

指定是否允许处理 ~/.ssh/environment 以及 ~/.ssh/authorized_keys 中的 environment= 选项。
#PermitUserEnvironment no

是否对通信数据进行加密，还是延迟到认证成功之后再对通信数据加密。
#Compression delayed

#ClientAliveInterval 0 #超时提醒，0 表示不发送&amp;quot;alive&amp;quot;消息提醒。
#ClientAliveCountMax 3 #允许发送多少个&amp;quot;alive&amp;quot;消息。默认值是 3 。
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;五基于密钥的认证&#34;&gt;五、基于密钥的认证&lt;/h2&gt;
&lt;h3 id=&#34;51在本地生成密钥对&#34;&gt;5.1、在本地生成密钥对&lt;/h3&gt;
&lt;p&gt;ssh-keygen 默认使用rsa算法生成密钥，如果要使用dsa算法，则需要使用-t 指定比如($ ssh-keygen -t dsa)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/.ssh/ &lt;span class=&#34;c1&#34;&gt;#进入.ssh目录&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh-keygen -N &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#生成无密码的密钥对，然后会提示输入密钥名称&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52上传公钥至服务器&#34;&gt;5.2、上传公钥至服务器&lt;/h3&gt;
&lt;p&gt;通过scp将公钥传复制到远程服务器.ssh目录下，并改名为authorized_keys&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp wangyan.pub wangyan@wangyan.org:.ssh/authorized_keys&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;53建立安全连接&#34;&gt;5.3、建立安全连接&lt;/h3&gt;
&lt;p&gt;如果本地.ssh目录下的私钥改名，那么链接失败或改为密码认证。如果putty作为客户端，那么这个id_rsa需要经过PUTTYGEN.EXE转换一次以后才能使用&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ssh wangyan@wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sftp wangyan@wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;scp wangyan@wangyan.org
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;......&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;六ssh-帐号管理&#34;&gt;六、SSH 帐号管理&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;passwd &lt;span class=&#34;c1&#34;&gt;#修改当前用户密码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupadd SSH &lt;span class=&#34;c1&#34;&gt;#添加组&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;useradd -g SSH -s /bin/&lt;span class=&#34;s1&#34;&gt;&amp;#39;bash&amp;#39;&lt;/span&gt; -d /home/user1 user1 &lt;span class=&#34;c1&#34;&gt;#添加用户&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;passwd user1 &lt;span class=&#34;c1&#34;&gt;#为用户user1创建密码&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;userdel user1 &lt;span class=&#34;c1&#34;&gt;#删除用户user1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;groupdel SSH &lt;span class=&#34;c1&#34;&gt;#删除组SSH&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;停用帐号，VIM编辑密码文件，在用户名后添加 &lt;span class=&#34;s2&#34;&gt;&amp;#34;:*&amp;#34;&lt;/span&gt; 。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; vim /etc/shadow &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;service sshd restart &lt;span class=&#34;c1&#34;&gt;# 重启sshd&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ps -aux &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep sshd &lt;span class=&#34;c1&#34;&gt;#查看是否运行成功&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Linux 系统 OpenSSL 证书生成</title>
        <link>https://www.bg7pbp.com/p/linux-openssl-certificate-generation/</link>
        <pubDate>Tue, 11 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/linux-openssl-certificate-generation/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cca-%E6%A0%B9%E8%AF%81%E4%B9%A6&#34;&gt;二、CA 根证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E7%94%9F%E6%88%90ca%E6%A0%B9%E8%AF%81%E4%B9%A6%E7%A7%81%E9%92%A5&#34;&gt;2.1、生成CA根证书私钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E7%94%9F%E6%88%90ca%E6%A0%B9%E8%AF%81%E4%B9%A6&#34;&gt;2.2、生成CA根证书&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89ssl-%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;三、SSL 服务器证书&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E7%94%9F%E6%88%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6%E7%A7%81%E9%92%A5&#34;&gt;3.1、生成服务器证书私钥&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#32%E7%94%9F%E6%88%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6%E8%AF%B7%E6%B1%82%E6%96%87%E4%BB%B6&#34;&gt;3.2、生成服务器证书请求文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E7%AD%BE%E7%BD%B2%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AF%81%E4%B9%A6&#34;&gt;3.3、签署服务器证书&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;OpenSSL 证书生成主要有三步，1、管理员生成“证书私钥‘，然后用私钥生成一份“证书请求文件“（.csr）2、管理员将“证书请求文件“交给商业性CA签署，比如 Verisign 形成正式证书。3、管理员在服务器上导入这个证书。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作&lt;/h2&gt;
&lt;p&gt;根据 OpenSSL 默认配置文件，新建相应目录结构。当然你也可以修改配置文件[ca_default]部分，指定相应目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/local/ssl/openssl.cnf （选做，修改配置文件）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p /usr/local/ssl/demoCA 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/ssl/demoCA 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir private crl certs newcerts 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;echo&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;01&amp;#39;&lt;/span&gt; &amp;gt; serial &lt;span class=&#34;c1&#34;&gt;#在demoCA目录下新建serial文件并写入01。 &lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;touch index.txt &lt;span class=&#34;c1&#34;&gt;#在demoCA目录下新建index.txt的空文件`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二ca-根证书&#34;&gt;二、CA 根证书&lt;/h2&gt;
&lt;h3 id=&#34;21生成ca根证书私钥&#34;&gt;2.1、生成CA根证书私钥&lt;/h3&gt;
&lt;p&gt;生成 CA 根证书 RSA 私钥，openssl genrsa 支持 des3 参数，更多内容&lt;a href=&#34;http://blog.chinaunix.net/u/12066/showart_491871.html&#34;&gt;《OpenSSL 之 genrsa 命令》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl genrsa -out private/cakey.pem &lt;span class=&#34;m&#34;&gt;1024&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#生成CA认证中心 RSA 私钥&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;22生成ca根证书&#34;&gt;2.2、生成CA根证书&lt;/h3&gt;
&lt;p&gt;利用CA私钥，生成自签署的CA证书这一步很关键，也很容易出现问题。首先相应目录结构和文件一定要准备好，然后证书格式请选择pem而非crt，另外所在目录是demoCA。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl req -new -x509 -key private/cakey.pem -out cacert.pem&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;特别注意！！&lt;/strong&gt; 国家、省、组织名一定要填写不能为空，且记住你填写的值，其他的（包括Common Name）建议为空值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/lamp-ssl_1.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Country Name (2 letter code) [AU]:（国家） 
State or Province Name (full name) [Some-State]:（洲/省） 
Locality Name (eg, city) []:（城/镇） 
Organization Name (eg, company) 
[Internet Widgits Pty Ltd]:（组织名） 
Organizational Unit Name (eg, section) []:（单位名） 
Common Name (eg, YOUR name) []:（httpd-ssl.conf中的ServerName 名称） 
Email Address []:（邮箱）&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三ssl-服务器证书&#34;&gt;三、SSL 服务器证书&lt;/h2&gt;
&lt;h3 id=&#34;31生成服务器证书私钥&#34;&gt;3.1、生成服务器证书私钥&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl genrsa -out private/server.key &lt;span class=&#34;m&#34;&gt;1024&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h4 id=&#34;32生成服务器证书请求文件&#34;&gt;3.2、生成服务器证书请求文件&lt;/h4&gt;
&lt;p&gt;利已生成的服务器证书私钥，生成服务器证书请求csr文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl req -new -key private/server.key -out crl/server.csr&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&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;国家、省要与上面CA证书一致，否则签署时必然要失败。&lt;/li&gt;
&lt;li&gt;Common Name 此时相当重要，请输入你需要SSL支持的域名，如 localhost（域名只能一个），否则浏览器提示证书错误。（&lt;a href=&#34;http://www.wosign.com/FAQ/multi-domain_cert.htmert.htm&#34;&gt;多域名证书&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/lamp-ssl_2.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h4 id=&#34;33签署服务器证书&#34;&gt;3.3、签署服务器证书&lt;/h4&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; .. 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl ca -in demoCA/crl/server.csr -out demoCA/certs/server.crt&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/l/lamp-ssl_3.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu 从源码编译安装 OpenSSL</title>
        <link>https://www.bg7pbp.com/p/ubuntu-compile-openssl/</link>
        <pubDate>Mon, 10 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-compile-openssl/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80ssl-%E5%9F%BA%E6%9C%AC%E5%B8%B8%E8%AF%86&#34;&gt;一、SSL 基本常识&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E4%BB%80%E4%B9%88%E6%98%AF-ssl&#34;&gt;1.1、什么是 SSL？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12ssl-%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B&#34;&gt;1.2、SSL 认证流程&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-openssl&#34;&gt;二、编译安装 OpenSSL&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;2.1、准备工作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E6%9F%A5%E7%9C%8Bopenssl%E7%89%88%E6%9C%AC&#34;&gt;2.2、查看OpenSSL版本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E5%AE%89%E8%A3%85%E5%9F%BA%E7%A1%80%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83&#34;&gt;2.3、安装基础编译环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85-zlib-%E5%BA%93&#34;&gt;2.3、编译安装 Zlib 库&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E5%8D%B8%E8%BD%BD%E6%97%A7%E7%89%88%E6%9C%AC-openssl&#34;&gt;2.4、卸载旧版本 OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E7%BC%96%E8%AF%91%E4%B8%8E%E5%AE%89%E8%A3%85-openssl&#34;&gt;2.5、编译与安装 OpenSSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;http://www.openssl.org/&#34;&gt;OpenSSL&lt;/a&gt; 是一款开源的 &lt;a href=&#34;http://zh.wikipedia.org/zh-cn/SSL&#34;&gt;SSL&lt;/a&gt; 软件包，采用 SSL 的公开密钥技术，用于实现传输层的通信加密功能。OpenSSL 支持 Linux、Windows、BSD、Mac 等平台，功能强大，包含丰富的密码算法库，SSL 协议库和应用程序。&lt;/p&gt;
&lt;h2 id=&#34;一ssl-基本常识&#34;&gt;一、SSL 基本常识&lt;/h2&gt;
&lt;h3 id=&#34;11什么是-ssl&#34;&gt;1.1、什么是 SSL？&lt;/h3&gt;
&lt;p&gt;安全套接层（Secure Sockets Layer，SSL）， 最初由 netscape 公司设计，建立在传输层的安全通信协议，采用公开密钥体系的证书认证方式来确保客户端和 SSL 服务器之间的通信安全。&lt;/p&gt;
&lt;h3 id=&#34;12ssl-认证流程&#34;&gt;1.2、SSL 认证流程&lt;/h3&gt;
&lt;p&gt;SSL 客户端在 TCP 连接建立之后，发出一个消息（包含了客户端所支持的算法列表）给服务器端，然后服务器端返回一个数据包（确定了这次通信所需算法）和 SSL 服务器端的证书（包含了公钥）给客户端。客户端随后会用收到的公钥将消息加密再传送，该加密消息只能用 SSL 服务器端私钥解密，即便中途被截取也无法获知内容。&lt;/p&gt;
&lt;h2 id=&#34;二编译安装-openssl&#34;&gt;二、编译安装 OpenSSL&lt;/h2&gt;
&lt;h3 id=&#34;21准备工作&#34;&gt;2.1、准备工作&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;系统版本：Ubuntu-10.10-Server-I386&lt;br&gt;
更新源：apt-get update&lt;br&gt;
升级软件：apt-get upgrade&lt;br&gt;
更新系统：apt-get dist-upgrade&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;22查看openssl版本&#34;&gt;2.2、查看OpenSSL版本&lt;/h3&gt;
&lt;p&gt;部分 Linux 系统已默认安装了 OpenSSL 0.9.8，特别是 VPS 一般都安装了。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl version -a&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23安装基础编译环境&#34;&gt;2.3、安装基础编译环境&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get install build-essential&lt;span class=&#34;sb&#34;&gt;`&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;23编译安装-zlib-库&#34;&gt;2.3、编译安装 Zlib 库&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://zlib.net/zlib-1.2.5.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf zlib-1.2.5.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; zlib-1.2.5/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24卸载旧版本-openssl&#34;&gt;2.4、卸载旧版本 OpenSSL&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;apt-get purge openssl 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;rm -rf /etc/ssl &lt;span class=&#34;c1&#34;&gt;#删除配置文件&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;25编译与安装-openssl&#34;&gt;2.5、编译与安装 OpenSSL&lt;/h3&gt;
&lt;p&gt;prefix 是安装目录，openssldir 是配置文件目录，另外建议安装两次，shared 作用是生成动态连接库。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget ftp://ftp.openssl.org/source/openssl-1.0.0c.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf openssl-1.0.0c.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; openssl-1.0.0c/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./config --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --openssldir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./config shared 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local --openssldir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/ssl 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make clean make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;进一步的配置可参考&lt;a href=&#34;http://lamp.linux.gov.cn/OpenSSL/OpenSSL_install_config.html&#34;&gt;《OpenSSL-0.9.8g 安装与配置指南》&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu 系统 Update-rc.d 命令</title>
        <link>https://www.bg7pbp.com/p/ubuntu-update-rc-d/</link>
        <pubDate>Sun, 09 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-update-rc-d/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80linux-%E7%B3%BB%E7%BB%9F%E4%B8%BB%E8%A6%81%E5%90%AF%E5%8A%A8%E6%AD%A5%E9%AA%A4&#34;&gt;一、Linux 系统主要启动步骤&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB&#34;&gt;二、运行级别&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ubuntu%E4%B8%AD%E7%9A%84%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB&#34;&gt;Ubuntu中的运行级别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%88%87%E6%8D%A2%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB&#34;&gt;切换运行级别&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%90%AF%E5%8A%A8%E9%A1%B9%E7%AE%A1%E7%90%86%E5%B7%A5%E5%85%B7&#34;&gt;启动项管理工具&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89update-rcd%E5%91%BD%E4%BB%A4%E8%AF%A6%E8%A7%A3&#34;&gt;三、update-rc.d命令详解&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%8E%E6%89%80%E6%9C%89%E7%9A%84%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB%E4%B8%AD%E5%88%A0%E9%99%A4%E6%8C%87%E5%AE%9A%E5%90%AF%E5%8A%A8%E9%A1%B9&#34;&gt;从所有的运行级别中删除指定启动项&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%8C%89%E6%8C%87%E5%AE%9A%E9%A1%BA%E5%BA%8F%E5%9C%A8%E6%8C%87%E5%AE%9A%E8%BF%90%E8%A1%8C%E7%BA%A7%E5%88%AB%E4%B8%AD%E5%90%AF%E5%8A%A8%E6%88%96%E5%85%B3%E9%97%AD&#34;&gt;按指定顺序、在指定运行级别中启动或关闭&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#a%E5%90%AF%E5%8A%A8%E5%90%8Eb%E6%89%8D%E8%83%BD%E5%90%AF%E5%8A%A8b%E5%85%B3%E9%97%AD%E5%90%8Ea%E6%89%8D%E5%85%B3%E9%97%AD&#34;&gt;A启动后B才能启动，B关闭后A才关闭&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%90%AF%E5%8A%A8%E5%92%8C%E5%85%B3%E9%97%AD%E9%A1%BA%E5%BA%8F%E4%B8%BA90%E7%BA%A7%E5%88%AB%E9%BB%98%E8%AE%A4&#34;&gt;启动和关闭顺序为90，级别默认&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ubuntu或者Debian系统中update-rc.d命令，是用来更新系统启动项的脚本。这些脚本的链接位于 &lt;code&gt;/etc/rcN.d/&lt;/code&gt; 目录，对应脚本位于 &lt;code&gt;/etc/init.d/&lt;/code&gt; 目录。在了解 &lt;code&gt;update-rc.d&lt;/code&gt; 命令之前，你需要知道的是有关 Linux 系统主要启动步骤，以及 Ubuntu 中运行级别的知识。&lt;/p&gt;
&lt;h2 id=&#34;一linux-系统主要启动步骤&#34;&gt;一、Linux 系统主要启动步骤&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;读取 MBR 的信息，启动 Boot Manager。&lt;/li&gt;
&lt;li&gt;加载系统内核，启动 init 进程， init 进程是 Linux 的根进程，所有的系统进程都是它的子进程。&lt;/li&gt;
&lt;li&gt;init 进程读取 /etc/inittab 文件中的信息，并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行，然后是/etc/rcN.d/ 目录。&lt;/li&gt;
&lt;li&gt;根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg，Xwindow 为 Linux 下的图形用户界面系统。&lt;/li&gt;
&lt;li&gt;启动登录管理器，等待用户登录。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二运行级别&#34;&gt;二、运行级别&lt;/h2&gt;
&lt;h3 id=&#34;ubuntu中的运行级别&#34;&gt;Ubuntu中的运行级别&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;0（关闭系统）&lt;/li&gt;
&lt;li&gt;1（单用户模式，只允许root用户对系统进行维护。）&lt;/li&gt;
&lt;li&gt;2 到 5（多用户模式，其中3为字符界面，5为图形界面。）&lt;/li&gt;
&lt;li&gt;6（重启系统）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;切换运行级别&#34;&gt;切换运行级别&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;init &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;0123456Ss&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; 例如：init &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; 命令关机； init &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; 命令重新启动&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;启动项管理工具&#34;&gt;启动项管理工具&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo install sysv-rc-conf //或者使用带gui的工具bum sudo sysv-rc-conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三update-rcd命令详解&#34;&gt;三、update-rc.d命令详解&lt;/h2&gt;
&lt;h3 id=&#34;从所有的运行级别中删除指定启动项&#34;&gt;从所有的运行级别中删除指定启动项&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d -f ＜basename＞ remove&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;按指定顺序在指定运行级别中启动或关闭&#34;&gt;按指定顺序、在指定运行级别中启动或关闭&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d ＜basename＞ start&lt;span class=&#34;p&#34;&gt;|&lt;/span&gt;stop ＜order＞ ＜runlevels＞
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;实例：update-rc.d apachectl start &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;3&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;4&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;5&lt;/span&gt; . stop &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;6&lt;/span&gt; .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;解析：
表示在2、3、4、5这五个运行级别中，由小到大，第20个开始运行apachectl；
在 0 1 6这3个运行级别中，第20个关闭 apachectl 。这是合并起来的写法，注意它有2个点号，效果等于下面方法：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d apachectl defaults&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;a启动后b才能启动b关闭后a才关闭&#34;&gt;A启动后B才能启动，B关闭后A才关闭&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d A defaults &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;20&lt;/span&gt; update-rc.d B defaults &lt;span class=&#34;m&#34;&gt;90&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;启动和关闭顺序为90级别默认&#34;&gt;启动和关闭顺序为90，级别默认&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-rc.d ＜basename＞ defaults &lt;span class=&#34;m&#34;&gt;90&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Ubuntu 主题 Elementary 安装方法</title>
        <link>https://www.bg7pbp.com/p/ubuntu-install-elementary-theme/</link>
        <pubDate>Sat, 08 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-install-elementary-theme/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4&#34;&gt;一、安装步骤&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%8E%E7%A7%81%E4%BA%BA%E8%BD%AF%E4%BB%B6%E4%BB%93%E5%BA%93%E5%AE%89%E8%A3%85&#34;&gt;从私人软件仓库安装&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BB%8E%E6%BA%90%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;从源码编译安装&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%96%E8%AF%91%E7%8E%AF%E5%A2%83&#34;&gt;编译环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%BC%96%E8%AF%91gtk%E4%B8%BB%E9%A2%98%E5%BC%95%E6%93%8E&#34;&gt;编译GTK主题引擎&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85elementary%E4%B8%BB%E9%A2%98&#34;&gt;安装Elementary主题&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%AE%89%E8%A3%85elementary%E5%9B%BE%E6%A0%87&#34;&gt;安装Elementary图标&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%AE%80%E5%8D%95%E9%85%8D%E7%BD%AE&#34;&gt;二、简单配置&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BD%BF%E7%94%A8%E9%BB%91%E8%89%B2%E4%B8%BB%E9%A2%98&#34;&gt;使用黑色主题&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Elementary 是挺不错的 Ubuntu 主题 ，最近，也就是18号的时候作者 &lt;a href=&#34;http://danrabbit.deviantart.com/&#34;&gt;DanRabbit&lt;/a&gt; 它发布了最新的 2.0 版（&lt;a href=&#34;http://elementary-project.com/news/life-goes-ever-onward/&#34;&gt;官方消息&lt;/a&gt;）。新版主题上新增了黑色面板菜单，增加了部分Chrome 、Android等新图标。项目主页：&lt;a href=&#34;http://danrabbit.deviantart.com/art/elementary-gtk-theme-83104033&#34;&gt;deviantArt.com&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/e/elementary_gtk_theme.jpeg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;一安装步骤&#34;&gt;一、安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;从私人软件仓库安装&#34;&gt;从私人软件仓库安装&lt;/h3&gt;
&lt;p&gt;软件仓库已经跟新了最新，毫无疑问这是最方便的方法。但，本文重点不在此。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:elementaryart/ppa 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install gtk2-engines-aurora elementary-theme elementary-icon-theme&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;从源码编译安装&#34;&gt;从源码编译安装&lt;/h2&gt;
&lt;h3 id=&#34;编译环境&#34;&gt;编译环境&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install libgtk2.0-dev&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;首先准备GTK主题引擎编译环境，否则会出现下面错误。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;configure: error: GTK+-2.10 is required to compile aurora&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;编译gtk主题引擎&#34;&gt;编译GTK主题引擎&lt;/h3&gt;
&lt;p&gt;下载最新的 &lt;a href=&#34;http://gnome-look.org/content/show.php?content=56438&#34;&gt;Aurora Gtk Engine 1.5.1&lt;/a&gt; 主题引擎 将 aurora-1.5 文件夹解压出来，然后再开始编译。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -jxvf ./56438-aurora-1.5.1.tar.bz2 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxvf ./aurora-gtk-engine-1.5.tar.gz &lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; aurora-1.5/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr （默认路径为&lt;span class=&#34;s2&#34;&gt;&amp;#34;/usr/local/&amp;#34;&lt;/span&gt;，故务必修改路径） 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;安装elementary主题&#34;&gt;安装Elementary主题&lt;/h3&gt;
&lt;p&gt;下载最新的 &lt;a href=&#34;http://danrabbit.deviantart.com/art/elementary-gtk-theme-83104033&#34;&gt;Elementary&lt;/a&gt; 主题，然后解压，并复制到主题目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unzip ./elementary_gtk_theme_by_danrabbit-d1dh7hd.zip 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; egtk 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxvf ./elementary.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv elementary ~/.themes/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;安装elementary图标&#34;&gt;安装Elementary图标&lt;/h3&gt;
&lt;p&gt;下载最新的 &lt;a href=&#34;http://danrabbit.deviantart.com/art/elementary-Icons-65437279&#34;&gt;elementary Icons 2.5&lt;/a&gt; 图标，然后解压，并复制到图标目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;unzip elementary_icons_by_danrabbit-d12yjq7.zip 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; icons/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf ./elementary-mono-dark.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -zxf ./elementary.tar.gz 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mv elementary-mono-dark elementary /home/wangyan/.icons/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二简单配置&#34;&gt;二、简单配置&lt;/h2&gt;
&lt;h3 id=&#34;使用黑色主题&#34;&gt;使用黑色主题&lt;/h3&gt;
&lt;p&gt;如果你从软件仓库安装，那么编辑如下文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vi /usr/share/themes/elementary/gtk-2.0/gtkrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果你编译安装，那么编辑如下文件。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vi ~/.themes/elementary/gtk-2.0/gtkrc&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;最后移到第670行，将“Apps/panel.rc“改为&amp;quot;Apps/panel-dark.rc&amp;quot;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>vim中的复制与粘贴</title>
        <link>https://www.bg7pbp.com/p/vim-copy-paste/</link>
        <pubDate>Fri, 07 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/vim-copy-paste/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%8F%AF%E8%A7%86%E6%A8%A1%E5%BC%8F%E4%B8%8B%E9%80%89%E6%8B%A9%E6%96%87%E6%9C%AC&#34;&gt;一、可视模式下选择文本&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cvim%E5%A4%8D%E5%88%B6%E5%91%BD%E4%BB%A4&#34;&gt;二、VIM复制命令&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89vim%E4%B8%AD%E7%9A%84%E5%AF%84%E5%AD%98%E5%99%A8&#34;&gt;三、VIM中的寄存器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bvim%E5%A4%8D%E5%88%B6%E7%B2%98%E8%B4%B4%E6%AD%A5%E9%AA%A4&#34;&gt;四、VIM复制粘贴步骤&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;初次使用Vim，还没来得及看手册的用户，肯定会疑惑 ctrl+c、ctrl+v 无效了，只能在 gvim 中鼠标选择，然后右键复制和粘贴。事实上 Vim 的剪切板十分强大，甚至比 windows 下那些独立的剪切板软件还有强大。&lt;/p&gt;
&lt;h2 id=&#34;一可视模式下选择文本&#34;&gt;一、可视模式下选择文本&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;v 逐字逐行选择，上下左右移动有效。&lt;br&gt;
V 整行选择，上下移动有效，左右仅移动光标。&lt;br&gt;
ctrl-v或ctrl-Q(Windows) 矩形块选择，上下左右移动有效。&lt;br&gt;
o 光标移动到选择文字的另一端，（矩形块选择时o只是移到对角上，O移动到同一行另一个角上。）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;二vim复制命令&#34;&gt;二、VIM复制命令&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;y 复制，适用于选择文本后再按y复制&lt;br&gt;
yw 复制一个单词（包括空格）&lt;br&gt;
ye 复制一个单词（不包括空格）&lt;br&gt;
yy 复制一整行，类似dd删除一整行(包括行尾换行符）&lt;br&gt;
Y 复制一整行（包括行尾换行符），不同于D删除到行尾（不包括换行符） 注：y为操作符，可加计数前缀，例如：2yw=y2w（复制两个单词）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;三vim中的寄存器&#34;&gt;三、VIM中的寄存器&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;复制后的文本会保存在剪切板，Windows中的剪切板相当于Vim中的寄存器。&lt;/li&gt;
&lt;li&gt;查看寄存器的内容，用 :reg 命令&lt;/li&gt;
&lt;li&gt;VIM中共有九种类型的寄存器: （更多寄存器帮助 :help registers）&lt;/li&gt;
&lt;/ul&gt;
&lt;ol&gt;
&lt;li&gt;无名寄存器 &amp;quot;&lt;/li&gt;
&lt;li&gt;10 个编号寄存器 &amp;ldquo;0 到 &amp;ldquo;9&lt;/li&gt;
&lt;li&gt;行内删除寄存器 &amp;ldquo;-&lt;/li&gt;
&lt;li&gt;26 个命名的寄存器 &amp;ldquo;a 到 &amp;ldquo;z 或者 &amp;ldquo;A 到 &amp;ldquo;Z&lt;/li&gt;
&lt;li&gt;四个只读寄存器 &amp;ldquo;:、&amp;quot;.、&amp;rdquo;% 和 &amp;ldquo;#&lt;/li&gt;
&lt;li&gt;表达式寄存器 &amp;ldquo;=&lt;/li&gt;
&lt;li&gt;选择和拖放寄存器 &amp;ldquo;*、&amp;quot;+ 和 &amp;ldquo;~&lt;/li&gt;
&lt;li&gt;黑洞寄存器寄存器 &amp;ldquo;_&lt;/li&gt;
&lt;li&gt;最近搜索模式寄存器 &amp;ldquo;/&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;四vim复制粘贴步骤&#34;&gt;四、VIM复制粘贴步骤&lt;/h2&gt;
&lt;p&gt;1、将选择文本复制进寄存器&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;&amp;quot;&amp;gt;+&amp;lt;寄存器&amp;gt;+&amp;lt;复制文本&amp;gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;例如：复制一单词到系统剪切板（Windows中 * 和 + 寄存器效果一致）&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;*yw&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;2、粘贴寄存器中的内容&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;lt;&amp;quot;&amp;gt;+&amp;lt;寄存器&amp;gt;+&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;例如：粘贴该单词到系统任意位置&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;*p&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>PHP日期和时间格式</title>
        <link>https://www.bg7pbp.com/p/php-date-time-format/</link>
        <pubDate>Thu, 06 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/php-date-time-format/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%B9%B4%E6%9C%88%E6%97%A5&#34;&gt;一、年/月/日&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%B9%B4&#34;&gt;1、年&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E6%9C%88&#34;&gt;2、月&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E6%97%A5&#34;&gt;3、日&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4%E5%AE%9E%E4%BE%8B&#34;&gt;4、实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%97%B6%E5%88%86%E7%A7%92&#34;&gt;二、时:分:秒&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E6%97%B6&#34;&gt;1、时&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%88%86%E7%A7%92&#34;&gt;2、分:秒&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3%E5%AE%9E%E4%BE%8B&#34;&gt;3、实例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%97%B0%E5%B9%B4%E6%98%9F%E6%9C%9F%E5%A4%A9&#34;&gt;三、闰年、星期、天&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%85%B6%E4%BB%96&#34;&gt;四、其他&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PHP中的日期和时间主要是靠 date() 函数来获取并格式化的，虽说这东西使用频率非常高，但有时也会忘记或搞混，故现小结如下&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一年月日&#34;&gt;一、年/月/日&lt;/h2&gt;
&lt;h3 id=&#34;1年&#34;&gt;1、年&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Y（2010）：大写Y表示年四位数字&lt;br&gt;
y（10） ：小写y表示年的两位数字&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2月&#34;&gt;2、月&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;F（January）：大写F表示月份的英文全写（没有小写f）&lt;br&gt;
M（Jan） ：大写M表示月份的3个缩写字符&lt;br&gt;
m（01-12） ：小写m表示月份的数字，带前导&lt;br&gt;
n（1-12） ：小写n表示月份的数字，无前导&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;3日&#34;&gt;3、日&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;j（1-31） ：小写j表示月份的日期，无前导（没有大写的J）&lt;br&gt;
d（01-31） ：小写d表示月份的日期，有前导（没有大写D）&lt;br&gt;
S（st、nd、rd、th）：大写S表示日期的后缀，具体看日期数字为何&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;4实例&#34;&gt;4、实例&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;Y-m-j（2007-02-6 ）&lt;br&gt;
y-n-j（07-2-6）&lt;br&gt;
Y-M-j（2007-Feb-6）&lt;br&gt;
Y-m-d（2007-02-06）&lt;br&gt;
Y-F-jS（2007-February-6th）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;二时分秒&#34;&gt;二、时:分:秒&lt;/h2&gt;
&lt;h3 id=&#34;1时&#34;&gt;1、时&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;g（1-12）：小写g表示12小时制的小时数，无前导0&lt;br&gt;
h（01-12）：小写h表示12小时制的小时数，有前导0&lt;br&gt;
G（0-23）：大写G表示24小时制的小时数，无前导0&lt;br&gt;
H（01-23）：大写的H表示24小时制的小时数，有前导0&lt;br&gt;
a 表示小写的&amp;quot;am&amp;quot;和&amp;quot;pm&amp;quot;（上午、下午）&lt;br&gt;
A 表示大写的&amp;quot;AM&amp;quot;和&amp;quot;PM&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;2分秒&#34;&gt;2、分:秒&lt;/h3&gt;
&lt;p&gt;默认情况下，PHP解释显示的时间为&amp;quot;格林威治标准时间&amp;quot;，与我们本地的时间相差8个小时。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;i（1-60）：小写i表示分&lt;br&gt;
s（1-60)：小写s表示秒&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;3实例&#34;&gt;3、实例&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;g:i:s a（5:56:57 am）&lt;br&gt;
h:i:s A（05:56:57 AM）&lt;br&gt;
G:i:s（14:02:26）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;三闰年星期天&#34;&gt;三、闰年、星期、天&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;大写L表示判断今年是否闰年，布尔值，为真返回1，否则为0&lt;/li&gt;
&lt;li&gt;小写w表示星期几，数字形式表示&lt;/li&gt;
&lt;li&gt;大写W表示一年中的星期数&lt;/li&gt;
&lt;li&gt;小写t表示当前月份有多少天&lt;/li&gt;
&lt;li&gt;小写z表示今天是本年中第几天&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;四其他&#34;&gt;四、其他&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;大写T表示服务器的时间区域设置，如值为UTC&lt;/li&gt;
&lt;li&gt;大写I表示判断当前是否为夏令时，为真返回1，否则为0&lt;/li&gt;
&lt;li&gt;大写U表示从1970年1月1日到现在的总秒数，就是Unix时间纪元的UNIX时间戳。&lt;/li&gt;
&lt;li&gt;小写c表示ISO8601日期，日期格式为YYYY-MM-DD，用字母T来间隔日期和时间，时间格式为HH:MM:SS，时区使用格林威治标准时间(GMT)的偏差来表示，如值为2007-02-06T14:24:43+00:00&lt;/li&gt;
&lt;li&gt;小写r表示RFC822日期，如值为Tue, 06 Feb 2007 14:25:52 +0000&lt;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>关于CSS清除浮动</title>
        <link>https://www.bg7pbp.com/p/css-clear-float/</link>
        <pubDate>Wed, 05 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-clear-float/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%85%B3%E4%BA%8E%E6%B8%85%E9%99%A4%E6%B5%AE%E5%8A%A8&#34;&gt;一、关于清除浮动&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%B8%85%E9%99%A4css%E6%B5%AE%E5%8A%A8%E7%9A%84%E6%96%B9%E6%B3%95&#34;&gt;二、清除CSS浮动的方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80%E5%B8%A6clear%E5%B1%9E%E6%80%A7%E7%9A%84br%E6%A0%87%E7%AD%BE&#34;&gt;方法一：带clear属性的br标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C%E5%9C%A8css%E4%B8%AD%E4%BD%BF%E7%94%A8clear%E5%B1%9E%E6%80%A7&#34;&gt;方法二：在CSS中使用clear属性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%89%E5%9C%A8css%E4%B8%AD%E4%BD%BF%E7%94%A8overflow%E5%B1%9E%E6%80%A7&#34;&gt;方法三：在CSS中使用overflow属性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E5%9B%9B%E5%9C%A8css%E4%B8%AD%E4%BD%BF%E7%94%A8display%E5%B1%9E%E6%80%A7&#34;&gt;方法四：在CSS中使用display属性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%94%E5%9C%A8css%E4%B8%AD%E4%BD%BF%E7%94%A8%E4%BC%AA%E7%B1%BBafter&#34;&gt;方法五：在CSS中使用伪类:after&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;关于CSS清除浮动，这是CSS中的经典问题了，方法主要有，使用带clear属性的 BR 标签，在CSS中使用 Clear 属性、Overflow 属性、Display属性&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一关于清除浮动&#34;&gt;一、关于清除浮动&lt;/h2&gt;
&lt;p&gt;图一，单方向设置元素浮动，则元素将会按顺序紧挨相邻元素。另外为防止浮动错位，建议为浮动元素的容器设置宽度值。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/clear_float1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;清除浮动目的：1）解决页面错位问题 、2）解决子级元素浮动，导致父级元素背景无法自适应子级元素高度。&lt;/p&gt;
&lt;p&gt;图二，没有清除浮动时效果图&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/clear_float2.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;二清除css浮动的方法&#34;&gt;二、清除CSS浮动的方法&lt;/h2&gt;
&lt;h3 id=&#34;方法一带clear属性的br标签&#34;&gt;方法一：带clear属性的br标签&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;float_box&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;float_left&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;左浮动元素&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;float_right&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;右浮动元素&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;all&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;　//正确的位置
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;br&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;all&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;　//错误的位置
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;no_float&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;看看我的位置&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/clear_float3.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图三，错误的位置仅仅能清除左右浮动特性，无法解决子级元素浮动，导致父级元素背景无法自适应子级元素高度。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/clear_float4.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图四，将带清除浮动的属性的 br 标签，放置在浮动元素之后，问题已解决（IE7除外）&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/clear_float5.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;图五，IE7依然未能解决背景高度问题&lt;/p&gt;
&lt;p&gt;方法：除正确添加 br 标签外，再添加CSS属性，float_box｛zoom:1;｝（注意：仅添加zoom，只能兼容IE7）&lt;/p&gt;
&lt;h3 id=&#34;方法二在css中使用clear属性&#34;&gt;方法二：在CSS中使用clear属性&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;no_float&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zoom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;用于兼容IE7&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用法：在需要清除浮动的元素中添加clear属性，效果如图三&lt;/p&gt;
&lt;p&gt;缺点：不能能达到图四效果，因为不能做到紧跟浮动元素之后。（IE7无此缺点，因为添加了zoom）&lt;/p&gt;
&lt;h3 id=&#34;方法三在css中使用overflow属性&#34;&gt;方法三：在CSS中使用overflow属性&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;n&#34;&gt;zoom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;//要兼容IE6，添加此项&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;用法：在浮动元素所在容器元素中，添加overflow属性，效果如图三。&lt;/p&gt;
&lt;p&gt;缺点：会将溢出部分隐藏（注：低版本Firefox可能无法解决背景高度问题）&lt;/p&gt;
&lt;h3 id=&#34;方法四在css中使用display属性&#34;&gt;方法四：在CSS中使用display属性&lt;/h3&gt;
&lt;p&gt;问题多多，不建议使用&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;方法五在css中使用伪类after&#34;&gt;方法五：在CSS中使用伪类:after&lt;/h3&gt;
&lt;p&gt;通过增加一个高度为零的伪类层，达到不用添加多余 br 标签目的。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zoom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;解决IE7无法使用伪类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;visibility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;zoom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;解决IE7无法使用伪类&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;visibility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;一个更简单的方法：&lt;a href=&#34;http://nicolasgallagher.com/micro-clearfix-hack/&#34;&gt;《A new micro clearfix hack》&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;float_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;n&#34;&gt;zoom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>《CSS那些事儿》应用篇</title>
        <link>https://www.bg7pbp.com/p/css-those-things-application/</link>
        <pubDate>Tue, 04 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-those-things-application/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80css%E6%BB%A4%E9%95%9C&#34;&gt;一、CSS滤镜&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E6%96%87%E5%AD%97%E4%B8%8E%E8%83%8C%E6%99%AF%E5%8D%8A%E9%80%8F%E6%98%8E&#34;&gt;1. 文字与背景半透明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E4%BB%85%E8%83%8C%E6%99%AF%E5%8D%8A%E9%80%8F%E6%98%8E&#34;&gt;2. 仅背景半透明&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-ie6%E6%98%BE%E7%A4%BApng-24%E5%9B%BE%E7%89%87&#34;&gt;3. IE6显示PNG-24图片&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Ctab%E9%80%89%E9%A1%B9%E5%8D%A1&#34;&gt;二、Tab选项卡&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1-%E6%96%B9%E6%B3%95%E4%B8%80&#34;&gt;1. 方法一&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2-%E6%96%B9%E6%B3%95%E4%BA%8C&#34;&gt;2. 方法二&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3-%E6%96%B9%E6%B3%95%E4%B8%89&#34;&gt;3. 方法三&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://www.wangyan.cloud/tag/#css/&#34;&gt;《CSS 那些事儿》阅读笔记&lt;/a&gt; 第二篇（应用篇）。本篇中主要介绍ＣＳＳ滤镜以及Tab选项卡各自实现方式..&lt;/p&gt;
&lt;h2 id=&#34;一css滤镜&#34;&gt;一、CSS滤镜&lt;/h2&gt;
&lt;h3 id=&#34;1-文字与背景半透明&#34;&gt;1. 文字与背景半透明&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;list_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#DCDCDC&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;alpha&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;50&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;IE&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;私有CSS滤镜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;//&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;FF&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;私有CSS滤镜&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;｝&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;list_box&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;小志&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;bg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; // 仅背景半透明时使用
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2-仅背景半透明&#34;&gt;2. 仅背景半透明&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;list_box&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;｝&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;.list_box&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;li{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;z-index&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;list_box&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;bg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;284&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#dcdcdc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;alpha&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;opacity&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mf&#34;&gt;0.1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3-ie6显示png-24图片&#34;&gt;3. IE6显示PNG-24图片&lt;/h3&gt;
&lt;p&gt;主要是通过IE的PNG-24转换滤镜实现，PNG-24即24位色彩模式支持8位透明度。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#ff0000&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sx&#34;&gt;png_24.png&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;no-repeat&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;n&#34;&gt;_background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#ff0000&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;   &lt;span class=&#34;n&#34;&gt;_filter&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;progid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;DXImageTransform&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Microsoft&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nf&#34;&gt;AlphaImageLoader&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;png_24.png&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sizingMethod&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;crop&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;sizingMethod的值：1.image（容器适应图片尺寸）、2.crop(裁剪图片适应容器)、3.（拉伸图片适应容器）&lt;/p&gt;
&lt;h2 id=&#34;二tab选项卡&#34;&gt;二、Tab选项卡&lt;/h2&gt;
&lt;h3 id=&#34;1-方法一&#34;&gt;1. 方法一&lt;/h3&gt;
&lt;p&gt;这是早期通过iframe框架标签实现的选项卡模式。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;open_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标签一&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;target&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;open_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标签二&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;iframe&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;scrolling&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;no&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;frameborder&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;open_url&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;iframe&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;2-方法二&#34;&gt;2. 方法二&lt;/h3&gt;
&lt;p&gt;这是主流的Tab选项卡实现模式，采取的是标题float浮动布局，选项卡区position绝对定位布局。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;up&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;go_to(1);&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标题一
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;block&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文本一&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;go_to(2);&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标题二
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文本二&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tab&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;226&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tab&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;up&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#ccc&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tab&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;114&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#eee&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;-1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tab&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;26&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;226&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#d4d3d3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;tab&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;padding-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;10&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementsByTagName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;h3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;).&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementsByTagName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;div&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;go_to&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ao&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;kd&#34;&gt;var&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;length&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;++&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;ao&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nx&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; up&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; block&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nx&#34;&gt;h&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nx&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;i&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;className&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;3-方法三&#34;&gt;3. 方法三&lt;/h3&gt;
&lt;p&gt;该方法采取的是标题和选项卡区均float浮动布局，缺点是缺乏XHTML语义化。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;tab&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;up&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;go_to(1);&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标题一
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h3&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;onclick&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;go_to(2);&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;标题二
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;block&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文本一&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文本二&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;CSS基本不变，将内容区（#tab div）绝对定位改为浮动即可。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>《CSS那些事儿》元素篇</title>
        <link>https://www.bg7pbp.com/p/css-those-things-elements/</link>
        <pubDate>Mon, 03 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-those-things-elements/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E7%BD%91%E9%A1%B5%E6%96%87%E6%9C%AC%E4%BF%AE%E9%A5%B0&#34;&gt;一、网页文本修饰&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-%E6%96%87%E5%AD%97%E6%A0%B7%E5%BC%8F&#34;&gt;1.1. 文字样式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-%E5%B8%B8%E7%94%A8%E5%AD%97%E4%BD%93%E6%97%8F&#34;&gt;1.2. 常用字体族&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-%E6%AE%B5%E8%90%BD%E6%A0%B7%E5%BC%8F&#34;&gt;1.3. 段落样式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14-%E7%89%B9%E6%AE%8A%E6%95%88%E6%9E%9C&#34;&gt;1.4. 特殊效果&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15-%E6%96%87%E5%AD%97%E9%93%BE%E6%8E%A5&#34;&gt;1.5. 文字链接&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%9B%BE%E7%89%87%E7%9A%84%E5%A4%84%E7%90%86%E4%B8%8E%E7%BE%8E%E5%8C%96&#34;&gt;二、图片的处理与美化&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E5%B8%B8%E8%A7%81%E5%9B%BE%E5%83%8F%E6%A0%BC%E5%BC%8F&#34;&gt;2.1. 常见图像格式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-css%E8%83%8C%E6%99%AF%E5%B1%9E%E6%80%A7&#34;&gt;2.2. CSS背景属性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-css%E5%9B%BE%E5%83%8F%E6%8B%BC%E5%90%88%E6%8A%80%E6%9C%AF&#34;&gt;2.3. CSS图像拼合技术&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E9%A1%B5%E9%9D%A2%E4%B8%AD%E7%9A%84%E5%88%97%E8%A1%A8&#34;&gt;三、页面中的列表&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E6%9C%89%E5%BA%8F%E6%97%A0%E5%BA%8F%E5%88%97%E8%A1%A8&#34;&gt;3.1. 有序无序列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E8%87%AA%E5%AE%9A%E4%B9%89%E5%88%97%E8%A1%A8&#34;&gt;3.2. 自定义列表&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33%E5%88%97%E8%A1%A8%E6%A8%A1%E5%BC%8F%E5%AF%BC%E8%88%AA&#34;&gt;3.3、列表模式导航&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#34%E4%BA%8C%E7%BA%A7%E8%8F%9C%E5%8D%95%E5%AF%BC%E8%88%AA&#34;&gt;3.4、二级菜单导航&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E8%A1%A8%E5%8D%95%E7%BE%8E%E5%8C%96&#34;&gt;四、表单美化&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E8%A1%A8%E5%8D%95%E5%85%83%E7%B4%A0%E7%89%B9%E6%80%A7&#34;&gt;4.1 表单元素特性&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E7%99%BB%E5%BD%95%E6%A1%86%E5%88%B6%E4%BD%9C&#34;&gt;4.2 登录框制作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E6%90%9C%E7%B4%A2%E6%A1%86%E5%88%B6%E4%BD%9C&#34;&gt;4.3. 搜索框制作&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#44-%E5%8F%8D%E9%A6%88%E8%A1%A8%E5%8D%95%E5%88%B6%E4%BD%9C&#34;&gt;4.4 反馈表单制作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E8%A1%A8%E6%A0%BC%E7%9A%84%E4%B8%96%E7%95%8C&#34;&gt;五、表格的世界&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51-%E6%AD%A3%E7%A1%AE%E7%9A%84%E8%A1%A8%E6%A0%BC%E7%9A%84%E6%A0%BC%E5%BC%8F&#34;&gt;5.1. 正确的表格的格式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52-%E7%BB%86%E7%BA%BF%E8%A1%A8%E6%A0%BC&#34;&gt;5.2. 细线表格&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#53-%E9%9A%94%E8%A1%8C%E6%8D%A2%E8%89%B2%E8%A1%A8%E6%A0%BC&#34;&gt;5.3. 隔行换色表格&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#54-%E6%97%A5%E5%8E%86%E8%A1%A8%E5%88%B6%E4%BD%9C&#34;&gt;5.4. 日历表制作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD&#34;&gt;相关下载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://www.wangyan.cloud/tag/#css/&#34;&gt;《CSS 那些事儿》阅读笔记&lt;/a&gt; 第二篇（元素篇）。篇中主要介绍网页文本修饰、图片的处理与美化、页面中的列表、表单的美化实例、以及表格正确的应用..&lt;/p&gt;
&lt;h2 id=&#34;一网页文本修饰&#34;&gt;一、网页文本修饰&lt;/h2&gt;
&lt;h3 id=&#34;11-文字样式&#34;&gt;1.1. 文字样式&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;font:font-style || font-variant || font-weight || font-size/line-height || font-family
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;font-style：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）normal、2）italic:斜体、3）oblique:倾斜的字体
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;font-variant：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）normal、2）small-caps:稍小的大写字母显示
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;font-weight：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）normal、2）bold:等于700、3）bolder、lighter:更粗、更细
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;font-size：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;一般用px或em为单位,默认值medium,即根据对象字体进行调整
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;line-height：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）normal、2）百分比（基于字体高度尺寸）、3）浮点数+单位（无单位则为相对高度）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;12-常用字体族&#34;&gt;1.2. 常用字体族&lt;/h3&gt;
&lt;p&gt;serif（有装饰钩）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）Georgia、2）Times New Roman（默认）、3）Garamond
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;sans-serif（无装饰钩）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）verdana、2）Helvetica、3）Arial（默认）、4）&amp;quot;Trebuchet MS&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Monospace（等宽字体）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）courier（默认）、2）Monaco、3）&amp;quot;Andale Mono&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;13-段落样式&#34;&gt;1.3. 段落样式&lt;/h3&gt;
&lt;p&gt;text-transform&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）capitalize：首字母大写、2）uppercase：全大写、3）lowercase ：全小写
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;text-indent&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）百分比、2）浮点数+单位（&amp;quot;2em&amp;quot;表示两个汉字）
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;letter-spacing/word-spacing（字符/单词间距）&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;1）normal、2）浮点数+单位
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;14-特殊效果&#34;&gt;1.4. 特殊效果&lt;/h3&gt;
&lt;p&gt;:first-letter（首字下沉）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;p:first-letter{float:left;font-weight:bold;font-size:2em} 
p{clear:both}
解析：左浮动已占据多行，加粗，设置大小，清除浮动以避免p高度受影响&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;overflow&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;visible（默认）&lt;/li&gt;
&lt;li&gt;hidden（隐藏，配合&amp;quot;text-indent&amp;quot;可实现图片代替文字特效）&lt;/li&gt;
&lt;li&gt;scrool（滚动条）&lt;/li&gt;
&lt;li&gt;auto（自动滚动条）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;15-文字链接&#34;&gt;1.5. 文字链接&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;:link（访问前样式）&lt;/li&gt;
&lt;li&gt;:visited（访问后样式）&lt;/li&gt;
&lt;li&gt;:hover（悬停样式）&lt;/li&gt;
&lt;li&gt;active（单击未释放样式）&lt;/li&gt;
&lt;li&gt;text-decoration:1）underline、2）overline、3）linethrough、4）none&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二图片的处理与美化&#34;&gt;二、图片的处理与美化&lt;/h2&gt;
&lt;h3 id=&#34;21-常见图像格式&#34;&gt;2.1. 常见图像格式&lt;/h3&gt;
&lt;p&gt;8位(bit)色深=256色，24位色深=1千6百万色&lt;/p&gt;
&lt;p&gt;JPG格式&lt;/p&gt;
&lt;p&gt;高压缩，较高质量，24位色深，有损压缩&lt;/p&gt;
&lt;p&gt;GIF格式&lt;/p&gt;
&lt;p&gt;高压缩，低质量，8位色深，无损压缩（超过256色变，则为有损压缩），支持1位透明度，适用于图标、单色插图、文本块。&lt;/p&gt;
&lt;p&gt;PNG格式&lt;/p&gt;
&lt;p&gt;支持8位和24位色彩模式，高压缩，高质量，无损压缩，载入1/64图片信息即可预览，1位或8位透明度&lt;/p&gt;
&lt;h3 id=&#34;22-css背景属性&#34;&gt;2.2. CSS背景属性&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;background-color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-repeat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-attachment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-position&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;background-attachment&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;scroll:背景图像是随对象内容滚动 （默认值）&lt;/li&gt;
&lt;li&gt;fixed:背景图像固定&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;background-position&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;关键词控制：top、center、bottom、left、right&lt;/li&gt;
&lt;li&gt;精确控制：
&lt;ul&gt;
&lt;li&gt;先X轴后Y轴&lt;/li&gt;
&lt;li&gt;只有一个值则Y轴为50%&lt;/li&gt;
&lt;li&gt;百分比是以图像中心为基准，PX是以图片左上角为基准&lt;/li&gt;
&lt;li&gt;不受padding影响&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-css图像拼合技术&#34;&gt;2.3. CSS图像拼合技术&lt;/h3&gt;
&lt;p&gt;CSS Sprite 常用来合并频繁使用的图形元素。即将一些小ico合并在一张图片中，然后使用background-position来显示相应图标。注意一般定位X、Y轴要取负值。&lt;/p&gt;
&lt;h2 id=&#34;三页面中的列表&#34;&gt;三、页面中的列表&lt;/h2&gt;
&lt;h3 id=&#34;31-有序无序列表&#34;&gt;3.1. 有序无序列表&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;list-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;list-style-image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;list-style-position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;list-style-type&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;list-style-image&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;none&lt;/li&gt;
&lt;li&gt;url(&amp;quot;&amp;quot;) （none或url错误，则list-style-type代替）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;list-style-position&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;outside&lt;/li&gt;
&lt;li&gt;inside （列表项目标记放置于文本内）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;list-style-type&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;disc（实心圆）&lt;/li&gt;
&lt;li&gt;circle（空心圆）&lt;/li&gt;
&lt;li&gt;squar（实心方块）&lt;/li&gt;
&lt;li&gt;decimal（阿拉伯数字）&lt;/li&gt;
&lt;li&gt;lower-roman（小写罗马数字）&lt;/li&gt;
&lt;li&gt;upper-roman（大写罗马数字）&lt;/li&gt;
&lt;li&gt;lower-alpha（小写英文字母）&lt;/li&gt;
&lt;li&gt;upper-alpha（大写英文字母）&lt;/li&gt;
&lt;li&gt;none&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ul和ol边距问题&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;IE8、Firefox对应padding-left&lt;/li&gt;
&lt;li&gt;IE6、IE7对应margin-left&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;32-自定义列表&#34;&gt;3.2. 自定义列表&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;一级列表标题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;二级列表内容&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; // dt后面可以跟随多个dd
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; //多级列表不能直接嵌套dl，必须位于dd内
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;二级列表标题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;二级列表标题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;dl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33列表模式导航&#34;&gt;3.3、列表模式导航&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;site_nav&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; //将所有导航标签，包含于容器内
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; //添加导航标题，可用CSS隐藏
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;map&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;nav&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; //使用map标签，必须带ID属性，有利于SEO
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		- 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;map&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;padding&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;list-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;site_nav&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;设置容器宽度&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;site_nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;h1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;隐藏标题&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;22&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;不对宽度属性调整&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;使用默认值&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;“&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;”&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;text-decoration&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#333&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#fff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;块状化&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;）&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;不设置宽度&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;使用auto&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;3&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;）&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;继承父级高度&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;、&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;4&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;）&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;文本居中&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;，&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;无下划线&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;nav&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#e8e8e8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;34二级菜单导航&#34;&gt;3.4、二级菜单导航&lt;/h3&gt;
&lt;p&gt;HTML省略，仅列出关键css属性&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;none&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;149&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四表单美化&#34;&gt;四、表单美化&lt;/h2&gt;
&lt;h3 id=&#34;41-表单元素特性&#34;&gt;4.1 表单元素特性&lt;/h3&gt;
&lt;p&gt;复选框、单选按钮、文件浏览选择框、下拉列表框随系统主题和浏览器不同而改变，即便添加CSS后也是如此。&lt;/p&gt;
&lt;h3 id=&#34;42-登录框制作&#34;&gt;4.2 登录框制作&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;method（属性），值可以是get（附在URL结尾）&lt;/li&gt;
&lt;li&gt;post（已单独消息发送）&lt;/li&gt;
&lt;li&gt;action（动作），即提交表单时载入的URL地址。&lt;/li&gt;
&lt;li&gt;label中for属性值userName可以激活ID等于userName的表单元素&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c&#34;&gt;/* 经过文字时，鼠标变为手型 */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;cursor&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;pointer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; &lt;span class=&#34;c&#34;&gt;/* 解决复选框玉文字对齐不一致*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;keepLogin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;vertical-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;middle&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;userName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;用户名：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;userName&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;checkbox&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;keepLogin&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;keepLogin&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;记住我的登录信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;btn_login&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;登录&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;43-搜索框制作&#34;&gt;4.3. 搜索框制作&lt;/h3&gt;
&lt;p&gt;给出html结构，css省略，注意.search_box相对定位，search_tips绝对定位即可。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search_box&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	## 站内搜索
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;value&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;搜索&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;search_tips&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			### 搜索提示
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				- &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文字文字文字&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;				- &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;#&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;文字文字文字&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;44-反馈表单制作&#34;&gt;4.4 反馈表单制作&lt;/h3&gt;
&lt;p&gt;1）fieldset:表单域、2）legend:表单域标题、3）input(type=&amp;ldquo;file&amp;rdquo;):文件上传、4）textarea:(文本域)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;feedback&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	## 反馈表单
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;method&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;post&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;action&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fieldset&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;base_info&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;legend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;用户信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;legend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;userName&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;用户名：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;userName&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fieldset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fieldset&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;feedback_content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;legend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;反馈内容&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;legend&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;up_file&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;相关图片：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;input&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;file&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;up_file&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;for&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;内容：&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;label&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;textarea&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;msg&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;textarea&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;fieldset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;submit&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;提交&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;reset&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;重置&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;button&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;form&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五表格的世界&#34;&gt;五、表格的世界&lt;/h2&gt;
&lt;h3 id=&#34;51-正确的表格的格式&#34;&gt;5.1. 正确的表格的格式&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;table:定义表格&lt;/li&gt;
&lt;li&gt;caption:表格的标题，必须紧跟table后&lt;/li&gt;
&lt;li&gt;thead:表格的表头&lt;/li&gt;
&lt;li&gt;tbody:表格的主体，可多个tbody，以便分组&lt;/li&gt;
&lt;li&gt;tfoot:表格的页脚&lt;/li&gt;
&lt;li&gt;tr:定义表格行&lt;/li&gt;
&lt;li&gt;th:表格内表头单元格&lt;/li&gt;
&lt;li&gt;td:表格内单元格&lt;/li&gt;
&lt;li&gt;colgroup:表格列的分组，用来对单元格宽度调整。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;colgroup一般用来定义宽度，颜色无效，但可以通过相邻或子选择符的方式来定义。th颜色需单独定义。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#f4f4f4&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#999&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;center&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#e8e8e8&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;tfoot&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;text-align&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background-color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#fff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;colgroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;red&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;green&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表头信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;colgroup&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;colgroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;thead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格标题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格标题&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;thead&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tbody&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格内单元格&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格内单元格&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格内单元格&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格内单元格&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tbody&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tfoot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;colspan&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;表格的页脚&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;tfoot&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;52-细线表格&#34;&gt;5.2. 细线表格&lt;/h3&gt;
&lt;p&gt;应用border-collapse属性合并单元格之间的边即可。默认值separate独立不合并，值collapse为合并。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;border-collapse&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;collapse&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;th&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;td&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;}&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;53-隔行换色表格&#34;&gt;5.3. 隔行换色表格&lt;/h3&gt;
&lt;p&gt;1）相邻选择符法、2）为每个tr标签加class法、3）固定单元格高度，用图片代替background-color法&lt;/p&gt;
&lt;h3 id=&#34;54-日历表制作&#34;&gt;5.4. 日历表制作&lt;/h3&gt;
&lt;p&gt;HTML代码如下，css省略，主要colgroup下的col标签应用，以及相邻选择符的应用。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;今天是2010年9月26日&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;caption&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;colgroup&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;7&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;col&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;day_off&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;col&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;5&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;                &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;col&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;span&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;day_off&amp;#34;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;/&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;colgroup&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;table&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;相关下载&#34;&gt;相关下载&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c0srqlsy83&#34;&gt;《CSS那些事儿》示例文件&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>《CSS那些事儿》布局篇</title>
        <link>https://www.bg7pbp.com/p/css-those-things-layout/</link>
        <pubDate>Sun, 02 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-those-things-layout/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E6%96%87%E6%A1%A3%E7%B1%BB%E5%9E%8B&#34;&gt;一、文档类型&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-strict%E4%B8%A5%E6%A0%BC%E5%9E%8B&#34;&gt;1.1 STRICT（严格型）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-transition%E8%BF%87%E6%B8%A1%E7%B1%BB%E5%9E%8B&#34;&gt;1.2 TRANSITION（过渡类型）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-frameset%E6%A1%86%E6%9E%B6%E7%B1%BB%E5%9E%8B&#34;&gt;1.3 FRAMESET(框架类型）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E7%9B%92%E6%A8%A1%E5%9E%8B&#34;&gt;二、盒模型&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-%E7%9B%92%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%AE%A1%E7%AE%97%E6%A0%87%E5%87%86%E6%A8%A1%E5%BC%8F&#34;&gt;2.1 盒模型的计算（标准模式）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E7%9B%92%E6%A8%A1%E5%9E%8B%E7%9A%84%E8%AE%A1%E7%AE%97%E6%80%AA%E5%BC%82%E6%A8%A1%E5%BC%8F&#34;&gt;2.2 盒模型的计算（怪异模式）&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AE%BE%E8%AE%A1%E5%8E%9F%E5%88%99&#34;&gt;三、设计原则&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E4%B8%A4%E5%88%97%E5%AE%9A%E5%AE%BD%E7%BB%93%E6%9E%84&#34;&gt;四、两列定宽结构&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E4%B8%A4%E5%88%97%E5%AE%9A%E5%AE%BD%E5%AE%9A%E9%AB%98&#34;&gt;4.1. 两列定宽、定高&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-%E4%B8%A4%E5%88%97%E5%AE%9A%E5%AE%BD%E8%87%AA%E9%80%82%E5%BA%94%E9%AB%98%E5%BA%A6&#34;&gt;4.2. 两列定宽、自适应高度&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E8%B4%9F%E8%BE%B9%E8%B7%9D%E5%BA%94%E7%94%A8&#34;&gt;4.3. 负边距应用&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E4%B8%A4%E5%88%97%E5%AE%BD%E5%BA%A6%E8%87%AA%E9%80%82%E5%BA%94%E7%BB%93%E6%9E%84&#34;&gt;五、两列宽度自适应结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E5%8D%95%E5%88%97%E5%AE%9A%E5%AE%BD%E5%8D%95%E5%88%97%E8%87%AA%E9%80%82%E5%BA%94%E7%BB%93%E6%9E%84&#34;&gt;六、单列定宽、单列自适应结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83%E4%B8%A4%E5%88%97%E7%AD%89%E9%AB%98&#34;&gt;七、两列等高&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#71-%E8%83%8C%E6%99%AF%E6%A8%A1%E6%8B%9F&#34;&gt;7.1 背景模拟&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#72-%E8%B4%9F%E8%BE%B9%E8%B7%9D%E5%AE%9E%E7%8E%B0&#34;&gt;7.2 负边距实现&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#73-%E8%BE%B9%E6%A1%86%E6%A8%A1%E6%8B%9F&#34;&gt;7.3 边框模拟&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#74-javascript%E8%84%9A%E6%9C%AC&#34;&gt;7.4 JavaScript脚本&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E4%B8%A4%E5%88%97%E5%AE%9A%E5%AE%BD%E4%B8%AD%E9%97%B4%E8%87%AA%E9%80%82%E5%BA%94%E7%BB%93%E6%9E%84&#34;&gt;八、两列定宽，中间自适应结构&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#81-width%E9%BB%98%E8%AE%A4%E5%80%BC%E4%B8%8Efloat%E5%85%B3%E7%B3%BB&#34;&gt;8.1 width默认值与float关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#82-html%E7%BB%93%E6%9E%84&#34;&gt;8.2 HTML结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#83--css%E6%A0%B7%E5%BC%8F&#34;&gt;8.3  CSS样式&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B9%9D%E5%B7%A6%E4%BE%A7%E5%AE%9A%E5%AE%BD%E5%8F%B3%E4%BE%A7%E5%8F%8A%E4%B8%AD%E9%97%B4%E8%87%AA%E9%80%82%E5%BA%94%E7%BB%93%E6%9E%84&#34;&gt;九、左侧定宽，右侧及中间自适应结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8D%81%E4%B8%89%E5%88%97%E5%AE%BD%E5%BA%A6%E8%87%AA%E9%80%82%E5%BA%94%E7%BB%93%E6%9E%84&#34;&gt;十、三列宽度自适应结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD&#34;&gt;相关下载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是 &lt;a href=&#34;http://www.wangyan.cloud/tag/#css/&#34;&gt;《CSS 那些事儿》阅读笔记&lt;/a&gt; 第二篇（布局篇）。本篇中主要介绍DOCTYPE、盒模型的理解以及一些设计原则，以及常见的两列，三列或多列页面布局的实现方式&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一文档类型&#34;&gt;一、文档类型&lt;/h2&gt;
&lt;p&gt;DOCTYPE 即 DTD 声明，用于指定页面所使用XHTML或HTML的版本。&lt;/p&gt;
&lt;h3 id=&#34;11-strict严格型&#34;&gt;1.1 STRICT（严格型）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; !DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;12-transition过渡类型&#34;&gt;1.2 TRANSITION（过渡类型）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; !DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;13-frameset框架类型&#34;&gt;1.3 FRAMESET(框架类型）&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt; !DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Frameset//EN&amp;quot; &amp;quot;http://www.w3.org/TR/Xhtml1/DTD/xhtml1-frameset.dtd&amp;quot;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;二盒模型&#34;&gt;二、盒模型&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;页面任何元素都是以矩形方式存在，如DIV标签。&lt;/li&gt;
&lt;li&gt;如果元素加上背景，那么该背景也将出现在“padding”中。&lt;/li&gt;
&lt;li&gt;使用“margin”可以将相邻元素推开，反之“-margin”可以吸附到身边。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;21-盒模型的计算标准模式&#34;&gt;2.1 盒模型的计算（标准模式）&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IE存在两种渲染：Quirks(怪异模式）、Standard（标准模式）&lt;/li&gt;
&lt;li&gt;触发怪异模式条件之一是DTD错误。&lt;/li&gt;
&lt;li&gt;怪异模式会根据内容自适应高度。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;盒模型实际宽：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;盒模型实际高：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;margin-top + border-top-width + padding-top + height + padding-bottom + border-bottom-width + margin-bottom
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;22-盒模型的计算怪异模式&#34;&gt;2.2 盒模型的计算（怪异模式）&lt;/h3&gt;
&lt;p&gt;理想状态&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;border和padding计入了width值，故width实际占据了
margin-left + width + margin-right
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;其他状态&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;宽：标准值 + 20px 高：标准值 + 38px
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;三设计原则&#34;&gt;三、设计原则&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;注意样式重用性（使用外联样式表、重复内容用Class选择符）&lt;/li&gt;
&lt;li&gt;注意浮动和清除浮动&lt;/li&gt;
&lt;li&gt;页面布局中的定位方式（绝对定位布局要慎重）&lt;/li&gt;
&lt;li&gt;避免过度使用ID选择符（ID在一个页面只出现一次）&lt;/li&gt;
&lt;li&gt;避免选择符使用“字母+数字”命名&lt;/li&gt;
&lt;li&gt;勿盲目使用最求CSS布局（JS还是要用滴）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;四两列定宽结构&#34;&gt;四、两列定宽结构&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;header&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;头部信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mainBox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        主要内容区域
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;sideBox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;侧边栏&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;底部信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;41-两列定宽定高&#34;&gt;4.1. 两列定宽、定高&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;方法：宽高确定，mainBox、SideBox 左右浮动。&lt;br&gt;
缺点：内容过多超出高度后会溢出。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;42-两列定宽自适应高度&#34;&gt;4.2. 两列定宽、自适应高度&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;方法：去掉 container、mainBox、SideBox 高度，mainBox、SideBox 左右浮动、footer 清除左右浮动（必须）。&lt;br&gt;
注意：footer 清除浮动不能直接使用 “clear:both”，否则 footer 会紧挨  container。只能对 container 使用 overflow 伪类 :after 来清除浮动。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&#34;43-负边距应用&#34;&gt;4.3. 负边距应用&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;如果 mainBox、SideBox 宽度之和大于 container 宽度，将导致错位。&lt;br&gt;
为此可对 SideBox 应用负边距 “margin-left:-XX”，或对 mainBox 应用 margin-right:-XX&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;原理：外边距margin的作用是增加容器与容器的间距，负值是减少间距。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/margin.PNG&#34; alt=&#34;负边距margin示意图&#34; title=&#34;负边距margin示意图&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;五两列宽度自适应结构&#34;&gt;五、两列宽度自适应结构&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;方法：将mainBox、SideBox宽度单位px改为百分比。（注意该宽度并不是盒模型的总宽度，而是盒模型内容区域width的宽度。）&lt;br&gt;
缺点：IE7及以下版本出现错位。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;解决方法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#footer{width:100%}
#footer{clear:both}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;六单列定宽单列自适应结构&#34;&gt;六、单列定宽、单列自适应结构&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;方法：mainBox 宽 70%、SideBox 宽 200px&lt;br&gt;
缺点：缩小窗口会错位、用负边距解决，则 mainBox 与 SideBox 内容会重叠。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;解决方法：浮动及清除浮动失效，无法撑开父级元素高度，可用JS解决。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;container&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mainBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;auto&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;七两列等高&#34;&gt;七、两列等高&lt;/h2&gt;
&lt;h3 id=&#34;71-背景模拟&#34;&gt;7.1 背景模拟&lt;/h3&gt;
&lt;p&gt;方法：背景Y轴平铺，即Repeat-y 缺点：宽度必须确定、经常要修改图片。&lt;/p&gt;
&lt;h3 id=&#34;72-负边距实现&#34;&gt;7.2 负边距实现&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;overflow&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;//完全清除浮动，以自适应高度&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mainBox&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;padding-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;9999&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;margin-bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-9999&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;err&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;visibility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;//清除左右浮动&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;73-边框模拟&#34;&gt;7.3 边框模拟&lt;/h3&gt;
&lt;p&gt;缺点：不能使用背景图片、必须保证一边高度不能大于另一边（mainBox ）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;relative&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mainBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;680&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;border-right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#AAAAAA&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;position&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;absolute&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;top&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;right&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;280&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;#&lt;/span&gt;&lt;span class=&#34;nn&#34;&gt;container&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;display&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;block&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;visibility&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;hidden&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;line-height&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;clear&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;both&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;c&#34;&gt;/* 清除内容区域的左右浮动 */&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;74-javascript脚本&#34;&gt;7.4 JavaScript脚本&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;mh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;mainBox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nx&#34;&gt;sh&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;document&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;getElementById&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;sideBox&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientHeight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientHeight&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;mh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;sh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientHeight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nx&#34;&gt;sh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;mh&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;clientHeight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;px&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;八两列定宽中间自适应结构&#34;&gt;八、两列定宽，中间自适应结构&lt;/h2&gt;
&lt;h3 id=&#34;81-width默认值与float关系&#34;&gt;8.1 width默认值与float关系&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;如果width=auto（默认值），则width=浏览器窗口所能显示的最大值。&lt;/li&gt;
&lt;li&gt;如果width=auto，且有float属性，则width=随盒模型中内容而变化。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;82-html结构&#34;&gt;8.2 HTML结构&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;header&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;头部信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;container&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;mainBox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;content&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;主要内容区域&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;subMainBox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;次内容区域&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;sideBox&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;侧边栏&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;class&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;footer&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;底部信息&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;div&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;83--css样式&#34;&gt;8.3  CSS样式&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;思路：mainBox 左浮动，且宽度100%占据一行；&lt;br&gt;
其子元素 content 宽度为 auto ，且用 margin(不用padding) 为其左右留下空白；&lt;br&gt;
subMainbox、sideBox 利用负边距原理被吸到 content 的左右空白区域，注意的是 subMainbox 负边距为&amp;quot;-100%&amp;ldquo;而非&amp;rdquo;-300px&amp;quot;&amp;hellip;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mianBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#FFF&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mianBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;210&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;310&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;subMainBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;300&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-200&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;九左侧定宽右侧及中间自适应结构&#34;&gt;九、左侧定宽，右侧及中间自适应结构&lt;/h2&gt;
&lt;p&gt;这个很好理解，沿用上面代码，并修改以下部分。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mianBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;310&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-40&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;十三列宽度自适应结构&#34;&gt;十、三列宽度自适应结构&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;mianBox&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;21&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;41&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;subMainBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;40&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-100&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nc&#34;&gt;sideBox&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;float&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;width&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;20&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;margin-left&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;-20&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#666&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;相关下载&#34;&gt;相关下载&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c0srqlsy83&#34;&gt;《CSS那些事儿》示例文件&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>《CSS 那些事儿》入门篇</title>
        <link>https://www.bg7pbp.com/p/css-those-things-intro/</link>
        <pubDate>Sat, 01 Jan 2011 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-those-things-intro/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E8%AE%A4%E8%AF%86css&#34;&gt;一、认识CSS&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11-css%E7%9A%84%E5%9F%BA%E6%9C%AC%E7%BB%93%E6%9E%84&#34;&gt;1.1 CSS的基本结构&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12-css%E4%B8%AD%E7%9A%84%E6%B3%A8%E9%87%8A&#34;&gt;1.2 CSS中的注释&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13-css%E7%9A%84%E7%AE%80%E5%86%99&#34;&gt;1.3 CSS的简写&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E6%8E%8C%E6%8F%A1css%E9%80%89%E6%8B%A9%E7%AC%A6&#34;&gt;二、掌握CSS选择符&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21-css%E9%80%89%E6%8B%A9%E7%AC%A6%E7%A7%8D%E7%B1%BB&#34;&gt;2.1 CSS选择符种类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22-%E5%B1%9E%E6%80%A7%E9%80%89%E6%8B%A9%E7%AC%A6&#34;&gt;2.2 属性选择符&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23-%E4%BC%AA%E7%B1%BB%E4%BC%AA%E5%AF%B9%E8%B1%A1&#34;&gt;2.3 伪类、伪对象&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24-%E9%80%89%E6%8B%A9%E7%AC%A6%E6%9D%83%E9%87%8D&#34;&gt;2.4 选择符权重&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AF%BC%E5%85%A5css%E6%A0%B7%E5%BC%8F&#34;&gt;三、导入CSS样式&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31-%E8%A1%8C%E9%97%B4%E6%A0%B7%E5%BC%8F&#34;&gt;3.1 行间样式&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E5%A4%96%E8%81%94%E6%A0%B7%E5%BC%8F%E8%A1%A8%E6%8E%A8%E8%8D%90&#34;&gt;3.2 外联样式表（推荐）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33-%E5%AF%BC%E5%85%A5%E6%A0%B7%E5%BC%8F%E8%A1%A8&#34;&gt;3.3. 导入样式表&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%BC%80%E5%8F%91%E7%8E%AF%E5%A2%83&#34;&gt;四、开发环境&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#41-%E5%B8%B8%E7%94%A8%E6%B5%8F%E8%A7%88%E5%99%A8&#34;&gt;4.1 常用浏览器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42-css%E7%BC%96%E8%BE%91%E5%99%A8&#34;&gt;4.2 CSS编辑器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43-%E5%B8%B8%E7%94%A8%E5%B7%A5%E5%85%B7&#34;&gt;4.3 常用工具&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E7%9B%B8%E5%85%B3%E4%B8%8B%E8%BD%BD&#34;&gt;五、相关下载&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本文是&lt;a href=&#34;http://www.wangyan.cloud/tag/#css/&#34;&gt;《CSS 那些事儿》阅读笔记&lt;/a&gt;第一篇（入门篇）。本篇主要是关于CSS基础，包括css的简写、选择符的使用、CSS样式的应用&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一认识css&#34;&gt;一、认识CSS&lt;/h2&gt;
&lt;h3 id=&#34;11-css的基本结构&#34;&gt;1.1 CSS的基本结构&lt;/h3&gt;
&lt;p&gt;选择符{属性:值}，其中{}中的内容为“声明”。实例：Body{color:#FFF}&lt;/p&gt;
&lt;h3 id=&#34;12-css中的注释&#34;&gt;1.2 CSS中的注释&lt;/h3&gt;
&lt;p&gt;单行注释或多行注释。实例：/* 注释 */&lt;/p&gt;
&lt;h3 id=&#34;13-css的简写&#34;&gt;1.3 CSS的简写&lt;/h3&gt;
&lt;p&gt;颜色的简写&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“#FFFFFF”可简写成“#FFF”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;单位值的省略&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;0px&amp;quot;可简写成&amp;quot;0&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&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;li&gt;上，右，下，左&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;边框的简写：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;border-width&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;border-style&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;border-color&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;border&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;solid&lt;/span&gt; &lt;span class=&#34;mh&#34;&gt;#000&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;背景的简写：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;background-color&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-repeat&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-attachment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;background-position&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;background&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;mh&#34;&gt;#fff&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sx&#34;&gt;image/logo.jpg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;no-repeat&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;right&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bottom&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;字体的简写：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;font-style&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;font-variant&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;font-weight&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;font-size&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;line-height&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;font-family&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;font&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;italic&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;smll-caps&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;bold&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;12&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;px&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;150&lt;/span&gt;&lt;span class=&#34;kt&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;宋体&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;sans-serif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;列表的简写：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;list-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;list-style-image&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;list-style-position&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;list-style-type&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;li&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;listy-style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;sx&#34;&gt;image.gif&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;inside&lt;/span&gt; &lt;span class=&#34;kc&#34;&gt;square&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二掌握css选择符&#34;&gt;二、掌握CSS选择符&lt;/h2&gt;
&lt;h3 id=&#34;21-css选择符种类&#34;&gt;2.1 CSS选择符种类&lt;/h3&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;子选择符 (&amp;gt;)&lt;/li&gt;
&lt;li&gt;相邻选择符 (+)&lt;/li&gt;
&lt;li&gt;ID选择符 (#)&lt;/li&gt;
&lt;li&gt;属性选择符&lt;/li&gt;
&lt;li&gt;伪类、伪对象&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;22-属性选择符&#34;&gt;2.2 属性选择符&lt;/h3&gt;
&lt;p&gt;（注：E:HTML标签，attr:属性，value:属性值）&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;E[attr] （带有attr属性的所有标签）&lt;/li&gt;
&lt;li&gt;E[attr=&amp;ldquo;value&amp;rdquo;] （带有attr属性且值为value的标签）&lt;/li&gt;
&lt;li&gt;E[attr~=&amp;ldquo;value&amp;rdquo;]（带有attr属性且值具有空格符号的标签）&lt;/li&gt;
&lt;li&gt;E[attr|=&amp;ldquo;value&amp;rdquo;]（带有attr属性且必须以value值及使用(-)符号分隔的标签）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;23-伪类伪对象&#34;&gt;2.3 伪类、伪对象&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;选择符&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;伪类&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;属性:属性值&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;link&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;green&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;visited&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;green&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;a&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;hover&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;color&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;kc&#34;&gt;green&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;css&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;语法&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;选择符&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;伪对象&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;属性:属性值&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nt&#34;&gt;实例&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;：&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;before&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;内容&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;p&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;nd&#34;&gt;after&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;内容&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;24-选择符权重&#34;&gt;2.4 选择符权重&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;!important （很高）&lt;/li&gt;
&lt;li&gt;style属性 （1000）&lt;/li&gt;
&lt;li&gt;ID选择符 (100)&lt;/li&gt;
&lt;li&gt;类、属性 （10）&lt;/li&gt;
&lt;li&gt;标签、伪类、伪对象 （1）&lt;/li&gt;
&lt;li&gt;其他 (0)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;三导入css样式&#34;&gt;三、导入CSS样式&lt;/h2&gt;
&lt;h3 id=&#34;31-行间样式&#34;&gt;3.1 行间样式&lt;/h3&gt;
&lt;h3 id=&#34;32-外联样式表推荐&#34;&gt;3.2 外联样式表（推荐）&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;link&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;rel&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;stylesheet&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;href&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;style.css&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;media&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;screen&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;33-导入样式表&#34;&gt;3.3. 导入样式表&lt;/h3&gt;
&lt;p&gt;Html中导入外部CSS文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/css&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;@&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nt&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;style.css&amp;#34;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;style&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在CSS文件中再次导入CSS文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;注：@import 写在样式表最前面，但解析却是最后的 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@import url (&amp;#34;style2.css&amp;#34;)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四开发环境&#34;&gt;四、开发环境&lt;/h2&gt;
&lt;h3 id=&#34;41-常用浏览器&#34;&gt;4.1 常用浏览器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;IE系列（Trident 内核）&lt;/li&gt;
&lt;li&gt;Mozilla Firefox（Gecko 内核）&lt;/li&gt;
&lt;li&gt;Opera（Presto 内核）&lt;/li&gt;
&lt;li&gt;Safari（Webkit 内核）&lt;/li&gt;
&lt;li&gt;Chrome（Webkit 内核）&lt;/li&gt;
&lt;li&gt;遨游、QQ、搜狗（Webkit+Trident 双内核）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.my-debugbar.com/wiki/IETester/HomePage&#34;&gt;ieTester&lt;/a&gt;：IE多版本浏览器，支持插件与滤镜&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;42-css编辑器&#34;&gt;4.2 CSS编辑器&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.verycd.com/topics/2844711/&#34;&gt;Dreamweaver&lt;/a&gt;：各方面体验都不错，缺点是体积大、速度慢。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://dl.dbank.com/c0b7tcojo7&#34;&gt;Editplus 3&lt;/a&gt;：推荐，小巧速度快，占用资源少，定制性强。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Editplus 简单配置&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;解压，运行根目录下的“initialization.vbe”，根据提示完成安装。&lt;/li&gt;
&lt;li&gt;设置语法高亮 （工具-首选项-设置及语法-语法文件）注：语法文件扩展名为&amp;quot;.stx&amp;quot;，存放在公共配置文件夹内，建议不要修改。&lt;/li&gt;
&lt;li&gt;设置自动完成 （工具-首选项-设置语法-自动完成） 注：自动完成文件扩展名&amp;quot;.acp&amp;quot;，存放在公共配置文件夹，该文件定制得好，甚至可以与DW的代码提示媲美。&lt;/li&gt;
&lt;li&gt;打开代码折叠 （视图-代码折叠-使用代码折叠）&lt;/li&gt;
&lt;li&gt;设置默认浏览器及用户工具组 （建议将FF设为默认浏览器，可以在用户工具组增加参考手册）&lt;/li&gt;
&lt;li&gt;设置代码剪辑、字体、默认编码等等&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;43-常用工具&#34;&gt;4.3 常用工具&lt;/h3&gt;
&lt;p&gt;如果去看那些比如：《120个 Web 开发工具 》（&lt;a href=&#34;http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K593.aspx&#34;&gt;上&lt;/a&gt;、&lt;a href=&#34;http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K592.aspx&#34;&gt;下&lt;/a&gt;）、《130 个 Web 设计工具》（&lt;a href=&#34;http://www.comsharp.com/GetKnowledge/zh-CN/TeamBlogTimothyPage_K603.aspx&#34;&gt;上&lt;/a&gt;、下）这些文章的话，肯定头晕脑胀，实际经常用的工具并不多。&lt;/p&gt;
&lt;p&gt;IE插件&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&#34;&gt;IE Developer Toolbar&lt;/a&gt;：IE下的FireBug，html及CSS调试工具。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.microsoft.com/downloads/details.aspx?FamilyID=8e6ac106-525d-45d0-84db-dccff3fae677&amp;amp;displaylang=en&#34;&gt;SuperPreview for IE&lt;/a&gt;：IE兼容性调性工具&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://code.google.com/p/msfast/&#34;&gt;msfast&lt;/a&gt;：IE下的网站性能检测工具&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Firefox扩展&lt;/p&gt;
&lt;p&gt;这个真的很多，不必介绍了，或者可以参考月光博客的文章&lt;a href=&#34;http://www.williamlong.info/archives/2157.html&#34;&gt;《常用网站开发类Firefox扩展插件》&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;小补充：&lt;a href=&#34;http://addons.mozilla.org/en-US/firefox/addon/10704&#34;&gt;css usage&lt;/a&gt;：基于firebug的firefox扩展，查看页面CSS的使用情况。&lt;/p&gt;
&lt;p&gt;chrome扩展&lt;/p&gt;
&lt;p&gt;这个现在也很多了，包括&lt;a href=&#34;http://chrome.google.com/extensions/detail/bmagokdooijbeehmkpknfglimnifench&#34;&gt;Firebug&lt;/a&gt;、&lt;a href=&#34;http://chrome.google.com/extensions/detail/bfbameneiokkgbdmiekhjnmfkcnldhhm&#34;&gt;Web Developer&lt;/a&gt;都有了，更多web开发扩展，&lt;a href=&#34;http://chrome.google.com/extensions/featured/web_dev&#34;&gt;浏览此页&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;其他&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href=&#34;http://dev.opera.com/articles/view/opera-developer-tools/&#34;&gt;Opera Developer Tools&lt;/a&gt;：Opera下的DOM,CSS查看工具,类似FireBug.&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://nightly.webkit.org/&#34;&gt;webkit&lt;/a&gt;：Safari下的开发调试工具&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.httpwatch.com/&#34;&gt;Httpwatch&lt;/a&gt;：数据分析，头消息接受/发送的查看，POST数据查看等等。&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cssforest.org/blog/index.php?s=file_download&amp;amp;id=6&#34;&gt;CSS Sprites&lt;/a&gt;：CSS Sprites 样式生成工具（基于&lt;a href=&#34;http://www.adobe.com/go/EN_US-H-GET-AIR&#34;&gt;AIR&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://download.wangyan.name/software/win32/ColorPicker.zip&#34;&gt;ColorPicker&lt;/a&gt;：屏幕取色工具（win32平台）&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://download.wangyan.name/software/win32/PixelMeasurer.zip&#34;&gt;Pixel Measurer&lt;/a&gt;：超好用的屏幕尺&lt;/li&gt;
&lt;li&gt;CSS压缩工具：&lt;a href=&#34;http://csstidy.sourceforge.net/&#34;&gt;CSSTidy&lt;/a&gt;（在线版，推荐）、&lt;a href=&#34;http://code.google.com/p/ourtools/downloads/list&#34;&gt;TB Compressor&lt;/a&gt;（Windows平台、基于JAVA）、&lt;a href=&#34;http://www.cssforest.org/blog/index.php?s=file_download&amp;amp;id=13&#34;&gt;mergeCSS&lt;/a&gt;（基于&lt;a href=&#34;http://www.adobe.com/go/EN_US-H-GET-AIR&#34;&gt;AIR&lt;/a&gt;）&lt;/li&gt;
&lt;li&gt;&amp;hellip;&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;五相关下载&#34;&gt;五、相关下载&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c0srqlsy83&#34;&gt;《CSS那些事儿》示例文件&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Typecho 主题 Aeros</title>
        <link>https://www.bg7pbp.com/p/typecho-theme-aeros/</link>
        <pubDate>Wed, 29 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/typecho-theme-aeros/</guid>
        <description>&lt;p&gt;我的第一款Typecho主题，Aeros，这是Wordpress下我一直在用的主题，现转成Typecho，基于CSS3+HTML5，适用于Typecho 0.7以上版本&amp;hellip;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;主题名称：Aeros 主题版本: 1.0&lt;br&gt;
适用程序：Typecho 0.7+&lt;br&gt;
测试环境：IE 8、firefox 3.6.8、Chrome 7、opera 10.61、safari 5.01&lt;br&gt;
支持插件：Links&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;可能会&#34;&gt;可能会&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;进一步增加后台主题设置选项，比如可以在后台上传和选择背景&amp;hellip;&lt;/li&gt;
&lt;li&gt;增加一些自定义的模板页，比如友情链接、文章热榜之类的&amp;hellip;&lt;/li&gt;
&lt;li&gt;考虑IE和不臃肿情况下，尽可能应用更多CSS3和HTML5方面的新特性&amp;hellip;&lt;/li&gt;
&lt;li&gt;增加和完善一些插件支持&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;浏览器&#34;&gt;浏览器&lt;/h2&gt;
&lt;p&gt;不打算兼容 IE 8、firefox 3.5、opera 10、safari 5 、Chrome 6 以下版本浏览器，故Bug请不要反馈&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/a/aeros.jpg&#34; alt=&#34;aeros&#34; title=&#34;Typecho主题Aeros&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;更新历史&#34;&gt;更新历史&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;v1.1 (2010.9.11)&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;美化评论部分&lt;/li&gt;
&lt;li&gt;修改HTML结构，更为语义化。&lt;/li&gt;
&lt;li&gt;进一步支持safari和opera。&lt;/li&gt;
&lt;li&gt;一箩筐的细节修改&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;下载地址&#34;&gt;下载地址&lt;/h3&gt;
&lt;p&gt;更新可能会比较频繁，请直接下载最新版&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c0nlcyetjb&#34;&gt;http://dl.dbank.com/c0nlcyetjb&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>理解Windws中的路由表</title>
        <link>https://www.bg7pbp.com/p/windows-route-table/</link>
        <pubDate>Tue, 28 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/windows-route-table/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%90%8D%E8%AF%8D%E7%90%86%E8%A7%A3&#34;&gt;一、名词理解&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#11%E8%B7%AF%E7%94%B1%E8%A1%A8&#34;&gt;1.1、路由表：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#12network-destination%E7%BD%91%E7%BB%9C%E7%9B%AE%E6%A0%87%E5%9C%B0%E5%9D%80&#34;&gt;1.2、Network Destination（网络目标地址）：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#13gateway%E7%BD%91%E5%85%B3&#34;&gt;1.3、Gateway（网关）：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#14interface%E6%8E%A5%E5%8F%A3&#34;&gt;1.4、Interface（接口）：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#15metric%E8%B7%83%E7%82%B9%E6%95%B0&#34;&gt;1.5、Metric（跃点数）：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%B7%A5%E4%BD%9C%E6%B5%81%E7%A8%8B&#34;&gt;二、工作流程&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%B7%AF%E7%94%B1%E5%91%BD%E4%BB%A4&#34;&gt;三、路由命令&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#32-%E4%BD%BF%E7%94%A8%E8%8C%83%E4%BE%8B&#34;&gt;3.2. 使用范例&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;前文  &lt;a href=&#34;http://www.wangyan.cloud/network-ipv4/&#34;&gt;网络基础技术：详解IP地址&lt;/a&gt; 及  &lt;a href=&#34;http://www.wangyan.cloud/network-ipv4-mask/&#34;&gt;子网划分及子网掩码计算方法&lt;/a&gt;  讲了 IP协议和子网掩码的一些基础知识，今天继续&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一名词理解&#34;&gt;一、名词理解&lt;/h2&gt;
&lt;h3 id=&#34;11路由表&#34;&gt;1.1、路由表：&lt;/h3&gt;
&lt;p&gt;指 路由器或者其他互联网网络设备上存储的表，该表中存有到达特定网络终端的路径，在某些情况下，还有一些与这些路径相关的度量。&lt;/p&gt;
&lt;p&gt;在命令提示符下输入“route print”，显示如下图所示的本地路由表：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/r/route.png&#34; alt=&#34;https://img.cdn.wangyan.cloud/r/route.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;12network-destination网络目标地址&#34;&gt;1.2、Network Destination（网络目标地址）：&lt;/h3&gt;
&lt;p&gt;网络目标地址和网络掩码相与的结果，用于定义本地计算机可以到达的范围。&lt;/p&gt;
&lt;p&gt;在添加路由时，Windows要求输入的网络目标地址和网络掩码相与后的结果必须等于网络目标地址，否则路由添加会失败。&lt;/p&gt;
&lt;p&gt;故：网络目标地址包有四种可能；&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;某个特定主机的地址，如：192.168.1.101，网络掩码为255.255.255.255&lt;/li&gt;
&lt;li&gt;某个特定子网的地址，如：192.168.1.240，网络掩码为255.255.255.240&lt;/li&gt;
&lt;li&gt;某个特定网络的地址，如：192.168.1.0，  网络掩码为255.255.255.0&lt;/li&gt;
&lt;li&gt;默认路由，所有未在路由表中指定的网络地址，如：0.0.0.0，网络掩码为0.0.00&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;13gateway网关&#34;&gt;1.3、Gateway（网关）：&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;网关又称为下一跳服务器，指发送IP数据包时，如果目标主机非同一个网络，则数据包会发送到网关。&lt;/p&gt;
&lt;/li&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;/ul&gt;
&lt;h3 id=&#34;14interface接口&#34;&gt;1.4、Interface（接口）：&lt;/h3&gt;
&lt;ul&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;/ul&gt;
&lt;h3 id=&#34;15metric跃点数&#34;&gt;1.5、Metric（跃点数）：&lt;/h3&gt;
&lt;p&gt;用于指出路由的成本，是路由算法用以确定到达网络目标地址的最佳路径的计量标准，如：路径长度（一个跃点代表经过一个路由器）、可靠性、延迟、带宽、负载、通信代价。当具有多条到达相同目的网络的路由项时，TCP/IP会选择具有更低跃点数的路由项。&lt;/p&gt;
&lt;h2 id=&#34;二工作流程&#34;&gt;二、工作流程&lt;/h2&gt;
&lt;p&gt;当TCP/IP需要向某个IP地址发起通信时，它会对路由表进行评估，以确定如何发送数据包。过程如下：&lt;/p&gt;
&lt;p&gt;TCP/IP将该IP地址和路由表中每个路由项的网络掩码进行相与计算，如果结果匹配对应路由项的网络目标地址，则记录下此路由项。如果有多个匹配项，则会根据相关规则选择最佳路由项，然后通过接口和网关发送数据。&lt;/p&gt;
&lt;p&gt;如果相与后的结果不匹配任何路由项，那么TCP/IP就会选择默认路由项，默认路由的网络地址为0.0.0.0，网络掩码为0.0.0.0，它匹配任何网络通信。设置默认路由后，数据包的路由责任移交到了路由器，这可以大大简化本地路由表和配置，但会占用了额外的网络流量。&lt;/p&gt;
&lt;h2 id=&#34;三路由命令&#34;&gt;三、路由命令&lt;/h2&gt;
&lt;p&gt;route 命令主要用于手动配置静态路由表 ，语法如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;route &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-f&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-p&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;-4:-6&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; Command &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Destination&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;mask Netmask&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;Gateway&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;metric Metric&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; Interface&lt;span class=&#34;o&#34;&gt;]]&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-f 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;清除所有网关项路由表（掩码为255.255.255.255的路由、目标为127.0.0.0，掩码为255.255.255.0的路由、目标为224.0.0.0，掩码为240.0.0.0的路由）。如果它与命令之一（例如 add、change 或 delete）结合使用，表会在运行命令之前清除。 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-p 与 ADD 命令结合使用时，将路由设置为在系统引导期间保持不变。默认情况下，重新启不保存路由。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-4 强制使用IPv4
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;-6 强制使用IPv6&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Command 指定要运行的命令。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- add 添加路由
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- change 更改现存路由
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- delete 删除路由
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- print 打印路由&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Destination  指定路由的网络目标地址。
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mask subnetmask 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;指定与网络目标地址相关联的网掩码。子网掩码对于 IP 网络地址可以是一适当的子网掩码，对于主机路由是 255.255.255.255 ，对于默认路由是 0.0.0.0。如果忽略，则使用子网掩码 255.255.255.255。&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Gateway 指定网关
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;metric Metric 指定跃点数
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; Interface 指定路由接口号码，忽略 &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; 参数时，接口由网关地址确定。 &lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;32-使用范例&#34;&gt;3.2. 使用范例&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;route print&lt;/code&gt;
显示本地路由表的完整内容&lt;/p&gt;
&lt;p&gt;&lt;code&gt;route print 10.*&lt;/code&gt;
显示本地路由表中以10. 开始的路由&lt;/p&gt;
&lt;p&gt;&lt;code&gt;route add 0.0.0.0 mask 0.0.0.0 192.168.0.1&lt;/code&gt;
要添加默认网关地址为 192.168.0.1 的默认路由&lt;/p&gt;
&lt;p&gt;&lt;code&gt;route add 192.168.0.100 mask 255.255.255.255 192.168.0.1&lt;/code&gt;
要添加目标为 10.41.0.0，子网掩码为 255.255.0.0，网关为 192.168.0.1 的路由&lt;/p&gt;
&lt;p&gt;&lt;code&gt;route -p add 192.168.0.100 mask 255.255.255.255 192.168.0.1&lt;/code&gt;
要添加目标为 10.41.0.0，子网掩码为 255.255.0.0，网关为 192.168.0.1 的永久路由&lt;/p&gt;
&lt;p&gt;&lt;code&gt;route add 192.168.0.100 mask 255.255.255.255 192.168.0.1 metric 7 &lt;/code&gt;
要添加目标为 10.41.0.0，子网掩码为 255.255.0.0，网关为 192.168.0.1设置 ，跃点数为 7 的路由&lt;/p&gt;
</description>
        </item>
        <item>
        <title>子网划分及子网掩码计算方法</title>
        <link>https://www.bg7pbp.com/p/subnet-mask-calculation/</link>
        <pubDate>Mon, 27 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/subnet-mask-calculation/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E7%9A%84%E6%A6%82%E8%BF%B0%E5%8F%8A%E4%BD%9C%E7%94%A8&#34;&gt;一、子网掩码的概述及作用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E4%BD%BF%E7%94%A8%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81&#34;&gt;二、为什么要使用子网掩码？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E7%9A%84%E5%88%86%E7%B1%BB&#34;&gt;三、子网掩码的分类&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E7%BC%BA%E7%9C%81%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E6%9C%AA%E5%88%92%E5%88%86%E5%AD%90%E7%BD%91&#34;&gt;1）缺省子网掩码：(未划分子网)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E7%94%A8%E4%BA%8E%E5%88%92%E5%88%86%E5%AD%90%E7%BD%91&#34;&gt;2）自定义子网掩码：(用于划分子网)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E5%92%8Cip%E5%9C%B0%E5%9D%80%E7%9A%84%E5%85%B3%E7%B3%BB&#34;&gt;四、子网掩码和ip地址的关系&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E4%B8%BA%E4%BB%80%E4%B9%88%E8%A6%81%E8%A6%81%E5%88%92%E5%88%86%E5%AD%90%E7%BD%91&#34;&gt;五、为什么要要划分子网？&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E5%AD%90%E7%BD%91%E5%88%92%E5%88%86%E7%AE%80%E8%BF%B0&#34;&gt;六、子网划分简述&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83%E5%AD%90%E7%BD%91%E6%8E%A9%E7%A0%81%E8%AE%A1%E7%AE%97&#34;&gt;七、子网掩码计算&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1%E5%88%A9%E7%94%A8%E5%AD%90%E7%BD%91%E6%95%B0%E6%9D%A5%E8%AE%A1%E7%AE%97&#34;&gt;1、利用子网数来计算&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2%E5%88%A9%E7%94%A8%E4%B8%BB%E6%9C%BA%E6%95%B0%E6%9D%A5%E8%AE%A1%E7%AE%97&#34;&gt;2、利用主机数来计算&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%AD%A5%E9%AA%A4%E6%80%BB%E7%BB%93&#34;&gt;步骤总结：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上文  &lt;a href=&#34;http://www.wangyan.cloud/network-ipv4/&#34;&gt;网络基础技术：详解IP地址&lt;/a&gt;  讲了IP协议的一些基础知识，但仅仅IP是不够的。下面是我对ipv4下子网划分及子网掩码知识的一些理解&amp;hellip;&lt;/p&gt;
&lt;h2 id=&#34;一子网掩码的概述及作用&#34;&gt;一、子网掩码的概述及作用&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;子网掩码是一个应用于TCP/IP网络的32位二进制值，每节8位，必须结合IP地址对应使用。&lt;/li&gt;
&lt;li&gt;子网掩码32位都与IP地址32位对应，如果某位是网络地址，则子网掩码为1，否则为0。&lt;/li&gt;
&lt;li&gt;子网掩码可以通过与IP地址“与”计算，分离出IP地址中的网络地址和主机地址，用于判断该IP地址是在局域网上，还是在广域网上。&lt;/li&gt;
&lt;li&gt;子网掩码一般用于将网络进一步划分为若干子网，以避免主机过多而拥堵或过少而IP浪费。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二为什么要使用子网掩码&#34;&gt;二、为什么要使用子网掩码？&lt;/h2&gt;
&lt;p&gt;子网掩码可以分离出IP地址中的网络地址和主机地址，那为什么要分离呢？因为两台计算机要通讯，首先要判断是否处于同一个广播域内，即网络地址是否相同。如果网络地址相同，表明接受方在本网络上，那么可以把数据包直接发送到目标主机，否则就需要路由网关将数据包转发送到目的地。&lt;/p&gt;
&lt;h2 id=&#34;三子网掩码的分类&#34;&gt;三、子网掩码的分类&lt;/h2&gt;
&lt;h3 id=&#34;1缺省子网掩码未划分子网&#34;&gt;1）缺省子网掩码：(未划分子网)&lt;/h3&gt;
&lt;p&gt;子网掩码32位与IP地址32位对应,如果某位是网络地址，则子网掩码为1，否则为0。例如A类IP地址，第一节为网络地址，其余三节为主机地址，故掩码为“11111111.00000000.00000000.00000000”&lt;/p&gt;
&lt;p&gt;A类网络缺省子网掩码：255.0.0.0
B类网络缺省子网掩码：255.255.0.0
C类网络缺省子网掩码：255.255.255.0&lt;/p&gt;
&lt;h3 id=&#34;2自定义子网掩码用于划分子网&#34;&gt;2）自定义子网掩码：(用于划分子网)&lt;/h3&gt;
&lt;p&gt;将一个网络划分为若干子网，希望每个子网拥有不同的网络地址或子网地址。因为ＩＰ是有限的，实际上我们是将主机地址分为两个部分：子网网络地址、子网主机地址。 形式如下：&lt;/p&gt;
&lt;p&gt;未做子网划分的ip地址：网络地址＋主机地址做子网划分后的ip地址：网络地址＋（子网网络地址＋子网主机地址）&lt;/p&gt;
&lt;h2 id=&#34;四子网掩码和ip地址的关系&#34;&gt;四、子网掩码和ip地址的关系&lt;/h2&gt;
&lt;p&gt;子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。具体说就是两台计算机各自的IP地址与子网掩码进行“与”运算后，如果得出的结果是相同的，则说明这两台计算机是处于同一个子网络上的，可以进行直接的通讯。&lt;/p&gt;
&lt;p&gt;例如：设IP地址为192.168.10.2，子网掩码为255.255.255.240，那么子网掩码是怎样来区分网络地址和主机地址的呢。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_03.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_03.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;主机地址为：0.0.0.2（将掩码取反，然后与运算）&lt;/p&gt;
&lt;h2 id=&#34;五为什么要要划分子网&#34;&gt;五、为什么要要划分子网？&lt;/h2&gt;
&lt;p&gt;例如：在A类IP地址中，每个A类网络可能有16，777，214台主机，它们处于同一广播域。在同一广播域中有这么多主机是不可能的，网络会因为广播通信而饱和。另一方面，IP地址资源越来越少。为实现更小的广播域，就需要进一步分成更小的网络。划分子网后，通过使用掩码，把子网隐藏起来，使得从外部看网络没有变化，这就是子网掩码。&lt;/p&gt;
&lt;h2 id=&#34;六子网划分简述&#34;&gt;六、子网划分简述&lt;/h2&gt;
&lt;p&gt;子网划分是通过借用IP地址中若干位主机地址来充当子网的网络地址，从而将原网络划分为若干子网。&lt;/p&gt;
&lt;p&gt;划分子网时，随着子网地址借用主机位数的增多，子网的数目随之增加，但每个子网中的可用主机数逐渐减少。&lt;/p&gt;
&lt;p&gt;如C类地址，原有8位主机位，2^8-2即254个主机地址，默认子网掩码255.255.255.0。(全0或全1不可用）
借用1位主机位，产生2^1-2=0个子网，每个子网有2^7个主机地址；
借用2位主机位，产生2^2-2=2个子网，每个子网有2^6个主机地址;
……
根据子网ID借用的主机位数，我们可以计算出划分的子网数、掩码、每个子网主机数，列表如下：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_c.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_c.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_b.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_c.jpg&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_a.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_c.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;七子网掩码计算&#34;&gt;七、子网掩码计算&lt;/h2&gt;
&lt;h3 id=&#34;1利用子网数来计算&#34;&gt;1、利用子网数来计算&lt;/h3&gt;
&lt;p&gt;在求子网掩码之前必须先搞清楚要划分的子网数目，以及每个子网内的所需主机数目。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;将子网数目转化为二进制来表示&lt;/li&gt;
&lt;li&gt;取得该二进制的位数，为 N&lt;/li&gt;
&lt;li&gt;取得该 IP地址的类子网掩码，将其主机地址部分的的前N位置 1 即得出该IP地址划分子网的子网掩码。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如欲将C类IP地址192.168.10.0划分成4个子网：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;4=100&lt;/li&gt;
&lt;li&gt;该二进制为三位数，N = 3&lt;/li&gt;
&lt;li&gt;将A类地址的子网掩码255.255.255.0的主机地址前3位置 1，得到子网掩码255.255.255.224。(具体见下图）&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_01.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_01.jpg&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;2利用主机数来计算&#34;&gt;2、利用主机数来计算&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;将主机数目转化为二进制来表示&lt;/li&gt;
&lt;li&gt;如果主机数小于或等于254（注意去掉保留的两个IP地址），则取得该主机的二进制位数。&lt;/li&gt;
&lt;li&gt;将该类IP地址的主机地址位数全部置1，然后从后向前的将N位全部置为 0，即为子网掩码值。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;如欲将B类IP地址192.168.10.0划分成若干子网，每个子网内有主机25台：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;25=11001&lt;/li&gt;
&lt;li&gt;该二进制为十位数，N = 5&lt;/li&gt;
&lt;li&gt;将该B类地址的子网掩码 255.255.255.0的主机地址全部置 1，得到255.255.255.255，然后再从后向前将后5位置0，即为：11111111.11111111.11111111.11100000，即255.255.252.224。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/m/mask_02.jpg&#34; alt=&#34;https://img.cdn.wangyan.cloud/m/mask_02.jpg&#34;&gt;&lt;/p&gt;
&lt;h2 id=&#34;步骤总结&#34;&gt;步骤总结：&lt;/h2&gt;
&lt;ol&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;/li&gt;
&lt;/ol&gt;
</description>
        </item>
        <item>
        <title>详解IPv4地址</title>
        <link>https://www.bg7pbp.com/p/ipv4-address-explained/</link>
        <pubDate>Sun, 26 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ipv4-address-explained/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80ip%E5%9C%B0%E5%9D%80%E6%A6%82%E5%BF%B5&#34;&gt;一、IP地址概念：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cip%E5%9C%B0%E5%9D%80%E7%BB%84%E6%88%90&#34;&gt;二、IP地址组成&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89ip%E7%9A%84%E5%88%86%E7%B1%BB&#34;&gt;三、IP的分类&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E7%89%B9%E6%AE%8Aip%E5%9C%B0%E5%9D%80&#34;&gt;四、特殊IP地址：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94a%E7%B1%BBip%E5%9C%B0%E5%9D%80&#34;&gt;五、A类IP地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%ADb%E7%B1%BBip%E5%9C%B0%E5%9D%80&#34;&gt;六、B类IP地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83c%E7%B1%BBip%E5%9C%B0%E5%9D%80&#34;&gt;七、C类IP地址&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E6%80%BB%E7%BB%93&#34;&gt;八、总结：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&#34;http://zh.wikipedia.org/zh-cn/TCP/IP%E5%8D%8F%E8%AE%AE&#34;&gt;TCP/IP协议（传输控制协议/网际协议）&lt;/a&gt; 是一簇 &lt;a href=&#34;http://zh.wikipedia.org/zh-cn/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE&#34;&gt;网络通信协议&lt;/a&gt;，是目前Internet中的核心技术。其中最有名的是TCP协议和IP协议（ &lt;a href=&#34;http://zh.wikipedia.org/zh-cn/IPv4&#34;&gt;IPv4&lt;/a&gt; 已接近功能上限，&lt;a href=&#34;http://zh.wikipedia.org/zh-cn/IPv6&#34;&gt;IPv6&lt;/a&gt;  将逐步取代。）&lt;/p&gt;
&lt;p&gt;TCP/IP协议对OSI/ISO模型进行了适当简化，通常分4层，即应用层（HTTP、FTP、DNS）、传输层（TCP、UDP）、网络互连层IP协议、ICMP）、网络接口层（以太网、Wi-Fi）。其中网络互连层最重要的协议是IP协议（IP协议只能寻址到主机，剩下的由传输层完成）。&lt;/p&gt;
&lt;h2 id=&#34;一ip地址概念&#34;&gt;一、IP地址概念：&lt;/h2&gt;
&lt;p&gt;每台连接在Internet上的主机(Host) 都有一个长度32位(bit)、分为4段，每段8位的地址（&lt;a href=&#34;http://zh.wikipedia.org/zh-cn/IPv4&#34;&gt;IPv4&lt;/a&gt; ）。根据  &lt;a href=&#34;http://baike.baidu.com/view/828066.html&#34;&gt;点分十进制表示法&lt;/a&gt; 每段数字范围为0～255，段与段之间用句点隔开。&lt;/p&gt;
&lt;h2 id=&#34;二ip地址组成&#34;&gt;二、IP地址组成&lt;/h2&gt;
&lt;p&gt;一个IP地址主要由两部分组成：一部分是用于地址该地址所从属的网络地址；另一部分用于指明该网络上某个特定主机的主机地址。&lt;/p&gt;
&lt;h2 id=&#34;三ip的分类&#34;&gt;三、IP的分类&lt;/h2&gt;
&lt;p&gt;根据网络地址的不同，IP地址可分为A、B、C、D、E5类。常用的是B和C两类。&lt;/p&gt;
&lt;p&gt;同一个物理网络上的所有主机都使用同一个网络地址，网络上任意一个主机（包括网络上工作站，服务器和路由器等）都有一个主机地址与其对应。&lt;/p&gt;
&lt;p&gt;网络地址的位数直接决定了可以分配的网络数（计算方法：2^网络地址位数）；主机地址的位数则决定了网络中最大的主机数（计算方法：2^主机地址位数-2）。&lt;/p&gt;
&lt;h2 id=&#34;四特殊ip地址&#34;&gt;四、特殊IP地址：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;“0”地址：TCP/IP协议规定，全为“0”的网络地址被解析为“本网络”，用于本网内通信，一般不分配给主机&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;回送地址：TCP/IP协议规定，A类网络地址中的 01111111（127）是保留地址，用户软件回路测试（如127.0.0.1），一般不分配给主机。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;网络地址：全为“0”的主机地址（即主机位置都为off），所代表的是一个网段，不分配给主机。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;广播地址：全为“1”的主机地址（255），指同是向该网所有主机发送报文。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;有限广播地址：全为“1”的IP地址（255.255.255.255），仅用于在本网广播。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;五a类ip地址&#34;&gt;五、A类IP地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一个A类IP地址由1字节（8位）的网络地址和3字节（24位）主机地址组成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TCP/IP协议规定：A类网络地址的第一位必须为&amp;quot;0&amp;quot;，且由于存在“0”地址和“回送地址”，所以A类网络地址第一个地址为00000001(1)，而不是00000000(0)，最后一个地址是01111110(126)，而不是01111111(127)。故A类网络地址为：1~126（十进制），可提供的网络数为：2^7-2（0地址及回送地址除外）=126个。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A类IP地址的主机地址是24位，但合法主机地址就是介于网络地址和广播地址之间（1&lt;del&gt;254），每个网络允许有：2的24次方-2=16777216台主机，所以主机地址为：(0&lt;/del&gt;255.0&lt;del&gt;255.1&lt;/del&gt;254)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A类IP地址范围：1.0.0.1-126.255.255.254&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A类私有IP地址：10.0.0.0&amp;ndash;10.255.255.254 (10.0.0.0/8)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;六b类ip地址&#34;&gt;六、B类IP地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一个B类IP地址由2字节（16位）的网络地址和2字节（16位）的主机地址组成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TCP/IP协议规定：B类网络地址的前两位取值必须为&amp;quot;10&amp;quot;，所以B类网络地址第一个地址为10000000 00000000 (128.0)，最后一个地址是10111111 11111111（191。255）。故B类网络地址为：128.0~191.255。（十进制），可提供的网络数为：2^14=16384个。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;B类IP地址的主机地址是16位，但合法主机地址就是介于网络地址和广播地址之间（1&lt;del&gt;254），每个网络允许有：2的16次方-2=16777216台主机，所以主机地址为：(0&lt;/del&gt;255.1~254)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;B类IP地址范围：128.0.0.1-191.255.255.254&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;B类私有IP地址：172.16.0.0&amp;ndash;172.31.255.254 (172.16.0.0/12)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;七c类ip地址&#34;&gt;七、C类IP地址&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;一个C类IP地址由3字节（24位）的网络地址和1字节（8位）的主机地址组成。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;TCP/IP协议规定：B类网络地址的前三位取值必须为&amp;quot;110&amp;quot;，所以B类网络地址第一个地址为11000000 00000000 00000000 (192.0.0)，最后一个地址是11011111 11111111 11111111（223.255.255）。故B类网络地址为：192.0.0~223.255.255（十进制），可提供的网络数为：2^24=2097152个。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;C类IP地址的主机地址是8位，但合法主机地址就是介于网络地址和广播地址之间（1&lt;del&gt;254），每个网络允许有：2的8次方-2=254台主机，所以主机地址为：(1&lt;/del&gt;254)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;C类IP地址范围：192.0.0.1-223.255.255.254&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;C类私有IP地址：192.168.0.0&amp;ndash;192.168.255.254 (192.168.0.0/16)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;八总结&#34;&gt;八、总结：&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;IP地址由网络地址和主机地址组成，根据网络地址不同被分为A、B、C、D、E共5类。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A类网络地址为1&lt;del&gt;126，B类网络地址为128&lt;/del&gt;191，C类网络地址为192~223&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;主机地址均为1~254，因为网络地址及广播地址除外。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;私有地址：10.0.0.0–10.255.255.254（A）、172.16.0.0–172.31.255.254（B）、192.168.0.0&amp;ndash;192.168.255.254（C）&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/t/tcpip.gif&#34; alt=&#34;https://img.cdn.wangyan.cloud/t/tcpip.gif&#34;&gt;&lt;/p&gt;
&lt;p&gt;图：32位IP地址空间的划分&lt;/p&gt;
</description>
        </item>
        <item>
        <title>cPanel定时全局备份详解</title>
        <link>https://www.bg7pbp.com/p/cpanel-scheduled-backup/</link>
        <pubDate>Sat, 25 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/cpanel-scheduled-backup/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%A4%87%E4%BB%BD%E5%8E%9F%E7%90%86&#34;&gt;一、备份原理：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%B8%8B%E8%BD%BD%E8%84%9A%E6%9C%AC&#34;&gt;二、下载脚本：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E8%AD%A6%E7%A4%BA%E5%A3%B0%E6%98%8E&#34;&gt;三、警示声明：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E9%85%8D%E7%BD%AE%E6%AD%A5%E9%AA%A4&#34;&gt;四、配置步骤：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%9B%BE%E8%A7%A3cron%E6%97%B6%E9%92%9F%E5%AE%88%E6%8A%A4%E4%BD%9C%E4%B8%9A%E9%85%8D%E7%BD%AE&#34;&gt;五、图解CRON（时钟守护作业）配置：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;网站备份的重要性，不言而喻，那些使用免费空间的朋友就更不用说了。但是，为此都天都要登录管理后台，然后手动备份，那个是什么滋味？如果你使用的是cPanel面板的话，那就好办多了。&lt;/p&gt;
&lt;h2 id=&#34;一备份原理&#34;&gt;一、备份原理：&lt;/h2&gt;
&lt;p&gt;下面这个方案是原理是利用cPanel的时钟守护作业（Cron Jobs）来定时运行全局备份脚本，并自动将备份文件通过 FTP 上传到其他的服务器来实现的。&lt;/p&gt;
&lt;h2 id=&#34;二下载脚本&#34;&gt;二、下载脚本：&lt;/h2&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c0huwgo7ny&#34;&gt;立即下载&lt;/a&gt;，或者将下面内容复杂到编辑器，另保存为 fullbackup.php&lt;/p&gt;
&lt;h2 id=&#34;三警示声明&#34;&gt;三、警示声明：&lt;/h2&gt;
&lt;p&gt;这个全局脚本包含cPanel的登录帐号和密码，为了安全考虑，需要将这个脚本放到public_html文件夹以外的文件夹中，比如：“/home/yourname/backup”，并设置该文件夹的权限为600。切记！&lt;/p&gt;
&lt;h2 id=&#34;四配置步骤&#34;&gt;四、配置步骤：&lt;/h2&gt;
&lt;p&gt;1、修改上述脚本，保存为“fullbackup.php”。 注：FTP信息填的是存储备份文件的主机；Ftphost记住填IP,不要填域名；FTP模式有的主机要改为“passiveftp”模式。&lt;/p&gt;
&lt;p&gt;2、将上述脚本上传到“/home/yourname/backup”目录。（没有可以新建backup目录） 3、将backup目录的权限改为600&lt;/p&gt;
&lt;h2 id=&#34;五图解cron时钟守护作业配置&#34;&gt;五、图解CRON（时钟守护作业）配置：&lt;/h2&gt;
&lt;p&gt;1、点击“时钟守护作业”图标，然后选择“高级”模式。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/cp_bk_01.png&#34; alt=&#34;cPanel定时全局备份&#34;&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/cp_bk_02.png&#34; alt=&#34;cPanel定时全局备份&#34;&gt;&lt;/p&gt;
&lt;p&gt;2、选择备份的时间周期，然后在命令框中输入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/bin/php -q /home/&amp;lt;span style=&amp;quot;color: #ff0000;&amp;quot;&amp;gt;yourname&amp;lt;/span&amp;gt;/backup/fullbackup.php
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/cp_bk_03.png&#34; alt=&#34;cPanel定时全局备份&#34;&gt;&lt;/p&gt;
&lt;p&gt;3、自动备份完成后，在主机的根目录便可看到已备份的文件了。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/cp_bk_04.png&#34; alt=&#34;cPanel定时全局备份&#34;&gt;&lt;/p&gt;
&lt;p&gt;哈哈，怎样啊？数据安全就这么简单吧~~ ;-)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;更新记录：&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;1、支持&amp;quot;homedir&amp;quot;、&amp;ldquo;ftp&amp;rdquo;、&amp;ldquo;passiveftp&amp;rdquo;、&amp;ldquo;scp四种备份位置。（2011.02.19） 参考资料：&lt;a href=&#34;http://www.totalchoicehosting.com/forums/index.php?showtopic=7787&#34;&gt;http://j.mp/aEa8Xw&lt;/a&gt;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Firefox 关联aMule ED2K</title>
        <link>https://www.bg7pbp.com/p/firefox-associate-amule-ed2k/</link>
        <pubDate>Fri, 24 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/firefox-associate-amule-ed2k/</guid>
        <description>&lt;ul&gt;
&lt;li&gt;在FF的地址栏打开“about:config”&lt;/li&gt;
&lt;li&gt;右键新建布尔值“network.protocol-handler.external.ed2k”为“true”&lt;/li&gt;
&lt;li&gt;再新建字符串“network.protocol-handler.app.ed2k”为&amp;quot;/usr/bin/ed2k&amp;quot;&lt;/li&gt;
&lt;li&gt;右键新建布尔值“network.protocol-handler.expose.ed2k”为“false”&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;安装-amule-dlp&#34;&gt;安装 amule-dlp&lt;/h2&gt;
&lt;p&gt;aMule 本来是不带动态吸血保护(DLP)的，不喜欢被吸血，那就装个DLP的aMule吧。（&lt;a href=&#34;http://code.google.com/p/amule-dlp/&#34;&gt;编译安装方法&lt;/a&gt;）&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo add-apt-repository ppa:happyaron/amule-dlp
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install amule-dlp&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>Opera mini 5 国际版及修改方法</title>
        <link>https://www.bg7pbp.com/p/opera-mini-international-mod/</link>
        <pubDate>Thu, 23 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/opera-mini-international-mod/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;一、安装前准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E4%BF%AE%E6%94%B9java-class%E6%96%87%E4%BB%B6&#34;&gt;二、修改Java Class文件&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E6%89%8B%E6%9C%BA%E4%B8%8A%E9%85%8D%E7%BD%AEomp&#34;&gt;三、手机上配置OMP&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;此前&lt;a href=&#34;http://opera.com&#34;&gt;Opera Mini&lt;/a&gt; (OPM)国际版具有一种“特效”，可以浏览许许多多神奇的网站，可以说是手机使用&lt;a href=&#34;http://twitter.com&#34;&gt;Twitter&lt;/a&gt;的必备工具，不久前OPM国际版受某些“不可抗拒”原因的影响，在国内发生了故障。不想没几天，就有人搞出了OPM的服务器镜像，短短几行代码就让OMP变得类似Twitter API一样了！ 原文：&lt;a href=&#34;http://code.google.com/p/opm-server-mirror/wiki/HowToCustomYourOpmForJ2ME&#34;&gt;如何修改Java（J2ME）版的OPM&lt;/a&gt;，亲测OMP5 也是有效的！如果你没有国外的主机空间或者懒得自己改，可以直接下载下面附件。平台：Windows7、S60 V5 系统的5800上测试！另：手机权限没有破解。&lt;/p&gt;
&lt;h2 id=&#34;一安装前准备&#34;&gt;一、安装前准备&lt;/h2&gt;
&lt;p&gt;1.1、搭建OMP的镜像服务器，&lt;a href=&#34;http://code.google.com/p/opm-server-mirror/&#34;&gt;到这里&lt;/a&gt;下载、解压、上传、然后访问，如果能转到Google.com那么就成功了！(注：貌似只能将文件放在根目录下，子目录无效！)&lt;/p&gt;
&lt;p&gt;1.2、安装Java环境，JDK或者JRE都可以，建议安装&lt;a href=&#34;http://www.java.com/getjava&#34;&gt;JRE&lt;/a&gt;，然后一路“下一步”很快就OK了。&lt;/p&gt;
&lt;p&gt;1.3、准备好适合你手机的Java版OPM ，&lt;a href=&#34;http://www.opera.com/mini/download/pc/&#34;&gt;官方下载&lt;/a&gt;（需翻墙）&lt;/p&gt;
&lt;p&gt;1.4、将你的OPM程序（如opera-mini-5.0.17443-advanced-en.jar）用常见的压缩工具解压，然后你可以看到一堆的扩展名为.class的文件。&lt;/p&gt;
&lt;p&gt;1.5、下载&lt;a href=&#34;http://sourceforge.net/projects/classeditor/files/&#34;&gt;Java Class File Editor&lt;/a&gt;，并解压某个文件夹。(&lt;a href=&#34;http://download.wangyan.name/software/java/ce2.23.tar.gz&#34;&gt;站内下载&lt;/a&gt;）&lt;/p&gt;
&lt;h2 id=&#34;二修改java-class文件&#34;&gt;二、修改Java Class文件&lt;/h2&gt;
&lt;p&gt;双击”ce.jar“，运行Java Class File Editor，具体步骤如下图。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/o/opm5_01.png&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/o/opm5_01.png&#34; alt=&#34;java class file editor&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2.1. 在ClassEditor中打开这堆.class文件里面最大的一个，比如打开~~“B.class”~~，“F.class”&lt;/p&gt;
&lt;p&gt;2.2. 在ClassEditor中切换到Constant Pool选项卡&lt;/p&gt;
&lt;p&gt;2.3.在ClassEditor的右上角把Modify Mode改为On&lt;/p&gt;
&lt;p&gt;2.4. 在Search的文本框里填入： “:80”&lt;/p&gt;
&lt;p&gt;2.5. 点击Find/Find Next，直到左边的Value出现 &lt;a href=&#34;http://mini5beta.opera-mini.net:80/&#34;&gt;http://mini5beta.opera-mini.net:80/&lt;/a&gt; 为止。&lt;/p&gt;
&lt;p&gt;2.6. 在Value文本框里填上你搭建OMP的镜像服务器地址，再点击Modify。(注：如果不能编辑，请重复第3步!)&lt;/p&gt;
&lt;p&gt;2.7. 保存文件，退出ClassEditor。&lt;/p&gt;
&lt;p&gt;2.8. 用常见的压缩工具打开OPM程序，如不能直接打开可先将.jar的扩展名改成.zip，然后把修改好的.class文件拖拽回文件内替换之前的版本，你也可以将默认图标换一个好看点的，然后将.zip改回.jar。&lt;/p&gt;
&lt;h3 id=&#34;三手机上配置omp&#34;&gt;三、手机上配置OMP&lt;/h3&gt;
&lt;p&gt;新版不再需要任何配置了，安装后可直接使用，但也可能出现以下问题：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;安装后屏幕空白 安装前先将连接方式改为“移动梦网”之类的，然后再运行，第二次运行就可以随便改接入点了。（机型：5800XM）&lt;/li&gt;
&lt;li&gt;一直停留在“installing”界面 将旧版务必卸载后再安装&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/o/opm5_05.jpg&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/o/opm5_06.jpg&#34; alt=&#34;&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/o/opm5_07.jpg&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;**备注：**这是一篇旧文章归档，实际发布日期为：2009-11-25&lt;/p&gt;
</description>
        </item>
        <item>
        <title>CSS中position布局定位</title>
        <link>https://www.bg7pbp.com/p/css-position/</link>
        <pubDate>Wed, 22 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-position/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80position-%E8%AF%AD%E6%B3%95&#34;&gt;一、Position 语法&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8Cposition-%E5%8F%96%E5%80%BC&#34;&gt;二、Position 取值&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21positionstatic&#34;&gt;2.1、position:static&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22positionabsolute&#34;&gt;2.2、position:absolute&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23positionrelative&#34;&gt;2.3、position:relative&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%85%B6%E4%BB%96&#34;&gt;三、其他&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%B1%82%E5%8F%A0%E6%95%88%E6%9E%9C&#34;&gt;3.1、层叠效果&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#32%E5%B8%B8%E8%A7%81%E5%BA%94%E7%94%A8&#34;&gt;3.2、常见应用&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;absolute与relative都是CSS中定位属性：Position 的值，顾名思义，absolute是绝对定位，relative是相对定位，但是绝对究竟怎样绝对法，相对又是相对于什么地方而言的呢？如何区分absolute与relative？关于两者之间又有什么样的技巧呢？&lt;/p&gt;
&lt;h2 id=&#34;一position-语法&#34;&gt;一、Position 语法&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;position : static | absolute | fixed | relative
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;二position-取值&#34;&gt;二、Position 取值&lt;/h2&gt;
&lt;h3 id=&#34;21positionstatic&#34;&gt;2.1、position:static&lt;/h3&gt;
&lt;p&gt;默认值，对象遵循HTML定位规则。一般不用指定，除非想要覆盖之前设置的定位。&lt;/p&gt;
&lt;h3 id=&#34;22positionabsolute&#34;&gt;2.2、position:absolute&lt;/h3&gt;
&lt;p&gt;绝对定位，将对象从文档流中拖出（也就是在文档中已不占据位置了），如果设置top、right、bottom、left，那么它参照浏览器的左上角定位，否则参照父级。&lt;/p&gt;
&lt;p&gt;**特别注意：**如果其父级已经设定了position属性（无论是absolute还是relative)，那么它参照父级，而非参照浏览器的左上角进行定位。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/c/css_absolute.gif&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/css_absolute.gif&#34; alt=&#34;css relative&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上图左侧，因设置了Left和Top 5px，所以参照浏览器左上角定位。上图右侧，没有设置 left 、right、top、bottom 中的任何一个，所以参照父级定位（该父级具有Padding属性）&lt;/p&gt;
&lt;h3 id=&#34;23positionrelative&#34;&gt;2.3、position:relative&lt;/h3&gt;
&lt;p&gt;相对定位，元素将在正常文档流中偏移位置（意思是元素实际上依然占据文档中的原有位置，只是视觉上相对于它在文档中的原有位置移动了）。 它参照父级定位，无父级则参照BODY定位，如果父级内有padding等CSS属性时，则参照父级内容区定位。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;https://img.cdn.wangyan.cloud/c/css_relative.gif&#34;&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/c/css_relative.gif&#34; alt=&#34;css relative&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;上图中，中间一层相对其父级（最底那层）进行定位，而最上一层又相对中间这一次进行定位。&lt;/p&gt;
&lt;h2 id=&#34;三其他&#34;&gt;三、其他&lt;/h2&gt;
&lt;h3 id=&#34;31层叠效果&#34;&gt;3.1、层叠效果&lt;/h3&gt;
&lt;p&gt;在上2张图中，层叠效果是依靠z-index属性完成的，数值越大越在最上面，数值范围是自然数没单位。当然有一点要注意，父子关系是无法用z-index来设定上下关系的，一定是子级在上父级在下。具体可查阅CSS手册中z-index部分。&lt;/p&gt;
&lt;h4 id=&#34;32常见应用&#34;&gt;3.2、常见应用&lt;/h4&gt;
&lt;p&gt;如果有时候我们需要针对某一个容器设置悬浮效果，而不是针对窗口，那么就需要为父级“box1”设置position:relative;以避免它参照浏览器的左上角进行定位&#39;&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu制作Debian软件包</title>
        <link>https://www.bg7pbp.com/p/ubuntu-build-deb-package/</link>
        <pubDate>Tue, 21 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-build-deb-package/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%88%B6%E4%BD%9C%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;一、制作前准备：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%A4%8D%E5%88%B6%E5%AE%89%E8%A3%85%E6%96%87%E4%BB%B6&#34;&gt;二、复制安装文件：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%A4%8D%E5%88%B6%E8%A7%A3%E7%A0%81%E5%8C%85&#34;&gt;三、复制解码包&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B%E5%88%9B%E5%BB%BA%E7%AC%A6%E5%8F%B7%E9%93%BE%E6%8E%A5&#34;&gt;四、创建符号链接&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%88%9B%E5%BB%BA%E4%B8%80%E4%B8%AAcontrol%E6%96%87%E4%BB%B6&#34;&gt;五、创建一个control文件&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E6%9C%80%E5%90%8E%E7%94%A8-dpkg-deb--b-%E5%91%BD%E4%BB%A4%E6%89%93%E5%8C%85&#34;&gt;六、最后用 dpkg-deb -b 命令打包。&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C%E7%94%A8checkinstall%E6%89%93%E5%8C%85&#34;&gt;方法二：用checkinstall打包&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在上一篇文章中我讲了，怎样在Ubuntu中编译MPlayer中文版。虽然也不算很麻烦，但总不至于每次重装系统后，都要编译一次吧？众所周知，Ubuntu是一个基于Debian包管理的系统，因此我们使用dpkg命令就可以轻松制作一个DEB包了。&lt;/p&gt;
&lt;p&gt;下面将以Mplayer 为例子，讲一下Ubuntu制作Debian软件包具体过程。注：这种方法说白了有点像RAR做的自解压文件，一般用于简单的打包。&lt;/p&gt;
&lt;h2 id=&#34;一制作前准备&#34;&gt;一、制作前准备：&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer  //建立工作目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; mplayer  //切换到工作目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/DEBIAN  //建立control文件存放目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir -p ~/mplayer/usr/local/mplayer //创建mplayer程序目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;（注意：&lt;span class=&#34;s2&#34;&gt;&amp;#34;-p&amp;#34;&lt;/span&gt;绝对不能漏掉，因为，DEB包安装的时候默认是将文件释放到根目录）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/usr/lib/  //创建用于存放解码包的目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/usr/bin/  //创建用于存放可执行文件的目录
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/usr/share/ 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/usr/share/applications/  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;mkdir ~/mplayer/usr/share/pixmaps/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;二复制安装文件&#34;&gt;二、复制安装文件：&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -br /usr/local/mplayer/* ~/mplayer/usr/local/mplayer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;***特别注意：***CP命令中的&amp;quot;-b&amp;quot;这个参数绝对不能少，为此我走了很多弯路。因为mplayer中的有很多“软链接”，具体内容以后再说。&lt;/p&gt;
&lt;h2 id=&#34;三复制解码包&#34;&gt;三、复制解码包&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -br /usr/lib/codecs  ~/mplayer/usr/lib/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp -br /usr/lib/win32  ~/mplayer/usr/lib/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;四创建符号链接&#34;&gt;四、创建符号链接&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/mplayer/usr
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ../local/mplayer/bin/gmplayer ./bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ../local/mplayer/bin/mencoder ./bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ../local/mplayer/bin/mplayer ./bin/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ../../local/mplayer/share/applications/mplayer.desktop ./share/applications/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s ../../local/mplayer/share/pixmaps/mplayer.xpm ./share/pixmaps/&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;五创建一个control文件&#34;&gt;五、创建一个control文件&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;gedit ~/mplayer/DEBIAN/control&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Package: mplayer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Version: 1.0rc2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Section: utils
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Priority: optional
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Architecture: i386
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Essential: no
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Depends:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Recommends:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Suggests:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Installed-Size: &lt;span class=&#34;m&#34;&gt;22528&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Maintainer: WangYan &amp;lt;WebMaster@WangYan.Name&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Conflicts: 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Replaces:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Bugs: mailto:WebMaster@WangYan.Me
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Description: The Ultimate Movie Player For Linux.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; It plays most mpeg, avi and asf files, supported by many native and win32
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; DLL codecs. You can watch VCD, DVD and even DivX movies too. The other
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; big feature of mplayer is the wide range of supported output drivers. It
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; works with X11, Xv, DGA, OpenGL, SVGAlib, fbdev, but you can use SDL &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;and
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; this way all drivers of SDL&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; and some lowlevel card-specific drivers &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; Matrox/3dfx/SiS&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; too! Most of them supports software or hardware scaling,
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; so you can enjoy movies in fullscreen.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; .
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; This version includes the Gtk GUI.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;control里面的东西都是什么意思，慢慢去看吧。如果我在&amp;quot;Conflicts:&amp;ldquo;后面填了&amp;quot;w32codecs&amp;rdquo;，意思是说如果安装&amp;quot;w32codecs&amp;quot;，那么你将无法安装这个mplayer了，因为会产生冲突。另外，从&amp;quot;Description:&amp;ldquo;下面一行起要空一格。&lt;/p&gt;
&lt;h2 id=&#34;六最后用-dpkg-deb--b-命令打包&#34;&gt;六、最后用 dpkg-deb -b 命令打包。&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; ~/mplayer/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dpkg -b . ~/mplayer_1.0rc2-1_i386.deb&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;方法二用checkinstall打包&#34;&gt;方法二：用checkinstall打包&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;安装“checkinstall”
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install checkinstall&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;将上文的编译安装命令&amp;quot;sudo make install&amp;quot;改为&amp;quot;sudo checkinstall -D make install&amp;rdquo;&lt;/p&gt;
&lt;p&gt;其中的checkinstall所在行的命令就是打包命令，执行后会进入checkinstall的设置。&lt;/p&gt;
&lt;p&gt;照着提示走，很快，一个DEB包就奇迹般出现了&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;***备注：***这是一篇旧文章归档，实际发布日期为：2009-08-15&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Debian/Ubuntu 源码编译MPlayer中文版</title>
        <link>https://www.bg7pbp.com/p/ubuntu-compile-mplayer/</link>
        <pubDate>Mon, 20 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-compile-mplayer/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80-%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;一. 安装前准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C-%E7%BC%96%E8%AF%91%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;二. 编译前准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85&#34;&gt;三.、编译安装&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bmplayer%E9%85%8D%E7%BD%AE&#34;&gt;四、Mplayer配置&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mplayer是 Linux下功能超强的媒体播放器，几乎可以播放所有的多媒体文件。在Ubuntu中可以说是必备软件了，但从Ubuntu软件仓库安装的Mplayer是英文版的，因此装个中文版的是有必要的。下面根据自己的经历，详细说下Ubuntu中如何从源码编译安装Mplayer的中文版。&lt;/p&gt;
&lt;h2 id=&#34;一-安装前准备&#34;&gt;一. 安装前准备&lt;/h2&gt;
&lt;p&gt;1、下载Mplayer源码包。MPlayer-1.0rc2.tar.bz2 （&lt;a href=&#34;http://www.mplayerhq.hu/MPlayer/releases/MPlayer-1.0rc2.tar.bz2&#34;&gt;官方下载&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;您也可以使用svn获取最新版本（&lt;a href=&#34;http://localhost/wordpress/windows-svn-host.html&#34;&gt;什么是SVN？&lt;/a&gt;)&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install subversion
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;svn co svn://svn.mplayerhq.hu/mplayer/trunk mplayer&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、下载字体包。font-arial-cp1250.tar.bz2 （&lt;a href=&#34;ftp://ftp.mplayerhq.hu/MPlayer/releases/fonts/font-arial-cp1250.tar.bz2&#34;&gt;官方下载&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;3、下载默认皮肤。clearplayer-0.9.tar.bz2 （&lt;a href=&#34;http://www.mplayerhq.hu/MPlayer/skins/clearplayer-0.9.tar.bz2&#34;&gt;官方下载&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;4、下载如下解码包。 推荐您安装&amp;quot;w32codecs&amp;quot;（能减小编译后文件的体积），否则请下载如下解码包。&lt;/p&gt;
&lt;p&gt;下载linux解码包。all-20071007.tar.bz2 （&lt;a href=&#34;http://www.mplayerhq.hu/MPlayer/releases/codecs/all-20071007.tar.bz2&#34;&gt;官方下载&lt;/a&gt;）&lt;/p&gt;
&lt;p&gt;下载win32解码包。windows-all-20071007.zip （&lt;a href=&#34;http://www.mplayerhq.hu/MPlayer/releases/codecs/windows-all-20071007.zip&#34;&gt;官方下载&lt;/a&gt;）&lt;/p&gt;
&lt;h2 id=&#34;二-编译前准备&#34;&gt;二. 编译前准备&lt;/h2&gt;
&lt;p&gt;1、安装编译环境&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo apt-get install build-essential libgtk2.0-dev libstdc++5&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2、建立Mplayer相关目录。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/local/mplayer （建立MPlayer主目录 ）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、解压文件&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xjvf MPlayer-1.0rc2.tar.bz2 （解压Mplayer源码包）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;如果您安装了&amp;quot;w32codecs&amp;quot;，那么下面步骤可以不做。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/lib/codecs （建立linux解码包目录）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/lib/win32 （建立win32解码器目录）&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xjvf all-20071007.tar.bz2 （解压Linux解码器并移动）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv all-20071007/* /usr/lib/codecs/
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo chmod &lt;span class=&#34;m&#34;&gt;755&lt;/span&gt; /usr/lib/codecs/*&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bashunzip&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;sudo mv windows-all-20071007/* /usr/lib/win32/
sudo chmod 755 /usr/lib/win32/*&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;三编译安装&#34;&gt;三.、编译安装&lt;/h2&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; MPlayer-1.0rc2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mplayer --codecsdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/lib/codecs/ --win32codecsdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/lib/win32/ --enable-gui --language&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;zh_CN
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make install&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;选项说明：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/mplayer （Mplayer安装路径）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--codecsdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/lib/codecs/ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Linux 解码包路径）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--win32codecsdir&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/lib/win32/ &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;Windows 解码包路径）
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;--enable-gui &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;开启图形界面&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;注意：&lt;/strong&gt;&lt;/em&gt; Linux解码包和Windows解码包路径千万不要填错，否则一大堆问题等你！&lt;/p&gt;
&lt;h2 id=&#34;四mplayer配置&#34;&gt;四、Mplayer配置&lt;/h2&gt;
&lt;p&gt;1.复制字体到font目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xjvf font-arial-cp1250.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/local/mplayer/share/mplayer/font
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv font-arial-cp1250/* /usr/local/mplayer/share/mplayer/font&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;2.复制皮肤到skins目录&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xjvf clearplayer-0.9.tar.bz2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/local/mplayer/share/mplayer/skins/default
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv clearplayer/* /usr/local/mplayer/share/mplayer/skins/default&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3.复制源码包中默认配置文件,并重命名&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo cp ~/MPlayer-1.0rc2/etc/*  /usr/local/mplayer/etc/mplayer
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mv /usr/local/mplayer/etc/mplayer/example.conf /usr/local/mplayer/etc/mplayer/mplayer.conf&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;4.解决无法全屏播放&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo gedit /usr/local/mplayer/etc/mplayer/mplayer.conf
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;查找zoom&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;yes,然后去掉即可&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5.把MPlayer链接到系统环境&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/mplayer/bin/gmplayer /usr/local/bin&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;6.建立Mplayer快捷菜单&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;bash&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ln -s /usr/local/mplayer/share/applications/mplayer.desktop /usr/share/applications&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;OK!已经完成了！下次将会讲讲，&lt;a href=&#34;http://localhost/wordpress/ubuntu-dpkg-debian.html&#34;&gt;怎样将编译好的Mplayer打包成Debian包&lt;/a&gt;，以方便下次安装。顺便附一张图片和已经编译好的的Mplayer 。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://img.cdn.wangyan.cloud/s/Shiki_Player.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;p&gt;**备注：**这是一篇旧文章归档，实际发布日期为：2009-08-10&lt;/p&gt;</description>
        </item>
        <item>
        <title>流行的WEB2.0颜色值</title>
        <link>https://www.bg7pbp.com/p/css-popular-color-palette/</link>
        <pubDate>Sun, 19 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/css-popular-color-palette/</guid>
        <description>&lt;p&gt;网页配色是一件很麻烦的事情，有时候试了几十个颜色方案都不合适。如果去看那些什么配色理论，那就更头晕，更多时候，我们往往是根据网站的定位和内容，靠感觉来决定颜色的选择&lt;/p&gt;
&lt;p&gt;下面是网络流行的一些比较舒服的颜色，先收藏起来，方便以后参考&lt;/p&gt;
&lt;style type=&#34;text/css&#34;&gt;
#color div{color:#999999; font-size:12px;width: 400px;height: 80px;margin: 0px auto;margin-bottom:10px;}
.style1{border:1px solid #96C2F1;background-color: #EFF7FF}
.style2{border:1px solid #9BDF70;background-color: #F0FBEB}
.style3{border:1px solid #BBE1F1;background-color: #EEFAFF}
.style4{border:1px solid #CCEFF5;background-color: #FAFCFD}
.style5{border:1px solid #FFCC00;background-color: #FFFFF7}
.style6{border:1px solid #92B0DD;background-color: #FFFFFf}
.style7{border:1px solid #A9C9E2;background-color: #E8F5FE}
.style8{border:1px solid #E3E197;background-color: #FFFFDD}
.style9{border:1px solid #ADCD3C;background-color: #F2FDDB}
.style10{border:1px solid #F8B3D0;background-color: #FFF5FA}
.style11{border:1px solid #D3D3D3;background-color: #F7F7F7}
.style12{border:1px solid #BFD1EB;background-color: #F3FAFF}
.style13{border:1px solid #FFDD99;background-color: #FFF9ED}
.style14{border:1px solid #CACAFF;background-color: #F7F7FF}
.style15{border:1px solid #A5B6C8;background-color: #EEF3F7}
.style16{border:1px solid #CEE3E9;background-color: #F1F7F9}
.style17{border:1px solid #CAE3FF;background-color: #F4F9FF}
.style18{border:1px solid #C9D9EE;background-color: #ECF8FF}
.style19{border:1px solid #5C9CC0;background-color: #F2FAFF}&lt;/style&gt;
&lt;div id=&#34;color&#34;&gt;
	&lt;div class=&#34;style1&#34;&gt;#EFF7FF #96C2F1&lt;/div&gt;
	&lt;div class=&#34;style2&#34;&gt;#F0FBEB #9BDF70&lt;/div&gt;
	&lt;div class=&#34;style6&#34;&gt;#FFFFFF #92B0DD&lt;/div&gt;
	&lt;div class=&#34;style3&#34;&gt;#EEFAFF #BBE1F1&lt;/div&gt;
	&lt;div class=&#34;style4&#34;&gt;#FAFCFD #CCEFF5&lt;/div&gt;
	&lt;div class=&#34;style5&#34;&gt;#FFFFF7 #FFCC00&lt;/div&gt;
	&lt;div class=&#34;style7&#34;&gt;#E8F5FE #A9C9E2&lt;/div&gt;
	&lt;div class=&#34;style8&#34;&gt;#FFFFDD #E3E197&lt;/div&gt;
	&lt;div class=&#34;style9&#34;&gt;#F2FDDB #ADCD3C&lt;/div&gt;
	&lt;div class=&#34;style10&#34;&gt;#FFF5FA #F8B3D0&lt;/div&gt;
	&lt;div class=&#34;style11&#34;&gt;#F7F7F7 #D3D3D3&lt;/div&gt;
	&lt;div class=&#34;style12&#34;&gt;#F3FAFF #BFD1EB&lt;/div&gt;
	&lt;div class=&#34;style13&#34;&gt;#FFF9ED #FFDD99&lt;/div&gt;
	&lt;div class=&#34;style14&#34;&gt;#F7F7FF #CACAFF&lt;/div&gt;
	&lt;div class=&#34;style15&#34;&gt;#EEF3F7 #A5B6C8&lt;/div&gt;
	&lt;div class=&#34;style16&#34;&gt;#F1F7F9 #CEE3E9&lt;/div&gt;
	&lt;div class=&#34;style17&#34;&gt;#F4F9FF #CAE3FF&lt;/div&gt;
	&lt;div class=&#34;style18&#34;&gt;#ECF8FF #C9D9EE&lt;/div&gt;
	&lt;div class=&#34;style19&#34;&gt;#F2FAFF #5C9CC0&lt;/div&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>SVN实现SSL访问认证</title>
        <link>https://www.bg7pbp.com/p/svn-configure-ssl/</link>
        <pubDate>Sat, 18 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/svn-configure-ssl/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#ssl%E8%AE%A4%E8%AF%81%E6%B5%81%E7%A8%8B&#34;&gt;SSL认证流程：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C&#34;&gt;一、准备工作：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%9E%E7%8E%B0ssl%E8%BF%87%E7%A8%8B&#34;&gt;二、实现SSL过程：&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21pache%E4%BB%A5%E6%94%AF%E6%8C%81ssl&#34;&gt;2.1、PACHE以支持SSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22%E7%94%9F%E6%88%90%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AF%86%E9%92%A5%E5%91%BD%E4%BB%A4&#34;&gt;2.2、生成服务器密钥命令：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23%E7%94%9F%E6%88%90%E8%AF%81%E4%B9%A6%E8%AF%B7%E6%B1%82&#34;&gt;2.3、生成证书请求&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24%E7%94%9F%E6%88%90%E5%86%85%E9%83%A8ca%E7%A7%81%E9%92%A5&#34;&gt;2.4、生成内部CA私钥&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#25%E4%B8%BA%E7%BD%91%E7%AB%99%E6%9C%8D%E5%8A%A1%E5%99%A8%E7%AD%BE%E7%BD%B2%E8%AF%81%E4%B9%A6&#34;&gt;2.5、为网站服务器签署证书&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#26%E7%BB%93%E6%9D%9F%E6%93%8D%E4%BD%9C&#34;&gt;2.6、结束操作&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E7%89%B9%E5%88%AB%E8%AF%B4%E6%98%8E&#34;&gt;三、特别说明：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SSL：安全套接层，是netscape公司设计的主要用于web的安全传输协议。通过基于公开密钥体系的证书认证方式来确保客户端和网站服务器之间的数据安全。要实现SSL，就需要apache的SSL证书并且通过CA认证。 软件版本：Apache_2.2.10-win32-x86-openssl-0.9.8i.msi&lt;/p&gt;
&lt;h2 id=&#34;ssl认证流程&#34;&gt;SSL认证流程：&lt;/h2&gt;
&lt;p&gt;SSL客户端在TCP连接建立之后，发出一个消息给服务器，这个消息里面包含了自己可实现的算法列表和其它一些需要的消息，SSL的服务器端会回应 一个数据包，这里面确定了这次通信所需要的算法，然后发过去自己的证书（里面包含了身份和自己的公钥）。Client在收到这个消息后会生成一个 秘密消息，用SSL服务器的公钥加密后传过去，SSL服务器端用自己的私钥解密后，会话密钥协商成功，双方可以用同一份会话密钥来通信了。 如果对于一般的应用，管理员只需生成&amp;quot;证书请求“（后缀大多为.csr），它包含你的名字和公钥，然后把这份请求交给诸如verisign等有CA服务公 司，你的证书请求经验证后，CA用它的私钥签名，形成正式的证书发还给你。管理员再在web server上导入这个证书就行了。 如果你不想花那笔钱， 或者想了解一下原理，可以自己做CA。从ca的角度讲，你需要CA的私钥和公钥。从想要证书的服务器角度将，需要把服务器的证书请求交给CA. 如果你要自己做CA，别忘了客户端需要导入CA的证书（CA的证书是自签名的，导入它意味着你&amp;quot;信任“这个CA签署的证书）。而商业CA的一般不 用，因为它们已经内置在你的浏览器中了。&lt;/p&gt;
&lt;h2 id=&#34;一准备工作&#34;&gt;一、准备工作：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;将Apache目录下conf目录中的openssl.cnf文件复制到C:\usr\local\ssl\文件夹中&lt;/li&gt;
&lt;li&gt;在Apache到bin目录下新建文件夹demoCA；然后在demoCA文件夹中新建newcerts文件夹。&lt;/li&gt;
&lt;li&gt;在demoCA文件夹中新建文件index.txt，内容为空。新建iserial文件，内容为&amp;quot;01“。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二实现ssl过程&#34;&gt;二、实现SSL过程：&lt;/h2&gt;
&lt;h3 id=&#34;21pache以支持ssl&#34;&gt;2.1、PACHE以支持SSL&lt;/h3&gt;
&lt;p&gt;编辑httpd.conf，查找下面代码，并去掉前面的#&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;22生成服务器密钥命令&#34;&gt;2.2、生成服务器密钥命令：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;openssl genrsa -out server.key 1024
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;说明：此命令将生成1024 位的RSA 私钥，得到server.key文件&lt;/p&gt;
&lt;h3 id=&#34;23生成证书请求&#34;&gt;2.3、生成证书请求&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;openssl req -new -key server.key -out server.csr
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这是用步骤1的密钥生成证书请求文件server.csr, 这一步提很多问题，按要求输入&lt;/p&gt;
&lt;h3 id=&#34;24生成内部ca私钥&#34;&gt;2.4、生成内部CA私钥&lt;/h3&gt;
&lt;p&gt;openssl genrsa -out ca.key 10245.利用CA私钥生成自签署CA证书&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;openssl req -new -x509 -days 365 -key ca.key -out ca.crt
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;25为网站服务器签署证书&#34;&gt;2.5、为网站服务器签署证书&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;26结束操作&#34;&gt;2.6、结束操作&lt;/h3&gt;
&lt;p&gt;将&amp;quot;server.crt&amp;quot; server.key 复制到conf文件夹下，并重新启动 APACHE。 在IE中导入CA的证书到可信任区域，否则会报告证书不可信任！&lt;/p&gt;
&lt;h2 id=&#34;三特别说明&#34;&gt;三、特别说明：&lt;/h2&gt;
&lt;p&gt;这些证书制作仅仅供开发使用。真正要通过CNNIC签署，CSR文件格式是有比较严格的要求的。具体可以参考附件文档，为你的网站实现SSL。**备注：**这是一篇旧文章归档，实际发布日期为：2008-10-30&lt;/p&gt;
</description>
        </item>
        <item>
        <title>搭建SVN版本控制环境</title>
        <link>https://www.bg7pbp.com/p/svn-install-windows/</link>
        <pubDate>Fri, 17 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/svn-install-windows/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80svn%E7%AE%80%E4%BB%8B&#34;&gt;一、SVN简介&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;二、安装前准备&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#21apache-http-serve&#34;&gt;2.1、Apache HTTP Serve&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#22subversionsvn&#34;&gt;2.2、Subversion(SVN)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#23tortoisesvn&#34;&gt;2.3、TortoiseSVN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#24languagepack&#34;&gt;2.4、LanguagePack&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85%E6%AD%A5%E9%AA%A4&#34;&gt;三、安装步骤&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#31%E5%AE%89%E8%A3%85-apache-http-server&#34;&gt;3.1、安装 Apache HTTP Server&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#32%E5%AE%89%E8%A3%85-subversion&#34;&gt;3.2、安装 Subversion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#33svn%E4%B8%8Eapache%E7%BB%93%E5%90%88&#34;&gt;3.3、SVN与Apache结合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9Bsvn%E9%85%8D%E7%BD%AE&#34;&gt;四、SVN配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#41%E8%AE%BE%E5%AE%9Asvn%E6%96%87%E4%BB%B6%E5%BA%93%E8%B7%AF%E5%BE%84&#34;&gt;4.1、设定SVN文件库路径&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#42svnpath-%E8%AF%AD%E6%B3%95&#34;&gt;4.2、SVNPath 语法：&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#43svnparentpath%E8%AF%AD%E6%B3%95&#34;&gt;4.3、SVNParentPath语法：&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95&#34;&gt;五、使用方法&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#51%E5%BB%BA%E7%AB%8B%E7%89%88%E6%9C%AC%E5%BA%93repository&#34;&gt;5.1、建立版本库（Repository）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#52%E5%AF%BC%E5%85%A5%E9%A1%B9%E7%9B%AE&#34;&gt;5.2、导入项目&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6&#34;&gt;六、权限控制&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#61basic%E5%9F%BA%E6%9C%AC%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E7%9A%84%E9%85%8D%E7%BD%AE&#34;&gt;6.1、Basic（基本）访问控制的配置&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#62%E7%94%A8apache%E7%9A%84htpasswd%E6%8C%87%E4%BB%A4%E7%94%9F%E6%88%90%E7%94%A8%E6%88%B7%E5%90%8D%E5%92%8C%E5%AF%86%E7%A0%81&#34;&gt;6.2、用Apache的htpasswd指令生成用户名和密码&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#63%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%BA%93%E8%AE%BF%E9%97%AE%E6%9D%83%E9%99%90%E6%96%87%E4%BB%B6&#34;&gt;6.3、配置文件库访问权限文件&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83%E7%BB%93%E8%AF%AD&#34;&gt;七、结语&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最近在乱做一些东西，有时会搞错了一些代码，但又无法恢复到以前某个状态，所以就有必要使用SVN进行版本控制了。Subversion 你知道是什么吗？本文将以Windows平台为例，结合自己的经历，说下版本控制环境的搭建和使用。说明：本文将使用Apache+Subversion+TortoiseSVN进行构建。&lt;/p&gt;
&lt;h2 id=&#34;一svn简介&#34;&gt;一、SVN简介&lt;/h2&gt;
&lt;p&gt;Subversion，一种功能强大的开源版本控制工具，其不仅可以管理程序源代码，也可以应用于其他协作管理数据的工作，在服务器端，如将其与Apache 的 HTTP 服务器相结合后，可实现更多的高级管理功能和安全特性，现在Subversion已基本取代 CVS，成为新一代的开源版本控制工具。举例：一个项目共花100天完成，到最后一天时，发现全错了，我想恢复到第50天某个时间的状态。怎么办？你每一天每次改动都有备份？&lt;/p&gt;
&lt;h2 id=&#34;二安装前准备&#34;&gt;二、安装前准备&lt;/h2&gt;
&lt;h3 id=&#34;21apache-http-serve&#34;&gt;2.1、Apache HTTP Serve&lt;/h3&gt;
&lt;p&gt;官方下载地址：&lt;a href=&#34;http://httpd.apache.org&#34;&gt;http://httpd.apache.org&lt;/a&gt;，目前最新版本为Apache 2.2.10，我下载的是 apache_2.2.10-win32-x86-openssl-0.9.8i.msi&lt;/p&gt;
&lt;h3 id=&#34;22subversionsvn&#34;&gt;2.2、Subversion(SVN)&lt;/h3&gt;
&lt;p&gt;官方下载地址：&amp;lt;&amp;ldquo;&lt;a href=&#34;http://subversion.tigris.org/project_packages.html%3E&#34;&gt;http://subversion.tigris.org/project_packages.html&amp;gt;&lt;/a&gt;，最新版本为 Subversion 1.5.4 下载时要注意下载和Apache2.2.x版本对应的，我下载的是 svn-win32-1.5.4.zip（二进制文件），你也可以下载Setup-Subversion-1.5.3.msi（Windows安装文件，一路“下一步”可以省去配置环境变量的麻烦）。&lt;/p&gt;
&lt;h3 id=&#34;23tortoisesvn&#34;&gt;2.3、TortoiseSVN&lt;/h3&gt;
&lt;p&gt;TortoiseSVN是Subversion的Windows客户端，可以看作Windows资源管理器的插件，安装之后Windows就可以识别Subversion的工作目录。简单的说就是Subversion可视化操作工具。官方下载地址：&lt;a href=&#34;http://tortoisesvn.tigris.org/&#34;&gt;http://tortoisesvn.tigris.org/&lt;/a&gt;，我下载的是TortoiseSVN-1.5.5.14361-win32-svn-1.5.4.mis&lt;/p&gt;
&lt;h3 id=&#34;24languagepack&#34;&gt;2.4、LanguagePack&lt;/h3&gt;
&lt;p&gt;TortoiseSVN 中文语言包，需注意到是要和客户端程序版本相同。这里是LanguagePack_1.5.5.14361-win32-zh_CN.msi语言包&lt;/p&gt;
&lt;h2 id=&#34;三安装步骤&#34;&gt;三、安装步骤&lt;/h2&gt;
&lt;h3 id=&#34;31安装-apache-http-server&#34;&gt;3.1、安装 Apache HTTP Server&lt;/h3&gt;
&lt;p&gt;安装非常简单，不明白可以参考本站文章。要注意的是，电脑如果已经安装了IIS，要么暂停IIS服务，要么把IIS的端口改为非80端口。&lt;/p&gt;
&lt;h3 id=&#34;32安装-subversion&#34;&gt;3.2、安装 Subversion&lt;/h3&gt;
&lt;p&gt;如果你前面下载的是Windows安装文件，那么你一路下一步就好了。如果你下载的是zip压缩包，那么请将压缩包解压，比如我解压到C:\Program Files\Subversion。那么在“系统属性“-&amp;ldquo;高级“-&amp;ldquo;环境变量“-&amp;ldquo;系统变量PACH“的值后面加上;C:\Program Files\Subversion\bin就行了。&lt;/p&gt;
&lt;h3 id=&#34;33svn与apache结合&#34;&gt;3.3、SVN与Apache结合&lt;/h3&gt;
&lt;p&gt;首先将Subversion安装目录bin下面的两个文件：mod_authz_svn.so和mod_dav_svn.so复制到Apache安装目录modules目录下，然后将Subversion安装目录bin下面的libdb44.dll复制到Apache安装目录bin目录下 。&lt;/p&gt;
&lt;p&gt;在httpd.conf中查找下面2行代码，并将其前面的&amp;rdquo;#“号去掉&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#LoadModule dav_module modules/mod_dav.so
#LoadModule dav_fs_module modules/mod_dav_fs.so&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在所有LoadModule后面添加下面代码，重启Apache后状态栏变成Apache/2.2.10 SVN1.4.6 DAV/2&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;四svn配置&#34;&gt;四、SVN配置&lt;/h3&gt;
&lt;h3 id=&#34;41设定svn文件库路径&#34;&gt;4.1、设定SVN文件库路径&lt;/h3&gt;
&lt;p&gt;要设定 URL 路径与文件库实际路径的对应关系。对应的方式有两种，分别是 SVNPath(适合指定单个文件库的路径) 与SVNParentPath(多个文件库的路径)。完成后，将代码加入httpd.conf中。&lt;/p&gt;
&lt;h3 id=&#34;42svnpath-语法&#34;&gt;4.2、SVNPath 语法：&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;Location /svn/poject&amp;gt;
DAV svn
SVNPath d:/svn/poject
&amp;lt;/Location&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;其中 &amp;ldquo;/svn/poject&amp;rdquo; 就是用户端存取特定文件库的 URI，SVNPath 后面指定的路径则是文件库的绝对路径。注意 Location 标签后面的 /svn/poject的第一个斜线不可少！&lt;/p&gt;
&lt;h3 id=&#34;43svnparentpath语法&#34;&gt;4.3、SVNParentPath语法：&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;Location /svn&amp;gt;
DAV svn
SVNParentPath d:/svn
&amp;lt;/Location&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;这表示可以让任何人都可以透过 &lt;a href=&#34;http://myserver/svn/&#34;&gt;http://myserver/svn/&lt;/a&gt; &amp;lt;文件库名称&amp;gt; 的方式，存取位于 d:/svn这个目录以下的所有文件库。也就是说，这个设定动作只需要一次，如果使用 SVNPath，那么你必须为各个文件库分别指定对应的路径。&lt;/p&gt;
&lt;h2 id=&#34;五使用方法&#34;&gt;五、使用方法&lt;/h2&gt;
&lt;h3 id=&#34;51建立版本库repository&#34;&gt;5.1、建立版本库（Repository）&lt;/h3&gt;
&lt;p&gt;方法一.在提示符窗口中输入svnadmin create D:\svn\poject，路径填你喜欢的就可以了。&lt;/p&gt;
&lt;p&gt;方法二.使用TortoiseSVN图形化完成这一步，在目录D:\svn\poject下右键-&amp;gt;TortoiseSVN-&amp;gt;Create Repository here&amp;hellip;， 然后可以选择版本库模式， 这里使用默认即可， 然后就自动创建了一系列目录和文件。&lt;/p&gt;
&lt;h3 id=&#34;52导入项目&#34;&gt;5.2、导入项目&lt;/h3&gt;
&lt;p&gt;5.2.1、使用命令行操作，在命令行中CD到项目文件夹下后，执行下面命令，其中M后面的是项目信息，可以任意填写。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;svn import &amp;#34;http://localhost/svn/poject&amp;#34; -m &amp;#34;Initial repository layout&amp;#34;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;5.2.2、使用TortoiseSVN图形化&lt;/p&gt;
&lt;p&gt;右键-&amp;gt;TortoiseSVN-&amp;gt;Import&amp;hellip;
URL of repository输入&amp;quot;http://localhost/svn/poject&amp;rdquo;&lt;/p&gt;
&lt;h2 id=&#34;六权限控制&#34;&gt;六、权限控制&lt;/h2&gt;
&lt;p&gt;Sebversion 提供了多种验证使用者身份的方式。&lt;/p&gt;
&lt;h3 id=&#34;61basic基本访问控制的配置&#34;&gt;6.1、Basic（基本）访问控制的配置&lt;/h3&gt;
&lt;p&gt;修改 httpd.conf 的 &lt;Location&gt; ，设定如下：&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;Location /svn&amp;gt;
DAV svn
# 指定多个版本库路径
SVNParentPath d:\svn 
# 认证的名称,显示于登录提示框
AuthName &amp;#34;欢迎登录&amp;#34;
# 策略文件，指定用户或组在版本库中目录的访问权限
AuthzSVNAccessFile &amp;#34;d:\svn\authz&amp;#34;
# 表示只有经过认证的用户才可以访问
Require valid-user
#表示允许匿名访问
Satisfy Any
# 认证的类型，即使用基本验证
AuthType Basic
# 存储用户登录信息的文件
AuthUserFile &amp;#34;d:\svn\passwd&amp;#34;
&amp;lt;/Location&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&#34;62用apache的htpasswd指令生成用户名和密码&#34;&gt;6.2、用Apache的htpasswd指令生成用户名和密码&lt;/h3&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;htpasswd -c d:\svn\passwd username&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;-c 的作用是创建用户文件passwordfile 下次就不用-c参数，而是用-m参数，因为文件passwordfile已经创建。
username是用户名&lt;br /&gt;htpasswd -m d:/svn/passwd username&lt;/p&gt;
&lt;h3 id=&#34;63配置文件库访问权限文件&#34;&gt;6.3、配置文件库访问权限文件&lt;/h3&gt;
&lt;p&gt;假设为projectA和projectB都建立了相应的版本库，可以在d:\svn\authz文件中&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[projectA:/]
username1 = rw
[projectA:/]
username2 = r

[projectA:/trunk]
username1 =

[projectB:/]
* = r
[projectB:/trunk]
username1 =&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;另外，你还可以在d:\svn\authz中定义一组用户，然后按组进行权限配置#各组成员名单&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;text&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;[groups]
groups1 = username1
groups2 = username2

#所以文件库都可以匿名访问,但只有groups1组用户有读写权限
[/] 
* = r
@groups1 = rw

#在文件库projectA下groups2组的用户也有读写权限
[/projectA] 
groups2 = rw

#禁止所有用户访问/private文件库
[/private] 
* =&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&#34;七结语&#34;&gt;七、结语&lt;/h2&gt;
&lt;p&gt;上文只是简单讲解SVN的搭建和使用，属个人技术札记。事实上，普通用户是完全可以使用现有的SVN源代码托管服务，比如国内的 &lt;a href=&#34;http://svn.w18.net&#34;&gt;http://svn.w18.net&lt;/a&gt; 和 &lt;a href=&#34;http://www.svnhost.cn/&#34;&gt;http://www.svnhost.cn/&lt;/a&gt; ，还有更专业的 &lt;a href=&#34;http://code.google.com/&#34;&gt;http://code.google.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008-10-25&lt;/p&gt;</description>
        </item>
        <item>
        <title>Windows 快速搭建PHP运行环境</title>
        <link>https://www.bg7pbp.com/p/windows-wamp-php-setup/</link>
        <pubDate>Thu, 16 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/windows-wamp-php-setup/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%80%E5%AE%89%E8%A3%85%E5%89%8D%E5%87%86%E5%A4%87&#34;&gt;一、安装前准备&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%8C-%E5%AE%89%E8%A3%85%E4%B8%8E%E5%88%9D%E6%AD%A5%E9%85%8D%E7%BD%AEapache2&#34;&gt;二、 安装与初步配置Apache2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%89%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AEphp5&#34;&gt;三、安装与配置php5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%9B%9B-%E5%B0%86apache%E4%B8%8Ephp5%E7%9B%B8%E7%BB%93%E5%90%88&#34;&gt;四、 将Apache与PHP5相结合&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%BA%94%E5%BC%80%E5%90%AFapache-%E5%88%B0rewrite-%E6%A8%A1%E5%9D%97&#34;&gt;五、开启Apache 到rewrite 模块&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AD-%E5%AE%89%E8%A3%85mysql&#34;&gt;六. 安装MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B8%83-%E5%AE%89%E8%A3%85phpmyadmin&#34;&gt;七. 安装phpMyAdmin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%85%AB%E5%AE%89%E8%A3%85zendoptimize&#34;&gt;八、安装ZendOptimize&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E4%B9%9D%E4%BF%AE%E6%94%B9%E9%99%84%E4%BB%B6%E4%B8%8A%E4%BC%A0%E5%A4%A7%E5%B0%8F%E9%99%90%E5%88%B6%E5%8F%AF%E9%80%89&#34;&gt;九、修改附件上传大小限制（可选）&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E5%8D%81%E9%87%8D%E5%90%AFapache%E5%8D%B3%E5%8F%AF&#34;&gt;十.重启Apache即可&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WAMP，即Apache2.2 + Mysql + PHP5 + phpMyAdmin + Zend 。下面方法5分钟足够让你搭建这么一个环境，你不必去使用像 &lt;a href=&#34;http://www.apachefriends.org/zh_cn/xampp.html&#34;&gt;Xampp&lt;/a&gt;、&lt;a href=&#34;http://phpnow.org/&#34;&gt;PHPnow&lt;/a&gt;、&lt;a href=&#34;http://www.easyphp.org/index.php&#34;&gt;EasyPHP&lt;/a&gt;、&lt;a href=&#34;http://drupaltaiwan.org/TWPD&#34;&gt;TWAPMS&lt;/a&gt;、&lt;a href=&#34;http://comsenz.com&#34;&gt;ComsenzEXP&lt;/a&gt;、&lt;a href=&#34;http://www.skycn.com/soft/31924.html&#34;&gt;Smart Apache&lt;/a&gt;这些服务器套件，即便他们安装很简便，但存在诸多限制，升级也不方便。&lt;/p&gt;
&lt;h2 id=&#34;一安装前准备&#34;&gt;一、安装前准备&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Apache：&lt;a href=&#34;http://httpd.apache.org/download.cgi&#34;&gt;httpd-2.2.17-win32-x86-openssl-0.9.8o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;PHP5：&lt;a href=&#34;http://www.php.net/downloads.php&#34;&gt;php-5.3.3-Win32-VC6-x86&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Mysql：&lt;a href=&#34;http://dev.mysql.com/downloads&#34;&gt;mysql-5.1.52-win32&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;phpMyAdmin：&lt;a href=&#34;http://www.phpmyadmin.net&#34;&gt;phpMyAdmin-3.3.8-all-languages&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Zend：&lt;a href=&#34;http://www.zend.com/downloads&#34;&gt;ZendOptimizer-3.3.3-Windows-i386&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;二-安装与初步配置apache2&#34;&gt;二、 安装与初步配置Apache2&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;运行Apache，一路“下一步“我的路径是&amp;quot;D:\webserver\Apache2.2&amp;quot;，端口是&amp;quot;80&amp;quot;，其余的随便填。&lt;/li&gt;
&lt;li&gt;在开始菜单或安装目录的&amp;quot;conf&amp;quot;文件夹内，编辑 httpd.conf配置文件，分别查找&amp;quot;DocumentRoot&amp;quot;和&amp;quot;Directory&amp;quot;将其后面地址改为网站根目录，如&amp;quot;D:\webserver\www&amp;quot;&lt;/li&gt;
&lt;li&gt;查找&amp;quot;index.html&amp;quot;将其改为&amp;quot;index.html index.php&amp;quot;&lt;/li&gt;
&lt;li&gt;保存配置文件，重启Apache服务器（开始菜单或状态栏&amp;quot;Restart &amp;ldquo;）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;三安装与配置php5&#34;&gt;三、安装与配置php5&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;解压至 &amp;ldquo;D:\webserver\php5&amp;rdquo; 后，将php5目录下的&amp;quot;php5ts.dll&amp;quot;移动到&amp;quot;C:\windows\system32&amp;rdquo;。&lt;/li&gt;
&lt;li&gt;将&amp;quot;php.ini-dist&amp;quot;改名&amp;quot;php.ini&amp;quot;并移动到&amp;quot;C:\windows&amp;quot; 然后做如下修改：&lt;/li&gt;
&lt;li&gt;查找 extension_dir = &amp;ldquo;./&amp;rdquo;　改为PHP5的ext文件夹地址如&amp;quot;D:\webserver\php5\ext&amp;quot;&lt;/li&gt;
&lt;li&gt;将extension=php_gd2.dll、extension=php_mbstring.dll、extension=php_mcrypt.dll、extension=php_mysql.dll前的&amp;quot;；&amp;ldquo;号去掉。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;四-将apache与php5相结合&#34;&gt;四、 将Apache与PHP5相结合&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;查找&amp;rdquo;#LoadModule ssl_module modules/mod_ssl.so&amp;quot;在后面加入&amp;quot;LoadModule php5_module D:\webserver\php5\php5apache2_2.dll&amp;quot;&lt;/li&gt;
&lt;li&gt;查找&amp;quot;AddType application/x-gzip .gz .tgz&amp;quot;在后面加入&amp;quot;AddType application/x-httpd-php .php&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;五开启apache-到rewrite-模块&#34;&gt;五、开启Apache 到rewrite 模块&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;查找#LoadModule rewrite_module modules/mod_rewrite.so 去掉#号&lt;/li&gt;
&lt;li&gt;查找&amp;quot;Options FileInfo AuthConfig Limit&amp;quot; 将其下面的&amp;quot;AllowOverride none&amp;quot; 改为 &amp;ldquo;AllowOverride all&amp;rdquo;&lt;/li&gt;
&lt;li&gt;查找&amp;quot;Include conf/extra/httpd-autoindex.conf&amp;quot; 去掉前面的&amp;quot;#&amp;quot;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;六-安装mysql&#34;&gt;六. 安装MySQL&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一路&amp;quot;下一步&amp;quot;填好密码即可，其余的默认。另外，建议安装5.X版本，可以避免在phpMyAdmin中提示PHP版本过低的警告。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;七-安装phpmyadmin&#34;&gt;七. 安装phpMyAdmin&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;将phpMyAdmin解压到网站根目录，如&amp;quot;D:\webserver\www&amp;quot; 后，复制文件libraries/ config.default.php到phpMyAdmin 根目录，并改名为&amp;quot;config.inc.php&amp;quot;&lt;/li&gt;
&lt;li&gt;查找 $cfg[&amp;lsquo;blowfish_secret&amp;rsquo;] = &amp;lsquo;&#39;; 改为 $cfg[&amp;lsquo;blowfish_secret&amp;rsquo;] = &amp;rsquo; localhost&amp;rsquo;;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;八安装zendoptimize&#34;&gt;八、安装ZendOptimize&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;一路&amp;quot;下一步&amp;quot;和&amp;quot;确认&amp;quot;注意要选择正确apche2.2到路径和php.ini路径就行了。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;九修改附件上传大小限制可选&#34;&gt;九、修改附件上传大小限制（可选）&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;编辑php.ini 查找post_max_size =10 M 表单提交最大数据为10M.此项不是限制上传单个文件的大小,而是针对整个表单的提交数据进行限制的. 限制范围包括表单提交的所有内容.例如:发表贴子时,贴子标题,内容,附件等&amp;hellip;&lt;/li&gt;
&lt;li&gt;file_uploads = On 是否允许上传文件,如果为OFF您将不能上传文件.&lt;/li&gt;
&lt;li&gt;upload_tmp_dir = &amp;ldquo;C:\Inetpub\PHP5\temp&amp;rdquo; 上传文件时系统使用的缓存目录.如果此目录所在磁盘空间不足的话您将不能上传文件&lt;/li&gt;
&lt;li&gt;upload_max_filesize =2 M 最大上传文件大小,此项针对上传文件时单个文件的大小。与post_max_size之间的关系: 在论坛发表贴子时,您post_max_size 设为10M,而此项设成了2M,那么您只能上传最大为2M的附件,且可以同时上传5个。&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&#34;十重启apache即可&#34;&gt;十.重启Apache即可&lt;/h2&gt;
&lt;p&gt;到此为止，安装配置就结束了，你成功了吗？看不明白的话，下载附件看详细图文教程。&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Ubuntu安装Fedora主题</title>
        <link>https://www.bg7pbp.com/p/ubuntu-install-fedora-theme/</link>
        <pubDate>Mon, 13 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/ubuntu-install-fedora-theme/</guid>
        <description>&lt;p&gt;Fedora10 采用 Nodoka 作为系统默认主题，与 ubuntu 黄色调不同，fedora 默认主题主色调是蓝色。下面将在 gnome 桌面环境下，安装 nodoka 主题 + fedora图标 + fedora 指针。 从附件或 &lt;a href=&#34;http://fedorahosted.org/nodoka/&#34;&gt;点击这里&lt;/a&gt;，下载最新版的软件包到你的用户目录，其中包括引擎包 gtk-nodoka-engine 与主题包 nodoka-theme-gnome。&lt;/p&gt;
&lt;h2 id=&#34;一安装nodoka引擎包&#34;&gt;一、安装nodoka引擎包&lt;/h2&gt;
&lt;h3 id=&#34;安装编译环境&#34;&gt;安装编译环境：&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get install build-essential libgtk2.0-dev  
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&#34;编译安装&#34;&gt;编译安装&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;tar zxvf gtk-nodoka-engine-0.7.2.tar.gz cd gtk-nodoka-engine-0.7.2 ./configure --prefix=/usr --enable-animation make sudo make install  
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;二安装nodoka主题&#34;&gt;二、安装nodoka主题&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;tar zxvf nodoka-theme-gnome-0.3.90.tar.gz cd nodoka-theme-gnome-0.3.90 sudo cp -r ./Nodoka /usr/share/themes sudo chmod 777 -R /usr/share/themes/Nodoka  
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;三安装nokoka图标于指针&#34;&gt;三、安装nokoka图标于指针&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;tar zxvf fedora10.icon.tar.gz cd fedora10.icon cp -r ./* ~/.icons/  
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&#34;四启用nodoka主题&#34;&gt;四、启用Nodoka主题&lt;/h2&gt;
&lt;p&gt;[系统]-&amp;gt;［外观］-&amp;gt;[主题] 下选择Nodoka。或者在桌面点右键就OK了&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Wordpress主题Header SEO</title>
        <link>https://www.bg7pbp.com/p/wordpress-theme-header-seo/</link>
        <pubDate>Sat, 11 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/wordpress-theme-header-seo/</guid>
        <description>&lt;p&gt;SEO这东西人云亦云，但不管怎样 &lt;code&gt;title&lt;/code&gt;、&lt;code&gt;description&lt;/code&gt;、&lt;code&gt;keywords&lt;/code&gt; 这三个标签是不能忽视的，为了废掉 &lt;code&gt;All in one seo&lt;/code&gt; 这插件，我对主题进行了些修改，使之可以自定义&lt;code&gt;description 和 &lt;/code&gt;keywords` 。&lt;/p&gt;
&lt;p&gt;编辑主题文件中的 &lt;code&gt;header.php&lt;/code&gt; 文件，在head标签里面添加一些代码即可。原理也很简单，也就是使用了 wordpress 的自定义字段的功能。如果文章有自定义字段“desc”则输出其值，否则输出摘要或者自动截取的文摘（默认字符数为100），作为 &lt;code&gt;description&lt;/code&gt;，同理，如果有自定义字段“key”则输出，否则以文章的tag，作为 &lt;code&gt;keywords&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;另外，除了 home、single 和 page 页面外，其他的全部 &lt;code&gt;noindex,nofollow&lt;/code&gt; 了，这样世界就清净多了&amp;hellip;&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;php&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;lt;?&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_single&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;//如果有自定义字段“desc”则输出，否则输出摘要或者自动截取的文摘，作为description
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_post_meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;desc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;$desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_post_meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;desc&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post_excerpt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;$desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post_excerpt&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;$desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;mb_substr&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;strip_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;post_content&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;),&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;100&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;c1&#34;&gt;//如果有自定义字段“key”则输出，否则输出文章的tag，作为keywords
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_post_meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_post_meta&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;true&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;nv&#34;&gt;$tags&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;wp_get_post_tags&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$post&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;ID&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;k&#34;&gt;foreach&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tags&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;as&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$tag&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;			&lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;$tag&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&amp;gt;&lt;/span&gt;&lt;span class=&#34;na&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;		&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_category&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;())&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;category_description&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;else&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$key&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;WangYan,Blog,博客,日志,网页,设计,web,design,网络,web2.0,资源,下载&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$desc&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;get_bloginfo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;description&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// 自定义搜索引擎索引方法
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;is_home&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is_single&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;||&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;is_page&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$robots&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;index,follow,noodp,noydir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;else&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	&lt;span class=&#34;nv&#34;&gt;$robots&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;noindex,nofollow,noodp,noydir&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cp&#34;&gt;?&amp;gt;&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;	&amp;lt;meta name=&amp;#34;keywords&amp;#34; content=&amp;#34;&amp;lt;?php echo $key ?&amp;gt;&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;	&amp;lt;meta name=&amp;#34;description&amp;#34; content=&amp;#34;&amp;lt;?php echo $desc ?&amp;gt;&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;err&#34;&gt;	&amp;lt;meta name=&amp;#34;robots&amp;#34; content=&amp;#34;&amp;lt;?php echo $robots ?&amp;gt;&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;h3&gt;备注：&lt;/h3&gt;这是一篇旧文章归档，实际发布日期为：2009/11/23
</description>
        </item>
        <item>
        <title>常用Wordpress模板标签</title>
        <link>https://www.bg7pbp.com/p/wordpress-template-tags/</link>
        <pubDate>Fri, 10 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/wordpress-template-tags/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#1bloginfo-%E4%B8%AD%E6%96%87&#34;&gt;1、bloginfo (中文)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#2wp_title-%E4%B8%AD%E6%96%87&#34;&gt;2、wp_title (中文)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#3wp_get_archives-%E4%B8%AD%E6%96%87&#34;&gt;3、wp_get_archives (中文)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#4wp_list_categories-%E4%B8%AD%E6%96%87&#34;&gt;4、wp_list_categories (中文)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;用wordpress也有一段时间了，总结一下经常碰到的一些模板标签Template Tags，嗯，没错！学习这东西的最好地方是 &lt;a href=&#34;http://codex.wordpress.org/Template_Tags/&#34;&gt;http://codex.wordpress.org/Template_Tags/&lt;/a&gt; 。&lt;/p&gt;
&lt;h3 id=&#34;1bloginfo-中文&#34;&gt;1、&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/bloginfo&#34;&gt;bloginfo&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/bloginfo&#34;&gt;中文&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;主要用来显示博客信息，根据参数的不同，可以用来显示博客信息中的不同部分。需要注意的是，它和 &lt;a href=&#34;http://codex.wordpress.org/Function_Reference/get_bloginfo&#34;&gt;get_bloginfo&lt;/a&gt; 有点类似，但所用之处却不一样。 &lt;a href=&#34;http://codex.wordpress.org/Template_Tags/bloginfo&#34;&gt;bloginfo&lt;/a&gt; 是直接将内容输出到页面，相反 &lt;a href=&#34;http://codex.wordpress.org/Function_Reference/get_bloginfo&#34;&gt;get_bloginfo&lt;/a&gt; 一般存到变量之中。例如：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;$name= get_bloginfo(&#39;name&#39;);&lt;/code&gt; 显示博客题；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;description&#39;)&lt;/code&gt; 显示博客描述部分&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;url&#39;)&lt;/code&gt; 显示博客首页URL地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;rss2_url&#39;)&lt;/code&gt; 显示博客的RSS2.0 feed地址&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;template_url&#39;)&lt;/code&gt; 显示正在使用的模板地址；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;charset&#39;)&lt;/code&gt; 显示博客的编码方式，如“UTF-8”；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bloginfo(&#39;admin_email&#39;)&lt;/code&gt; 显示博主的eMail地址&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相关的标签：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/bloginfo_rss&#34;&gt;bloginfo_rss&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/bloginfo_rss&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Function_Reference/get_bloginfo&#34;&gt;get_bloginfo&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/get_bloginfo&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Function_Reference/get_bloginfo_rss&#34;&gt;get_bloginfo_rss&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/get_bloginfo_rss&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2wp_-中文&#34;&gt;2、&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_title&#34;&gt;wp_title&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_title&#34;&gt;中文&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;显示网页的标题，可以定义一个分隔符，并且可以指定这个分隔符在网页标签之前或者之后显示。 用法：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp_title(’separator’,echo,seplocation)  
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;separator 是分割符号，默认是&amp;raquo;;&lt;br&gt;
echo是个bool变量，取true显示标题，取false则将标题作为一个PHP参量返回&lt;br&gt;
seplocation 定义分隔符的位置，取right定义分隔符在标题后面，取其他任何值，都表示将分隔符放在标题前面。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;例子：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;title&amp;gt;&amp;lt;?php wp_title(&#39;|&#39;,true,&#39;right&#39;); ?&amp;gt;&amp;lt;?php bloginfo(&#39;name&#39;); ?&amp;gt; - &amp;lt;?php bloginfo(&#39;description&#39;); ?&amp;gt;&amp;lt;/title&amp;gt;  
&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote&gt;
&lt;p&gt;博客首页效果：博客名称 - 博客描述&lt;br&gt;
文章页效果：文章名称 | 博客名称 - 博客描述&lt;br&gt;
分类页面效果：分类名称 | 博客名称 - 博客描述&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;相关的标签：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/single_post_title&#34;&gt;single_post_title&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/single_post_title&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/single_cat_title&#34;&gt;single_cat_title&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/single_cat_title&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/single_tag_title&#34;&gt;single_tag_title&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/single_tag_title&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/single_month_title&#34;&gt;single_month_title&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/single_month_title&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/the_search_query&#34;&gt;the_search_query&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/the_search_query&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3wp_-中文&#34;&gt;3、&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_get_archives&#34;&gt;wp_get_archives&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_get_archives&#34;&gt;中文&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;该函数用来获取博客的文章存档，通过设置函数的参数，可以按各种方式获取，如按月，按年等等。它与 &lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/get_archives&#34;&gt;get_archives&lt;/a&gt; 类似，不过它的参数自变量是以查询字符串的形式提交给函数的。 &lt;code&gt;wp_get_archives()&lt;/code&gt; 函数后面同样可以跟多种参数，所有参数都需要使用&amp;amp;连接，并放在单引号(’)中以字符串方式传递给函数&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp_get_archives(&#39;type=monthly&amp;amp;format=html&amp;amp;show_post_count=1&amp;amp;limit=10&#39;)  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数意义：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;type=monthly&lt;/code&gt; 表示按月显示文章存档，可以使用yearly、daily、weekly等代替monthly表示按年、日、以及周显示文章存档；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;format=html&lt;/code&gt; 表示使用通常的HTML中li格式化文章列表；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show_post_count=1&lt;/code&gt; 表示在文章存档后面显示属于该类别（年、月等）的文章数量，该参量是个bool值；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;limit=10&lt;/code&gt; 表示显示的文章存档的最大数量为10，超过次数，则超出部分不显示；&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相关标签：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_list_authors&#34;&gt;wp_list_authors&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_list_author&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_list_pages&#34;&gt;wp_list_pages&lt;/a&gt; &lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_list_pages&#34;&gt;(中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_list_bookmarks&#34;&gt;wp_list_bookmarks&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_list_bookmarks&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_list_comments&#34;&gt;wp_list_comments&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_list_comments&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_page_menu&#34;&gt;wp_page_menu&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_page_menu&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_dropdown_pages&#34;&gt;wp_dropdown_pages&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_dropdown_pages&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_dropdown_categories&#34;&gt;wp_dropdown_categories&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_dropdown_categories&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_dropdown_users&#34;&gt;wp_dropdown_users&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_dropdown_users&#34;&gt;中文&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;4wp_-中文&#34;&gt;4、&lt;a href=&#34;http://codex.wordpress.org/Template_Tags/wp_list_categories&#34;&gt;wp_list_categories&lt;/a&gt; (&lt;a href=&#34;http://www.zzbaike.com/wiki/WordPress:Template_Tags/wp_list_categories&#34;&gt;中文&lt;/a&gt;)&lt;/h3&gt;
&lt;p&gt;该函数用来获取博客文章的分类信息，一般用于sidebar中。该函数的参数和 &lt;code&gt;wp_get_archives()&lt;/code&gt; 函数类似，都需要使用&amp;amp;连接，放在单引号(’)中以字符串方式传递。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wp_get_archives(’orderby=name&amp;amp;order=ASC&amp;amp;show_count=1&amp;amp;use_desc_for_title=1&amp;amp;feed=订阅&amp;amp;exclude=2,5&amp;amp;number=10′)  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;参数的意义如下：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;orderby=name&lt;/code&gt; 表示按照分类名称的字母先后顺序显示分类信息，可以将name换为ID等；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;order=ASC&lt;/code&gt; 表示按照分类名称的字母的升序显示分类信息，将ASC改为DESC表示按降序；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;show_count=1&lt;/code&gt; 在每个分类名称后面显示属于该分类的文章数；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;use_desc_for_title=1&lt;/code&gt; 使用该分类的描述信息为每个分类名称超链接添加一个title属性；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;feed=订阅&lt;/code&gt; 在每个分类信息旁边添加一个名为“订阅”的超链接，提供该分类的RSS订阅；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;exlude=2,5&lt;/code&gt; 在显示的分类中去除ID为2和5的分类；也可以用include=2,5表示只显示ID为2和5的分类；&lt;/li&gt;
&lt;li&gt;&lt;code&gt;number=10&lt;/code&gt; 表示只显示最先的10个分类。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;相关标签：同上&lt;/p&gt;
&lt;p&gt;**备注：**这是一篇旧文章归档，实际发布日期为：2009/11/22&lt;/p&gt;
</description>
        </item>
        <item>
        <title>FCK编辑器中插入FLV</title>
        <link>https://www.bg7pbp.com/p/fckeditor-insert-flv/</link>
        <pubDate>Thu, 09 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/fckeditor-insert-flv/</guid>
        <description>&lt;p&gt;下面将介绍如何在Sablog的Fck编辑器中插入FLV、MP4等格式，并在FCK编辑器上添加&amp;quot;插入按钮&amp;quot;。完成后你就能在前台播放FLV等视频格式了，并且可以设置视频封面。方法也非常简单，下载-解压-上传-OK&lt;/p&gt;
&lt;h2 id=&#34;安装方法&#34;&gt;安装方法：&lt;/h2&gt;
&lt;p&gt;下载本文附件，解压到SAX2.0的include/editor/editor/plugins/目录。&lt;/p&gt;
&lt;p&gt;编辑include\editor\fckconfig.js查找&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;FCKConfig.PluginsPath = FCKConfig.BasePath + &#39;plugins/&#39; ;  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在后面加上&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;FCKConfig.Plugins.Add( &#39;Insertplayer&#39; ) ;  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;查找下面语句，在它后面适当位置加上&amp;rsquo;Insertplayer&#39;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;FCKConfig.ToolbarSets[&amp;amp;amp;quot;Default&amp;amp;amp;quot;;]  
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更多使用技巧，点击 &lt;a href=&#34;http://www.jeroenwijering.com/?item=JW_FLV_Player&#34;&gt;进入播放器官网&lt;/a&gt; 了解，该播放器比你想象中要强大。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/10/20&lt;/p&gt;
</description>
        </item>
        <item>
        <title>FCK编辑器中插入MP3</title>
        <link>https://www.bg7pbp.com/p/fckeditor-insert-mp3/</link>
        <pubDate>Wed, 08 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/fckeditor-insert-mp3/</guid>
        <description>&lt;h2 id=&#34;目录&#34;&gt;目录  &lt;!-- omit from toc --&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%B8%80%E4%BD%BF%E7%94%A8ubb%E6%A0%87%E7%AD%BE&#34;&gt;方法一：使用UBB标签&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;#%E6%96%B9%E6%B3%95%E4%BA%8C%E4%BD%BF%E7%94%A8js%E5%AE%9E%E7%8E%B0&#34;&gt;方法二：使用JS实现&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;插入MP3对很多Blogger来说都是挺有用的。下面将介绍如何在Fck编辑器中插入MP3（在FCK工具栏上增加MP3插入按钮）。有两种方法，一种是UBB方式（适用sablog2.0），另一种是通过JS来实现。&lt;/p&gt;
&lt;p&gt;特别说明：下文仅针对未去除插件功能的FCK编辑器，而sablog2.0默认编辑器已去掉了插件目录，所以你可以使用小A的 &lt;a href=&#34;http://www.sablog.net/blog/fckeditor-26-lite-one/&#34;&gt;FCK2.6精简版&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;方法一使用ubb标签&#34;&gt;方法一：使用UBB标签&lt;/h2&gt;
&lt;p&gt;下面介绍参考了Sablogplus论坛T的方法，仅适用于SAX2.0。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;下载本文附件，解压到SAX2.0的根目录。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;打开include/func目录中的front.func.php文件，在259行附近查找“页面调试信息”在上面加上下面代码&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;javascript&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;// MP3播放器
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;kd&#34;&gt;function&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;makemp3&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;global&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;$options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;$code&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;lt;object type=&amp;#34;application/x-shockwave-flash&amp;#34; data=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tools/mp3player/dewplayer.swf?mp3=&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;amp;amp;autostart=0&amp;amp;amp;autoreplay=0&amp;amp;amp;showtime=1&amp;#34; width=&amp;#34;200&amp;#34; height=&amp;#34;20&amp;#34;&amp;gt;&amp;lt;param name=&amp;#34;movie&amp;#34; value=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$options&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;url&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;].&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;tools/mp3player/dewplayer.swf?mp3=&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;$id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;&amp;amp;amp;autostart=0&amp;amp;amp;autoreplay=0&amp;amp;amp;showtime=1&amp;#34; /&amp;gt;&amp;lt;/object&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;return&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;$code&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;分别打开modules/article.php和modules/show.php查找&amp;quot;//TAGS&amp;quot;并在其上面加上&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;javascript&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;//处理MP3播放
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;$article&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;content\&amp;#39;] = preg_replace(&amp;#34;/\\s*\\[mp3\\](.+?)\\[\\/mp3\\]\\s*/ies&amp;#34;, &amp;#34;makemp3(\&amp;#39;\\\\1\&amp;#39;)&amp;#34;, $article[\&amp;#39;content\&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;ol start=&#34;4&#34;&gt;
&lt;li&gt;
&lt;p&gt;将附件里的播放器，放在tools文件夹中。（有2个播放器可用，代码不变）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;编辑include\editor\fckconfig.js 查找&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;javascript&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nx&#34;&gt;FCKConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;PluginsPath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;FCKConfig&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;BasePath&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;+&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;\&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;plugins/\&amp;#39;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;在后面加上FCKConfig.Plugins.Add( &#39;Insertmp3&#39; ) ;&lt;/p&gt;
&lt;ol start=&#34;6&#34;&gt;
&lt;li&gt;查找FCKConfig.ToolbarSets[&amp;ldquo;Default&amp;rdquo;]在它后面适当位置加上&#39;Insertmp3&#39;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;想了解 &lt;a href=&#34;http://www.alsacreations.fr/dewplayer&#34;&gt;dewplayer&lt;/a&gt; 播放器更多，请访问 &lt;a href=&#34;http://www.alsacreations.fr/dewplayer&#34;&gt;官方主页&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;方法二使用js实现&#34;&gt;方法二：使用JS实现&lt;/h2&gt;
&lt;p&gt;未完待续&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/10/15&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Sablog模板Illacrimo</title>
        <link>https://www.bg7pbp.com/p/sablog-theme-illacrimo/</link>
        <pubDate>Tue, 07 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/sablog-theme-illacrimo/</guid>
        <description>&lt;p&gt;Illacrimo-基于Wordpress主题Illacrimoplus而制作的模板。原主题出自 &lt;a href=&#34;http://designdisease.com/portfolio/illacrimo/&#34;&gt;Design Disease&lt;/a&gt;。该模板仅适用于sablog2.0 plus插件版，且需配合压缩包内所提供的插件一起使用。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;适用版本：Sablog-X Plus 2.0 20080825+（插件版）&lt;br&gt;
浏览兼容：IE 6.0+、Safari 3.0+、FireFox 2.0+、Chrome 1.0+、Opera 8.0+&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一使用方法&#34;&gt;一、使用方法&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;上传文件，包括&amp;quot;templates&amp;quot;和&amp;quot;plugins&amp;quot;目录&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;激活插件，到后台&amp;quot;重载插件列表“，载入包括&amp;quot;活跃会员“、&amp;ldquo;评论最多的文章“、&amp;ldquo;阅读最多的文章“、&amp;ldquo;随机文章“等小插件。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;a  href=https://img.cdn.wangyan.cloud/i/illacrimo-big.png&amp;rdquo;&amp;gt;&amp;lt;img width=&amp;ldquo;300&amp;rdquo; src=https://img.cdn.wangyan.cloud/i/illacrimo-big.png&amp;rdquo; /&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注：下面是一些小功能，可要也可不要，没有任何影响。&lt;/p&gt;
&lt;h2 id=&#34;二简单留言本&#34;&gt;二、简单留言本&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;添加一篇日志，专门用于接收留言，自定义URL是&amp;quot;guestbook&amp;rdquo;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;记住刚才添加的日志ID，具体是&amp;quot;后台“&amp;ndash;&amp;ldquo;文章“&amp;ndash;&amp;ldquo;管理日志“，找到你刚才添加的文章，并将鼠标移到其上面，在浏览器状态栏会有下面地址提示，其中19就是我的ID，如图：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;a  href=https://img.cdn.wangyan.cloud/g/gbook_link.png&amp;rdquo;&amp;gt;&amp;lt;img width=&amp;ldquo;300&amp;rdquo; src=https://img.cdn.wangyan.cloud/g/gbook_link.png&amp;rdquo; /&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;新建模板变量&amp;quot;gbook&amp;quot;，变量内容&amp;quot;文章ID&amp;quot;即19。具体是&amp;quot;模板“&amp;ndash;&amp;ldquo;模板变量“&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;三维度统计&#34;&gt;三、维度统计&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;寻找维度ID，具体维度客户端&amp;quot;账户“&amp;ndash;&amp;ldquo;代码“，如图：我的ID是9893&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;lt;a href=https://img.cdn.wangyan.cloud/v/vdoing_code.png&amp;rdquo;&amp;gt;&amp;lt;img width=&amp;ldquo;300&amp;rdquo; src=https://img.cdn.wangyan.cloud/v/vdoing_code.png&amp;rdquo; /&amp;gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;新建模板变量&amp;quot;vdoing&amp;quot;，变量内容&amp;quot;维度ID&amp;quot;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;四谷歌统计&#34;&gt;四、谷歌统计&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;寻找Google Analytics的ID，比如我的ID是：&amp;ldquo;UA-5259980-1&amp;rdquo;&lt;/li&gt;
&lt;li&gt;新建模板变量&amp;quot;analytics&amp;quot;，变量内容：&amp;ldquo;你的Analytics ID&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;五下载地址&#34;&gt;五、下载地址&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c02p6p57rj&#34;&gt;http://dl.dbank.com/c02p6p57rj&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/11/25&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Sablog模板Devart</title>
        <link>https://www.bg7pbp.com/p/sablog-theme-devart/</link>
        <pubDate>Mon, 06 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/sablog-theme-devart/</guid>
        <description>&lt;p&gt;Devart Plus Template - 基于Wordpress主题 &lt;a href=&#34;http://wordpress.org/extend/themes/devart&#34;&gt;Devart&lt;/a&gt; 而制作的模板。原主题出自设计师 &lt;a href=&#34;http://deniart.ru&#34;&gt;Deniartru&lt;/a&gt; 之手，页面风格和 &lt;a href=&#34;http://www.deviantart.com&#34;&gt;deviantart&lt;/a&gt; 非常相似。Devart Plus 延续原始风格不变，对需要的地方进行了些修改或增减，以适应Sablog-X2.0。总之这款主题的色调很柔和给人感觉是很舒适的。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;适用版本：Sablog-X Plus 2.0 20080825+&lt;br&gt;
浏览器兼容：IE 6.0+、Safari 3.0+、FireFox 2.0+、Chrome 1.0+、Opera 8.0+&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a  href=&#34;https://img.cdn.wangyan.cloud/d/devart.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/d/devart.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注：下面是一些小功能，可要也可不要，没有任何影响。&lt;/p&gt;
&lt;h2 id=&#34;一简单留言本&#34;&gt;一、简单留言本&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;添加一篇日志，专门用于接收留言，自定义URL是&amp;quot;guestbook&amp;quot;。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;记住刚才添加的日志ID，具体是&amp;quot;后台“&amp;ndash;&amp;ldquo;文章“&amp;ndash;&amp;ldquo;管理日志“，找到你刚才添加的文章，并将鼠标移到其上面，在浏览器状态栏会有下面地址提示，其中19就是我的ID，如图：&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a  href=&#34;https://img.cdn.wangyan.cloud/g/gbook_link.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/g/gbook_link.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;3&#34;&gt;
&lt;li&gt;新建模板变量&amp;quot;gbook&amp;rdquo;，变量内容&amp;quot;文章ID&amp;quot;即19。具体是&amp;quot;模板“&amp;ndash;&amp;ldquo;模板变量“&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二维度统计&#34;&gt;二.维度统计&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;寻找维度ID，具体维度客户端&amp;quot;账户“&amp;ndash;&amp;ldquo;代码“，如图：我的ID是9893&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a  href=&#34;https://img.cdn.wangyan.cloud/v/vdoing_code.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/v/vdoing_code.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;新建模板变量&amp;quot;vdoing&amp;rdquo;，变量内容&amp;quot;维度ID&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;三谷歌统计&#34;&gt;三、谷歌统计&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;寻找Google Analytics的ID，比如我的ID是：&amp;ldquo;UA-5259980-1&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新建模板变量&amp;quot;analytics&amp;rdquo;，变量内容：&amp;ldquo;你的Analytics ID&amp;rdquo;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;四首页最新评论&#34;&gt;四、首页最新评论&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;后台“&amp;ndash;&amp;ldquo;设置“&amp;ndash;&amp;ldquo;侧栏“将&amp;quot;最新评论数量“改成非的数值&lt;/p&gt;
&lt;h2 id=&#34;五下载地址&#34;&gt;五、下载地址&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c02p6p57rj&#34;&gt;http://dl.dbank.com/c02p6p57rj&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/11/10&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Sablog模板G7v5</title>
        <link>https://www.bg7pbp.com/p/sablog-theme-g7v5/</link>
        <pubDate>Sun, 05 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/sablog-theme-g7v5/</guid>
        <description>&lt;p&gt;这&amp;hellip;大名鼎鼎的G7v5风格，不用介绍了吧！现我将它移植到了SAX上。嘿嘿！sablog 的朋友现在也能用这款经典之作咯!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;主题名称：G7v5 1.0&lt;br&gt;
适用版本：SablogPlus 2.0 20080825+&lt;br&gt;
兼容说明：IE7+ 、FF、Chrome&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a target=&#34;_blank&#34; href=&#34;https://img.cdn.wangyan.cloud/g/g7v5.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/g/g7v5.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;下载地址&#34;&gt;下载地址：&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c02p6p57rj&#34;&gt;http://dl.dbank.com/c02p6p57rj&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>Sablog模板sTaste</title>
        <link>https://www.bg7pbp.com/p/sablog-theme-staste/</link>
        <pubDate>Sat, 04 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/sablog-theme-staste/</guid>
        <description>&lt;p&gt;这个是继“Mistylook“后，我的第二个 Sablog-X 2.0 模板。因为主要是仿自 &lt;a href=&#34;http://www.songtaste.com&#34;&gt;Songtaste.com&lt;/a&gt; 和 Wordpress 主题，所以就直接取名 sTaste&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;主题名称：sTaste 1.0&lt;br&gt;
适用版本：SablogPlus 2.0 20080825+&lt;br&gt;
发布日期：2008/09/25&lt;br&gt;
兼容说明：IE7+ 、FF、Chrome&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&#34;一使用说明&#34;&gt;一、使用说明：&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;解压后将sTaste文件夹上传到你的Sablog-X 2.0 所在的/templates/目录下&lt;/li&gt;
&lt;li&gt;进入你的Sablog-X 2.0 后台，点击“模板“菜单，点击STheme激活该模板。&lt;/li&gt;
&lt;li&gt;没了&amp;hellip;&amp;hellip;就是这么简单！&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;二自定义twitter区域&#34;&gt;二、自定义twitter区域：&lt;/h2&gt;
&lt;p&gt;腾讯的 &lt;a href=&#34;http://www.taotao.com/&#34;&gt;滔滔&lt;/a&gt;、&lt;a href=&#34;http://www.twitter.com&#34;&gt;twitter&lt;/a&gt;、&lt;a href=&#34;http://fanfou.com/&#34;&gt;饭否&lt;/a&gt;，你总有一个吧？有，那就按下面方法修改。&lt;/p&gt;
&lt;p&gt;编辑sTaste文件夹下的 normal.php文件，修改第16行。&lt;/p&gt;
&lt;p&gt;1、如果你用的是腾讯的 &lt;a href=&#34;http://www.taotao.com/&#34;&gt;滔滔&lt;/a&gt;，你只需把我的QQ号改为你QQ号。&lt;/p&gt;
&lt;p&gt;2、如果你用的是 &lt;a href=&#34;http://www.twitter.com&#34;&gt;twitter&lt;/a&gt;，请替换成下面代码并将&amp;quot;wyblog&amp;quot; 改成你的 twitter 帐号。&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;twitter_update_list&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;ul&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://twitter.com/javascripts/blogger.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://twitter.com/statuses/user_timeline/wyblog.json?callback=twitterCallback2&amp;amp;count=3&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;3、如果你用的是饭否，请替换成下面代码，并将&amp;quot;wang.yan&amp;quot;改成你的 &lt;a href=&#34;http://fanfou.com/&#34;&gt;饭否&lt;/a&gt; 帐号&lt;/p&gt;
&lt;div class=&#34;code-block&#34;&gt;
    &lt;div class=&#34;code-block__header&#34;&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--red&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--yellow&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__dot code-block__dot--green&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__spacer&#34;&gt;&lt;/span&gt;
        &lt;span class=&#34;code-block__title&#34;&gt;html&lt;/span&gt;
    &lt;/div&gt;
    &lt;div class=&#34;code-block__body&#34;&gt;&lt;pre class=&#34;chroma&#34; tabindex=&#34;0&#34;&gt;&lt;code&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&#34;nx&#34;&gt;fanfou_name&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;wang.yan&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fanfou_count&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;2&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;&lt;span class=&#34;nx&#34;&gt;fanfou_timeline&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;#34;user&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;type&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;text/javascript&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;charset&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt; &lt;span class=&#34;na&#34;&gt;src&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#34;http://static.fanfou.com/badge/timeline.js&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class=&#34;nt&#34;&gt;script&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;a target=&#34;_blank&#34; href=&#34;https://img.cdn.wangyan.cloud/s/staste.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/s/staste.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;三下载地址&#34;&gt;三、下载地址&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c02p6p57rj&#34;&gt;http://dl.dbank.com/c02p6p57rj&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/09/30&lt;/p&gt;
</description>
        </item>
        <item>
        <title>Sablog模板MistyLook</title>
        <link>https://www.bg7pbp.com/p/sablog-theme-mistylook/</link>
        <pubDate>Fri, 03 Dec 2010 00:00:00 +0800</pubDate>
        
        <guid>https://www.bg7pbp.com/p/sablog-theme-mistylook/</guid>
        <description>&lt;p&gt;Mistylook这是一款来自WP的模板，简洁、高效是它最大特点！也是我非常喜欢的WP主题之一。这款模板在细节上，我花了不少时间，不过，为方便大家使用，现在发布出的这个版本是干净的版本，去掉了插件、广告、统计、链接等等“垃圾”东西，解压后就可直接用在2.0上面，不需任何修改了。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;适用：SablogPlus 20080825 以上版本&lt;br&gt;
兼容：IE6+ 、FF、Chrome&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a target=&#34;_blank&#34; href=&#34;https://img.cdn.wangyan.cloud/m/mistylook.png&#34;&gt;&lt;img width=&#34;300&#34; src=&#34;https://img.cdn.wangyan.cloud/m/mistylook.png&#34; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;下载地址&#34;&gt;下载地址&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&#34;http://dl.dbank.com/c02p6p57rj&#34;&gt;http://dl.dbank.com/c02p6p57rj&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;备注：&lt;/strong&gt;这是一篇旧文章归档，实际发布日期为：2008/09/25&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
