<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>靓声靓影商行</title><link>https://www.ganda.run/</link><description>Good Luck To You!</description><item><title>alist反向代理</title><link>https://www.ganda.run/post/24.html</link><description>&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;程序默认监听 5244 端口。如有修改，请一并修改下列配置中的端口号。如果你使用反向代理，建议你设置&lt;/span&gt;&lt;a class=&quot;route-link&quot; href=&quot;https://alistgo.com/zh/config/configuration.html#site_url&quot; style=&quot;color: rgb(47, 132, 93); text-decoration-line: none; overflow-wrap: break-word; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: rgb(255, 255, 255); background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;site_url&lt;/a&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;，以帮助alist更好的工作。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 id=&quot;nginx&quot; tabindex=&quot;-1&quot; style=&quot;transition: border-color 0.3s; line-height: 1.25; overflow-wrap: break-word; padding-bottom: 0.3rem; border-bottom: 1px solid rgb(226, 226, 227); font-size: 1.65rem; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; margin-top: -52px; margin-bottom: 0.5rem; padding-top: 76px; outline: none; color: rgb(60, 60, 67); text-wrap-mode: wrap; background-color: rgb(255, 255, 255); background-attachment: initial !important; scroll-behavior: auto !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;&lt;a class=&quot;header-anchor&quot; href=&quot;https://alistgo.com/zh/guide/install/reverse-proxy.html#nginx&quot; style=&quot;font-weight: 500; text-decoration-line: none; overflow-wrap: break-word; position: relative; background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;&lt;span style=&quot;background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;&lt;span style=&quot;background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important; font-weight: 600;&quot;&gt;nginx&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;在网站配置文件的 server 字段中添加&lt;/span&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;location&amp;nbsp;/&amp;nbsp;{
&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Forwarded-For&amp;nbsp;$proxy_add_x_forwarded_for;
&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Forwarded-Proto&amp;nbsp;$scheme;
&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Host&amp;nbsp;$http_host;
&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;X-Real-IP&amp;nbsp;$remote_addr;
&amp;nbsp;&amp;nbsp;proxy_set_header&amp;nbsp;Range&amp;nbsp;$http_range;
	proxy_set_header&amp;nbsp;If-Range&amp;nbsp;$http_if_range;
&amp;nbsp;&amp;nbsp;proxy_redirect&amp;nbsp;off;
&amp;nbsp;&amp;nbsp;proxy_pass&amp;nbsp;http://127.0.0.1:5244;
&amp;nbsp;&amp;nbsp;#&amp;nbsp;the&amp;nbsp;max&amp;nbsp;size&amp;nbsp;of&amp;nbsp;file&amp;nbsp;to&amp;nbsp;upload
&amp;nbsp;&amp;nbsp;client_max_body_size&amp;nbsp;20000m;
}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;如果需要使用HTTP/3，需要将对应&lt;/span&gt;&lt;code style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgba(142, 150, 170, 0.14); transition: background-color 0.3s, color 0.3s; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; margin: 0px; padding: 3px 6px; border-radius: 4px; font-size: 0.875em; overflow-wrap: break-word; color: rgb(60, 60, 67); text-align: justify; text-wrap-mode: wrap; scroll-behavior: auto !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;HOST&lt;/code&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;行修改为：&lt;/span&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;proxy_set_header&amp;nbsp;Host&amp;nbsp;$host:$server_port;&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;这样修改后的配置同时也可以兼容HTTP/2及更低版本的请求。&lt;/span&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p class=&quot;hint-container-title&quot; style=&quot;line-height: 1.5; overflow-wrap: break-word; color: rgb(145, 89, 48); position: relative; margin-block: 0.75em; font-weight: 600; padding-inline-start: 1.75em; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 14.72px; text-wrap-mode: wrap; background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;注意&lt;/p&gt;&lt;p style=&quot;line-height: 1.5; overflow-wrap: break-word; color: rgb(60, 60, 67); font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 14.72px; text-wrap-mode: wrap; background-attachment: initial !important; scroll-behavior: auto !important; transition-delay: 0s !important; transition-duration: 0s !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;如果使用宝塔面板，请务必删除以下默认配置&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;-&amp;nbsp;location&amp;nbsp;~&amp;nbsp;^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md
-&amp;nbsp;location&amp;nbsp;~&amp;nbsp;.\*\.(gif|jpg|jpeg|png|bmp|swf)$
-&amp;nbsp;location&amp;nbsp;~&amp;nbsp;.\*\.(js|css)?$&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 17px; text-align: justify; text-wrap-mode: wrap; background-color: #FFFFFF;&quot;&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 14.72px; text-wrap-mode: wrap; background-color: rgba(234, 179, 8, 0.14);&quot;&gt;并在&lt;/span&gt;&lt;code style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgba(234, 179, 8, 0.14); transition: background-color 0.3s, color 0.3s; font-family: Consolas, Monaco, &amp;quot;Andale Mono&amp;quot;, &amp;quot;Ubuntu Mono&amp;quot;, monospace; margin: 0px; padding: 3px 6px; border-radius: 4px; font-size: 0.875em; overflow-wrap: break-word; color: rgb(60, 60, 67); text-wrap-mode: wrap; scroll-behavior: auto !important; animation-duration: 1ms !important; animation-delay: -1ms !important; animation-iteration-count: 1 !important;&quot;&gt;/www/server/nginx/conf/proxy.conf&lt;/code&gt;&lt;span style=&quot;color: #3C3C43; font-family: -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Helvetica Neue&amp;quot;, Arial, &amp;quot;Noto Sans&amp;quot;, STHeiti, &amp;quot;Microsoft YaHei&amp;quot;, SimSun, sans-serif, &amp;quot;Apple Color Emoji&amp;quot;, &amp;quot;Segoe UI Emoji&amp;quot;, &amp;quot;Segoe UI Symbol&amp;quot;, &amp;quot;Noto Color Emoji&amp;quot;; font-size: 14.72px; text-wrap-mode: wrap; background-color: rgba(234, 179, 8, 0.14);&quot;&gt;中或对应网站配置文件中设置禁用Nginx缓存，否则默认配置下访问较大文件时Nginx会先尝试将远程文件缓存至本机，导致播放失败&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;proxy_cache&amp;nbsp;cache_one;&amp;nbsp;#&amp;nbsp;删除这一行
proxy_max_temp_file_size&amp;nbsp;0;&amp;nbsp;#加上这一行&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 29 Oct 2025 14:32:42 +0800</pubDate></item><item><title>Python脚本转换为EXE</title><link>https://www.ganda.run/post/23.html</link><description>&lt;h3 style=&quot;font-size: 18.288px; line-height: 1.5; margin: 18.288px 0px 13.716px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;方法1：使用 PyInstaller（推荐）&lt;/h3&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 13.716px; margin-bottom: 13.716px; font-size: 16.002px; line-height: 28.575px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;步骤：&lt;/span&gt;&lt;/p&gt;&lt;ol start=&quot;1&quot; style=&quot;margin-top: 13.716px; margin-bottom: 13.716px; padding-left: 27.432px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;安装 PyInstaller：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;div class=&quot;efa13877&quot; style=&quot;height: 28px; align-items: center; display: flex;&quot;&gt;&lt;div role=&quot;button&quot; class=&quot;ds-button ds-button--secondary ds-button--borderless ds-button--rect ds-button--m _7db3914&quot; tabindex=&quot;0&quot; style=&quot;--ds-rgb-error-hover: 218 54 54; --ds-button-color: transparent; --button-ring-color: rgb(59 130 246); height: 28px; line-height: 25px; font-size: 13px; border-radius: 10px; padding: 0px 4px; user-select: none; cursor: pointer; text-wrap-mode: nowrap; box-sizing: border-box; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1); font-variant-numeric: tabular-nums; outline: none; align-items: center; display: inline-flex; position: relative; background-color: rgba(0, 0, 0, 0); color: rgb(82, 82, 82); --button-height: 34px; --button-font-size: 14px; --button-line-height: 25px; --button-border-radius: 10px; --button-padding: 0 14px; --button-icon-size: 18px; --button-icon-margin: 0 8px 0 0; margin-right: 8px; --button-text-color: rgb(82 82 82);&quot;&gt;&lt;div class=&quot;ds-button__icon&quot; style=&quot;line-height: 0; font-size: 18px; width: 18px; height: 18px; margin: 0px 4px 0px 0px; flex-grow: 0; flex-shrink: 0; justify-content: center; align-items: center; display: flex;&quot;&gt;&lt;div class=&quot;ds-icon&quot; style=&quot;line-height: 0; display: inline-flex; font-size: 16px; width: 16px; height: 16px;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewbox=&quot;0 0 24 24&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path d=&quot;M3.65169 12.9243C3.68173 13.1045 3.74181 13.2748 3.80189 13.445C3.87198 13.6052 3.96211 13.7654 4.06225 13.9156C4.16238 14.0658 4.27253 14.206 4.4027 14.3362C4.52286 14.4663 4.66306 14.5765 4.81326 14.6766C4.96346 14.7768 5.11366 14.8569 5.28389 14.927C5.44411 14.9971 5.61434 15.0571 5.79459 15.0872C5.97483 15.1272 6.14506 15.1373 6.3253 15.1373V16.9196C6.30739 16.9196 6.28949 16.9195 6.27159 16.9193C5.9991 16.9158 5.72659 16.8859 5.4541 16.8295C5.16371 16.7694 4.88334 16.6893 4.61298 16.5692C4.3326 16.459 4.08226 16.3188 3.83193 16.1586C3.59161 15.9884 3.3613 15.7981 3.15102 15.5878C2.94074 15.3776 2.7605 15.1473 2.59027 14.9069C2.43006 14.6566 2.28986 14.3962 2.17972 14.1259C2.06957 13.8455 1.97944 13.5651 1.91936 13.2747C1.86929 12.9843 1.83926 12.684 1.83926 12.3936V6.26532C1.83926 5.96492 1.86929 5.67456 1.91936 5.38417C1.97944 5.09378 2.06957 4.80338 2.17972 4.53302C2.28986 4.26265 2.43006 4.0023 2.59027 3.75197C2.7605 3.50163 2.94074 3.27132 3.15102 3.06104C3.3613 2.85076 3.59161 2.67052 3.83193 2.50029C4.08226 2.33006 4.3326 2.19987 4.61298 2.07971C4.88334 1.96956 5.16371 1.87943 5.4541 1.81935C5.74449 1.75927 6.03491 1.73926 6.3253 1.73926H12.3934C12.6838 1.73926 12.9842 1.75927 13.2746 1.81935C13.555 1.87943 13.8354 1.96956 14.1158 2.07971C14.3861 2.19987 14.6465 2.33006 14.8868 2.50029C15.1371 2.67052 15.3574 2.85076 15.5677 3.06104C15.778 3.27132 15.9582 3.50163 16.1284 3.75197C16.2887 4.0023 16.4288 4.26265 16.539 4.53302C16.6592 4.80338 16.7393 5.09378 16.7994 5.38417C16.8558 5.65722 16.8858 5.93024 16.8892 6.21161C16.8894 6.22948 16.8895 6.24739 16.8895 6.26532H15.1271C15.1271 6.08508 15.1071 5.90486 15.067 5.72462C15.037 5.55439 14.9869 5.38415 14.9168 5.21392C14.8467 5.04369 14.7566 4.88347 14.6665 4.73327C14.5664 4.58307 14.4462 4.45289 14.326 4.32271C14.1959 4.19254 14.0557 4.08239 13.9055 3.98226C13.7553 3.88212 13.6051 3.79202 13.4348 3.72193C13.2746 3.65184 13.1044 3.60174 12.9242 3.5717C12.7539 3.53165 12.5737 3.51163 12.3934 3.51163H6.3253C6.14506 3.51163 5.97483 3.53165 5.79459 3.5717C5.61434 3.60174 5.44411 3.65184 5.28389 3.72193C5.11366 3.79202 4.96346 3.88212 4.81326 3.98226C4.66306 4.08239 4.52286 4.19254 4.4027 4.32271C4.27253 4.45289 4.16238 4.58307 4.06225 4.73327C3.96211 4.88347 3.87198 5.04369 3.80189 5.21392C3.74181 5.38415 3.68173 5.55439 3.65169 5.72462C3.61164 5.90486 3.60164 6.08508 3.60164 6.26532V12.3936C3.60164 12.5638 3.61164 12.744 3.65169 12.9243Z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M9.66972 21.6772C9.39936 21.567 9.13902 21.4268 8.8987 21.2566C8.64836 21.0964 8.42804 20.9061 8.21776 20.6959C8.00748 20.4856 7.81723 20.2553 7.65701 20.015C7.4968 19.7646 7.3566 19.5043 7.24646 19.2239C7.12629 18.9535 7.04621 18.6731 6.98613 18.3727C6.92605 18.0823 6.89601 17.792 6.89601 17.4915V11.3733C6.89601 11.0729 6.92605 10.7825 6.98613 10.4922C7.04621 10.1918 7.12629 9.91137 7.24646 9.64101C7.3566 9.36063 7.4968 9.10028 7.65701 8.85996C7.81723 8.60962 8.00748 8.37931 8.21776 8.16903C8.42804 7.95875 8.64836 7.76849 8.8987 7.60828C9.13902 7.43805 9.39936 7.29785 9.66972 7.1877C9.94009 7.07755 10.2205 6.98745 10.5108 6.92737C10.8012 6.86729 11.0916 6.83725 11.392 6.83725H17.4602C17.7506 6.83725 18.041 6.86729 18.3313 6.92737C18.6217 6.98745 18.9021 7.07755 19.1725 7.1877C19.4529 7.29785 19.7032 7.43805 19.9535 7.60828C20.1938 7.76849 20.4242 7.95875 20.6345 8.16903C20.8447 8.37931 21.025 8.60962 21.1952 8.85996C21.3554 9.10028 21.4956 9.36063 21.6058 9.64101C21.7159 9.91137 21.806 10.1918 21.8661 10.4922C21.9162 10.7825 21.9462 11.0729 21.9462 11.3733V17.4915C21.9462 17.792 21.9162 18.0823 21.8661 18.3727C21.806 18.6731 21.7159 18.9535 21.6058 19.2239C21.4956 19.5043 21.3554 19.7646 21.1952 20.015C21.025 20.2553 20.8447 20.4856 20.6345 20.6959C20.4242 20.9061 20.1938 21.0964 19.9535 21.2566C19.7032 21.4268 19.4529 21.567 19.1725 21.6772C18.9021 21.7973 18.6217 21.8774 18.3313 21.9375C18.041 21.9976 17.7506 22.0276 17.4602 22.0276H11.392C11.0916 22.0276 10.8012 21.9976 10.5108 21.9375C10.2205 21.8774 9.94009 21.7973 9.66972 21.6772ZM10.8613 8.6697C11.0316 8.63966 11.2118 8.61965 11.392 8.61965H17.4602C17.6404 8.61965 17.8107 8.63966 17.9909 8.6697C18.1611 8.70975 18.3314 8.75983 18.5016 8.82992C18.6618 8.90001 18.822 8.98012 18.9722 9.08026C19.1224 9.18039 19.2626 9.30055 19.3828 9.42071C19.513 9.55088 19.6231 9.69109 19.7232 9.84129C19.8234 9.99149 19.9035 10.1517 19.9736 10.3219C20.0437 10.4821 20.0937 10.6624 20.1338 10.8326C20.1638 11.0129 20.1838 11.1931 20.1838 11.3733V17.4915C20.1838 17.6718 20.1638 17.852 20.1338 18.0323C20.0937 18.2125 20.0437 18.3828 19.9736 18.543C19.9035 18.7132 19.8234 18.8734 19.7232 19.0236C19.6231 19.1738 19.513 19.314 19.3828 19.4342C19.2626 19.5643 19.1224 19.6845 18.9722 19.7846C18.822 19.8848 18.6618 19.9649 18.5016 20.035C18.3314 20.1051 18.1611 20.1551 17.9909 20.1952C17.8107 20.2252 17.6404 20.2452 17.4602 20.2452H11.392C11.2118 20.2452 11.0316 20.2252 10.8613 20.1952C10.6811 20.1551 10.5108 20.1051 10.3506 20.035C10.1804 19.9649 10.0202 19.8848 9.87 19.7846C9.72982 19.6845 9.58962 19.5643 9.45945 19.4342C9.33929 19.314 9.21913 19.1738 9.119 19.0236C9.01886 18.8734 8.93875 18.7132 8.86866 18.543C8.79857 18.3828 8.74847 18.2125 8.71843 18.0323C8.67838 17.852 8.65836 17.6718 8.65836 17.4915V11.3733C8.65836 11.1931 8.67838 11.0129 8.71843 10.8326C8.74847 10.6624 8.79857 10.4821 8.86866 10.3219C8.93875 10.1517 9.01886 9.99149 9.119 9.84129C9.21913 9.69109 9.33929 9.55088 9.45945 9.42071C9.58962 9.30055 9.72982 9.18039 9.87 9.08026C10.0202 8.98012 10.1804 8.90001 10.3506 8.82992C10.5108 8.75983 10.6811 8.70975 10.8613 8.6697Z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;code-info-button-text&quot;&gt;复制&lt;/span&gt;&lt;/div&gt;&lt;div role=&quot;button&quot; class=&quot;ds-button ds-button--secondary ds-button--borderless ds-button--rect ds-button--s _7db3914&quot; tabindex=&quot;0&quot; style=&quot;--ds-rgb-error-hover: 218 54 54; --ds-button-color: transparent; --button-ring-color: rgb(59 130 246); height: 28px; line-height: 21px; font-size: 13px; border-radius: 10px; padding: 0px 4px; user-select: none; cursor: pointer; text-wrap-mode: nowrap; box-sizing: border-box; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1); font-variant-numeric: tabular-nums; outline: none; align-items: center; display: inline-flex; position: relative; background-color: rgba(0, 0, 0, 0); color: rgb(82, 82, 82); --button-height: 30px; --button-font-size: 13px; --button-line-height: 21px; --button-border-radius: 10px; --button-padding: 0 14px; --button-icon-size: 18px; --button-icon-margin: 0 8px 0 0; --button-text-color: rgb(82 82 82);&quot;&gt;&lt;div class=&quot;ds-button__icon&quot; style=&quot;line-height: 0; font-size: 18px; width: 18px; height: 18px; margin: 0px 4px 0px 0px; flex-grow: 0; flex-shrink: 0; justify-content: center; align-items: center; display: flex;&quot;&gt;&lt;div class=&quot;ds-icon&quot; style=&quot;line-height: 0; display: inline-flex; font-size: 16px; width: 16px; height: 16px;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewbox=&quot;0 0 24 24&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M12 2.55a.97.97 0 0 1 .982.956v13.04a.97.97 0 0 1-.982.957.97.97 0 0 1-.982-.956V3.507A.97.97 0 0 1 12 2.55z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M19.418 9.808c.382.375.37.971-.027 1.332l-6.7 6.085a1.04 1.04 0 0 1-1.41-.025.905.905 0 0 1 .027-1.332l6.7-6.085a1.04 1.04 0 0 1 1.41.025z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M4.582 9.808a1.04 1.04 0 0 1 1.41-.025l6.7 6.085c.397.361.409.957.027 1.332a1.04 1.04 0 0 1-1.41.025l-6.7-6.085a.905.905 0 0 1-.027-1.332z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M3.068 16.46a.97.97 0 0 1 .983.956v1.739c0 .432.36.782.803.782h14.291c.445 0 .804-.35.804-.782v-1.739a.97.97 0 0 1 .983-.956.97.97 0 0 1 .982.956v1.739c0 1.488-1.24 2.695-2.769 2.695H4.855c-1.53 0-2.77-1.207-2.77-2.695v-1.739a.97.97 0 0 1 .983-.956z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;code-info-button-text&quot;&gt;下载&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;pip&amp;nbsp;install&amp;nbsp;pyinstaller&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;进入脚本所在目录，执行打包命令：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 11.43px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;div class=&quot;efa13877&quot; style=&quot;height: 28px; align-items: center; display: flex;&quot;&gt;&lt;div role=&quot;button&quot; class=&quot;ds-button ds-button--secondary ds-button--borderless ds-button--rect ds-button--m _7db3914&quot; tabindex=&quot;0&quot; style=&quot;--ds-rgb-error-hover: 218 54 54; --ds-button-color: transparent; --button-ring-color: rgb(59 130 246); height: 28px; line-height: 25px; font-size: 13px; border-radius: 10px; padding: 0px 4px; user-select: none; cursor: pointer; text-wrap-mode: nowrap; box-sizing: border-box; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1); font-variant-numeric: tabular-nums; outline: none; align-items: center; display: inline-flex; position: relative; background-color: rgba(0, 0, 0, 0); color: rgb(82, 82, 82); --button-height: 34px; --button-font-size: 14px; --button-line-height: 25px; --button-border-radius: 10px; --button-padding: 0 14px; --button-icon-size: 18px; --button-icon-margin: 0 8px 0 0; margin-right: 8px; --button-text-color: rgb(82 82 82);&quot;&gt;&lt;div class=&quot;ds-button__icon&quot; style=&quot;line-height: 0; font-size: 18px; width: 18px; height: 18px; margin: 0px 4px 0px 0px; flex-grow: 0; flex-shrink: 0; justify-content: center; align-items: center; display: flex;&quot;&gt;&lt;div class=&quot;ds-icon&quot; style=&quot;line-height: 0; display: inline-flex; font-size: 16px; width: 16px; height: 16px;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewbox=&quot;0 0 24 24&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path d=&quot;M3.65169 12.9243C3.68173 13.1045 3.74181 13.2748 3.80189 13.445C3.87198 13.6052 3.96211 13.7654 4.06225 13.9156C4.16238 14.0658 4.27253 14.206 4.4027 14.3362C4.52286 14.4663 4.66306 14.5765 4.81326 14.6766C4.96346 14.7768 5.11366 14.8569 5.28389 14.927C5.44411 14.9971 5.61434 15.0571 5.79459 15.0872C5.97483 15.1272 6.14506 15.1373 6.3253 15.1373V16.9196C6.30739 16.9196 6.28949 16.9195 6.27159 16.9193C5.9991 16.9158 5.72659 16.8859 5.4541 16.8295C5.16371 16.7694 4.88334 16.6893 4.61298 16.5692C4.3326 16.459 4.08226 16.3188 3.83193 16.1586C3.59161 15.9884 3.3613 15.7981 3.15102 15.5878C2.94074 15.3776 2.7605 15.1473 2.59027 14.9069C2.43006 14.6566 2.28986 14.3962 2.17972 14.1259C2.06957 13.8455 1.97944 13.5651 1.91936 13.2747C1.86929 12.9843 1.83926 12.684 1.83926 12.3936V6.26532C1.83926 5.96492 1.86929 5.67456 1.91936 5.38417C1.97944 5.09378 2.06957 4.80338 2.17972 4.53302C2.28986 4.26265 2.43006 4.0023 2.59027 3.75197C2.7605 3.50163 2.94074 3.27132 3.15102 3.06104C3.3613 2.85076 3.59161 2.67052 3.83193 2.50029C4.08226 2.33006 4.3326 2.19987 4.61298 2.07971C4.88334 1.96956 5.16371 1.87943 5.4541 1.81935C5.74449 1.75927 6.03491 1.73926 6.3253 1.73926H12.3934C12.6838 1.73926 12.9842 1.75927 13.2746 1.81935C13.555 1.87943 13.8354 1.96956 14.1158 2.07971C14.3861 2.19987 14.6465 2.33006 14.8868 2.50029C15.1371 2.67052 15.3574 2.85076 15.5677 3.06104C15.778 3.27132 15.9582 3.50163 16.1284 3.75197C16.2887 4.0023 16.4288 4.26265 16.539 4.53302C16.6592 4.80338 16.7393 5.09378 16.7994 5.38417C16.8558 5.65722 16.8858 5.93024 16.8892 6.21161C16.8894 6.22948 16.8895 6.24739 16.8895 6.26532H15.1271C15.1271 6.08508 15.1071 5.90486 15.067 5.72462C15.037 5.55439 14.9869 5.38415 14.9168 5.21392C14.8467 5.04369 14.7566 4.88347 14.6665 4.73327C14.5664 4.58307 14.4462 4.45289 14.326 4.32271C14.1959 4.19254 14.0557 4.08239 13.9055 3.98226C13.7553 3.88212 13.6051 3.79202 13.4348 3.72193C13.2746 3.65184 13.1044 3.60174 12.9242 3.5717C12.7539 3.53165 12.5737 3.51163 12.3934 3.51163H6.3253C6.14506 3.51163 5.97483 3.53165 5.79459 3.5717C5.61434 3.60174 5.44411 3.65184 5.28389 3.72193C5.11366 3.79202 4.96346 3.88212 4.81326 3.98226C4.66306 4.08239 4.52286 4.19254 4.4027 4.32271C4.27253 4.45289 4.16238 4.58307 4.06225 4.73327C3.96211 4.88347 3.87198 5.04369 3.80189 5.21392C3.74181 5.38415 3.68173 5.55439 3.65169 5.72462C3.61164 5.90486 3.60164 6.08508 3.60164 6.26532V12.3936C3.60164 12.5638 3.61164 12.744 3.65169 12.9243Z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M9.66972 21.6772C9.39936 21.567 9.13902 21.4268 8.8987 21.2566C8.64836 21.0964 8.42804 20.9061 8.21776 20.6959C8.00748 20.4856 7.81723 20.2553 7.65701 20.015C7.4968 19.7646 7.3566 19.5043 7.24646 19.2239C7.12629 18.9535 7.04621 18.6731 6.98613 18.3727C6.92605 18.0823 6.89601 17.792 6.89601 17.4915V11.3733C6.89601 11.0729 6.92605 10.7825 6.98613 10.4922C7.04621 10.1918 7.12629 9.91137 7.24646 9.64101C7.3566 9.36063 7.4968 9.10028 7.65701 8.85996C7.81723 8.60962 8.00748 8.37931 8.21776 8.16903C8.42804 7.95875 8.64836 7.76849 8.8987 7.60828C9.13902 7.43805 9.39936 7.29785 9.66972 7.1877C9.94009 7.07755 10.2205 6.98745 10.5108 6.92737C10.8012 6.86729 11.0916 6.83725 11.392 6.83725H17.4602C17.7506 6.83725 18.041 6.86729 18.3313 6.92737C18.6217 6.98745 18.9021 7.07755 19.1725 7.1877C19.4529 7.29785 19.7032 7.43805 19.9535 7.60828C20.1938 7.76849 20.4242 7.95875 20.6345 8.16903C20.8447 8.37931 21.025 8.60962 21.1952 8.85996C21.3554 9.10028 21.4956 9.36063 21.6058 9.64101C21.7159 9.91137 21.806 10.1918 21.8661 10.4922C21.9162 10.7825 21.9462 11.0729 21.9462 11.3733V17.4915C21.9462 17.792 21.9162 18.0823 21.8661 18.3727C21.806 18.6731 21.7159 18.9535 21.6058 19.2239C21.4956 19.5043 21.3554 19.7646 21.1952 20.015C21.025 20.2553 20.8447 20.4856 20.6345 20.6959C20.4242 20.9061 20.1938 21.0964 19.9535 21.2566C19.7032 21.4268 19.4529 21.567 19.1725 21.6772C18.9021 21.7973 18.6217 21.8774 18.3313 21.9375C18.041 21.9976 17.7506 22.0276 17.4602 22.0276H11.392C11.0916 22.0276 10.8012 21.9976 10.5108 21.9375C10.2205 21.8774 9.94009 21.7973 9.66972 21.6772ZM10.8613 8.6697C11.0316 8.63966 11.2118 8.61965 11.392 8.61965H17.4602C17.6404 8.61965 17.8107 8.63966 17.9909 8.6697C18.1611 8.70975 18.3314 8.75983 18.5016 8.82992C18.6618 8.90001 18.822 8.98012 18.9722 9.08026C19.1224 9.18039 19.2626 9.30055 19.3828 9.42071C19.513 9.55088 19.6231 9.69109 19.7232 9.84129C19.8234 9.99149 19.9035 10.1517 19.9736 10.3219C20.0437 10.4821 20.0937 10.6624 20.1338 10.8326C20.1638 11.0129 20.1838 11.1931 20.1838 11.3733V17.4915C20.1838 17.6718 20.1638 17.852 20.1338 18.0323C20.0937 18.2125 20.0437 18.3828 19.9736 18.543C19.9035 18.7132 19.8234 18.8734 19.7232 19.0236C19.6231 19.1738 19.513 19.314 19.3828 19.4342C19.2626 19.5643 19.1224 19.6845 18.9722 19.7846C18.822 19.8848 18.6618 19.9649 18.5016 20.035C18.3314 20.1051 18.1611 20.1551 17.9909 20.1952C17.8107 20.2252 17.6404 20.2452 17.4602 20.2452H11.392C11.2118 20.2452 11.0316 20.2252 10.8613 20.1952C10.6811 20.1551 10.5108 20.1051 10.3506 20.035C10.1804 19.9649 10.0202 19.8848 9.87 19.7846C9.72982 19.6845 9.58962 19.5643 9.45945 19.4342C9.33929 19.314 9.21913 19.1738 9.119 19.0236C9.01886 18.8734 8.93875 18.7132 8.86866 18.543C8.79857 18.3828 8.74847 18.2125 8.71843 18.0323C8.67838 17.852 8.65836 17.6718 8.65836 17.4915V11.3733C8.65836 11.1931 8.67838 11.0129 8.71843 10.8326C8.74847 10.6624 8.79857 10.4821 8.86866 10.3219C8.93875 10.1517 9.01886 9.99149 9.119 9.84129C9.21913 9.69109 9.33929 9.55088 9.45945 9.42071C9.58962 9.30055 9.72982 9.18039 9.87 9.08026C10.0202 8.98012 10.1804 8.90001 10.3506 8.82992C10.5108 8.75983 10.6811 8.70975 10.8613 8.6697Z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;code-info-button-text&quot;&gt;复制&lt;/span&gt;&lt;/div&gt;&lt;div role=&quot;button&quot; class=&quot;ds-button ds-button--secondary ds-button--borderless ds-button--rect ds-button--s _7db3914&quot; tabindex=&quot;0&quot; style=&quot;--ds-rgb-error-hover: 218 54 54; --ds-button-color: transparent; --button-ring-color: rgb(59 130 246); height: 28px; line-height: 21px; font-size: 13px; border-radius: 10px; padding: 0px 4px; user-select: none; cursor: pointer; text-wrap-mode: nowrap; box-sizing: border-box; transition: opacity 0.2s cubic-bezier(0.4, 0, 0.2, 1), background-color 0.2s cubic-bezier(0.4, 0, 0.2, 1); font-variant-numeric: tabular-nums; outline: none; align-items: center; display: inline-flex; position: relative; background-color: rgba(0, 0, 0, 0); color: rgb(82, 82, 82); --button-height: 30px; --button-font-size: 13px; --button-line-height: 21px; --button-border-radius: 10px; --button-padding: 0 14px; --button-icon-size: 18px; --button-icon-margin: 0 8px 0 0; --button-text-color: rgb(82 82 82);&quot;&gt;&lt;div class=&quot;ds-button__icon&quot; style=&quot;line-height: 0; font-size: 18px; width: 18px; height: 18px; margin: 0px 4px 0px 0px; flex-grow: 0; flex-shrink: 0; justify-content: center; align-items: center; display: flex;&quot;&gt;&lt;div class=&quot;ds-icon&quot; style=&quot;line-height: 0; display: inline-flex; font-size: 16px; width: 16px; height: 16px;&quot;&gt;&lt;svg width=&quot;24&quot; height=&quot;24&quot; viewbox=&quot;0 0 24 24&quot; fill=&quot;none&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot;&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M12 2.55a.97.97 0 0 1 .982.956v13.04a.97.97 0 0 1-.982.957.97.97 0 0 1-.982-.956V3.507A.97.97 0 0 1 12 2.55z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M19.418 9.808c.382.375.37.971-.027 1.332l-6.7 6.085a1.04 1.04 0 0 1-1.41-.025.905.905 0 0 1 .027-1.332l6.7-6.085a1.04 1.04 0 0 1 1.41.025z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M4.582 9.808a1.04 1.04 0 0 1 1.41-.025l6.7 6.085c.397.361.409.957.027 1.332a1.04 1.04 0 0 1-1.41.025l-6.7-6.085a.905.905 0 0 1-.027-1.332z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;path fill-rule=&quot;evenodd&quot; clip-rule=&quot;evenodd&quot; d=&quot;M3.068 16.46a.97.97 0 0 1 .983.956v1.739c0 .432.36.782.803.782h14.291c.445 0 .804-.35.804-.782v-1.739a.97.97 0 0 1 .983-.956.97.97 0 0 1 .982.956v1.739c0 1.488-1.24 2.695-2.769 2.695H4.855c-1.53 0-2.77-1.207-2.77-2.695v-1.739a.97.97 0 0 1 .983-.956z&quot; fill=&quot;currentColor&quot;&gt;&lt;/path&gt;&lt;/svg&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class=&quot;code-info-button-text&quot;&gt;下载&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;pyinstaller&amp;nbsp;--onefile&amp;nbsp;--windowed&amp;nbsp;your_script.py&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&lt;ul style=&quot;margin-top: 4px; padding-left: 27.432px;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;&lt;code style=&quot;font-size: 0.875em; font-weight: 600; font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; background-color: rgb(236, 236, 236); border-radius: 4px; padding: 0.15rem 0.3rem;&quot;&gt;--onefile&lt;/code&gt;：生成单个EXE文件。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;&lt;code style=&quot;font-size: 0.875em; font-weight: 600; font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; background-color: rgb(236, 236, 236); border-radius: 4px; padding: 0.15rem 0.3rem;&quot;&gt;--windowed&lt;/code&gt;：隐藏命令行窗口（如果是GUI程序）。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;去掉&lt;code style=&quot;font-size: 0.875em; font-weight: 600; font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; background-color: rgb(236, 236, 236); border-radius: 4px; padding: 0.15rem 0.3rem;&quot;&gt;--windowed&lt;/code&gt;会显示命令行窗口。&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;生成的EXE在&amp;nbsp;&lt;code style=&quot;font-size: 0.875em; font-weight: 600; font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; background-color: rgb(236, 236, 236); border-radius: 4px; padding: 0.15rem 0.3rem;&quot;&gt;dist/&lt;/code&gt;&amp;nbsp;文件夹中。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 13.716px; margin-bottom: 13.716px; font-size: 16.002px; line-height: 28.575px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;优点&lt;/span&gt;：支持跨平台（Windows/macOS/Linux），自动处理依赖。&lt;/p&gt;&lt;hr style=&quot;height: 1px; margin: 32px 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(229, 229, 229); border: none; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; text-wrap-mode: wrap;&quot;/&gt;&lt;h3 style=&quot;font-size: 18.288px; line-height: 1.5; margin: 18.288px 0px 13.716px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;方法2：使用 auto-py-to-exe（图形界面）&lt;/h3&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;安装：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;pip&amp;nbsp;install&amp;nbsp;auto-py-to-exe&lt;/pre&gt;&lt;/div&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;运行：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 11.43px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;auto-py-to-exe&lt;/pre&gt;&lt;/div&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 4px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;通过可视化界面选择脚本和配置选项。&lt;/p&gt;&lt;hr style=&quot;height: 1px; margin: 32px 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(229, 229, 229); border: none; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; text-wrap-mode: wrap;&quot;/&gt;&lt;h3 style=&quot;font-size: 18.288px; line-height: 1.5; margin: 18.288px 0px 13.716px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;方法3：使用 cx_Freeze&lt;/h3&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;安装：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;pip&amp;nbsp;install&amp;nbsp;cx-Freeze&lt;/pre&gt;&lt;/div&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;创建&amp;nbsp;&lt;code style=&quot;font-size: 0.875em; font-weight: 600; font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; background-color: rgb(236, 236, 236); border-radius: 4px; padding: 0.15rem 0.3rem;&quot;&gt;setup.py&lt;/code&gt;&amp;nbsp;文件：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;python&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;from&amp;nbsp;cx_Freeze&amp;nbsp;import&amp;nbsp;setup,&amp;nbsp;Executable
setup(
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;name=&amp;quot;YourApp&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;version=&amp;quot;1.0&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;description=&amp;quot;Description&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;executables=[Executable(&amp;quot;your_script.py&amp;quot;)])&lt;/pre&gt;&lt;/div&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;打包：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;python&amp;nbsp;setup.py&amp;nbsp;build&lt;/pre&gt;&lt;/div&gt;&lt;hr style=&quot;height: 1px; margin: 32px 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgb(229, 229, 229); border: none; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; text-wrap-mode: wrap;&quot;/&gt;&lt;h3 style=&quot;font-size: 18.288px; line-height: 1.5; margin: 18.288px 0px 13.716px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot;&gt;注意事项：&lt;/h3&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;杀毒软件误报&lt;/span&gt;：PyInstaller生成的EXE可能被误报为病毒，可添加信任或签名解决。&lt;/p&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; margin-bottom: 4px; font-size: 16.002px; line-height: 28.575px;&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;文件大小&lt;/span&gt;：EXE文件较大（因为包含Python解释器），可用UPX压缩：&lt;/p&gt;&lt;div class=&quot;md-code-block md-code-block-light&quot; style=&quot;--ds-md-code-block-border-color: #e5e5e5; --ds-md-code-block-banner-wrap-background-color: white; --ds-md-code-banner-background-color: #f5f5f5; color: rgb(73, 73, 73); background: rgb(250, 250, 250); --ds-md-code-block-border-radius: 12px; --ds-md-code-block-font-size: calc(1.143*11px); border-radius: 12px; font-size: 12.573px; line-height: 20.1168px; margin-bottom: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner-wrap&quot; style=&quot;background-color: rgb(255, 255, 255); z-index: 6; position: sticky; top: 0px;&quot;&gt;&lt;div class=&quot;md-code-block-banner md-code-block-banner-lite&quot; style=&quot;background: none 0% 0% / auto repeat scroll padding-box border-box rgb(245, 245, 245); padding: 0px; font-size: 12.573px; line-height: 12.573px; justify-content: space-between; display: flex; border-top-left-radius: 12px; border-top-right-radius: 12px;&quot;&gt;&lt;div class=&quot;_121d384&quot; style=&quot;justify-content: space-between; align-items: center; width: 704.578px; padding: 6px 14px 6px 6px; display: flex;&quot;&gt;&lt;div class=&quot;d2a24f03&quot; style=&quot;flex-shrink: 0;&quot;&gt;&lt;span class=&quot;d813de27&quot; style=&quot;color: #525252; margin-left: 8px; font-size: 12px; line-height: 18px;&quot;&gt;bash&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre style=&quot;font-family: Menlo, &amp;quot;Roboto Mono&amp;quot;, &amp;quot;Courier New&amp;quot;, Courier, monospace, Inter, sans-serif; overflow: auto; padding: 9.144px 13.716px; text-wrap-mode: wrap; word-break: break-all; margin-top: 0px !important; margin-bottom: 0px !important;&quot;&gt;pyinstaller&amp;nbsp;--onefile&amp;nbsp;--upx-dir=path_to_upx&amp;nbsp;your_script.py&lt;/pre&gt;&lt;/div&gt;&lt;ol start=&quot;1&quot; style=&quot;margin-top: 13.716px; margin-bottom: 13.716px; padding-left: 27.432px; color: rgb(64, 64, 64); font-family: quote-cjk-patch, Inter, system-ui, -apple-system, BlinkMacSystemFont, &amp;quot;Segoe UI&amp;quot;, Roboto, &amp;quot;Noto Sans&amp;quot;, Ubuntu, Cantarell, &amp;quot;Helvetica Neue&amp;quot;, Oxygen, &amp;quot;Open Sans&amp;quot;, sans-serif; font-size: 16.002px; text-wrap-mode: wrap; background-color: rgb(255, 255, 255);&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p class=&quot;ds-markdown-paragraph&quot; style=&quot;margin-top: 0px; font-size: 16.002px; line-height: 28.575px; margin-bottom: 0px !important;&quot;&gt;&lt;span style=&quot;font-weight: 600;&quot;&gt;依赖问题&lt;/span&gt;：确保所有依赖库在打包前已安装。&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sat, 14 Jun 2025 13:35:01 +0800</pubDate></item><item><title>Visual Studio 各版本密钥</title><link>https://www.ganda.run/post/22.html</link><description>&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2022&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Enterprise（企业版）:VHF9H-NXBBB-638P6-6JHCY-88JWH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Professional（专业版）:TD244-P4NB7-YQ6XK-Y8MMM-YWV2J&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2019&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Enterprise&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;BF8Y8-GN2QH-T84XB-QVY3B-RC4DF&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Professional&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;NYWVH-HT4XC-R2WYW-9Y3CM-X4V3Y&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2017&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Enterprise: NJVYC-BMHX2-G77MM-4XJMR-6Q8QF&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Professional: KBJFW-NXHK6-W4WJM-CRMQB-G3CDH&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2015:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;专业版(Visual Studio Professional 2015 with Update 3)：HMGNV-WCYXV-X7G9W-YCX63-B98R2&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;企业版(Visual Studio Enterprise 2015 with Update 3)：HM6NR-QXX7C-DFW2Y-8B82K-WTYJV&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2013&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio Ultimate 2013 KEY（密钥）：BWG7X-J98B3-W34RT-33B3R-JVYW9&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio Premium 2013 KEY（密钥）：FBJVC-3CMTX-D8DVP-RTQCT-92494&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio Professional 2013 KEY（密钥）： XDM3T-W3T3V-MGJWK-8BFVD-GVPKY&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Team Foundation Server 2013 KEY（密钥）：MHG9J-HHHX9-WWPQP-D8T7H-7KCQG&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2012&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2012 Ultimate旗舰版序列号：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;YKCW6-BPFPF-BT8C9-7DCTH-QXGWC&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;RBCXF-CVBGR-382MK-DFHJ4-C69G8&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;YQ7PR-QTHDM-HCBCV-9GKGG-TB2TM&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio 2010&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Visual Studio Ultimate 2010 KEY: YCFHQ9DWCYDKV88T2TMHG7BHP&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Mon, 07 Oct 2024 20:04:47 +0800</pubDate></item><item><title>aliyun短信验证码接入(php版)</title><link>https://www.ganda.run/post/21.html</link><description>&lt;p&gt;安装SDK:&amp;nbsp;&lt;/p&gt;&lt;p&gt;使用Composer安装阿里云PHP SDK：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;composer&amp;nbsp;require&amp;nbsp;alibabacloud/client&lt;/pre&gt;&lt;p&gt;发送验证码:&lt;/p&gt;&lt;p&gt;当用户请求发送验证码时，后端应执行以下操作：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;lt;?php
require&amp;nbsp;&amp;#39;vendor/autoload.php&amp;#39;;

use&amp;nbsp;AlibabaCloud\Client\AlibabaCloud;
use&amp;nbsp;AlibabaCloud\Client\Exception\ClientException;
use&amp;nbsp;AlibabaCloud\Client\Exception\ServerException;

AlibabaCloud::accessKeyClient(&amp;#39;&amp;lt;YOUR-ACCESS-KEY&amp;gt;&amp;#39;,&amp;nbsp;&amp;#39;&amp;lt;YOUR-ACCESS-SECRET&amp;gt;&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;regionId(&amp;#39;cn-hangzhou&amp;#39;)&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;asDefaultClient();

$code&amp;nbsp;=&amp;nbsp;rand(100000,&amp;nbsp;999999);&amp;nbsp;//生成6位随机验证码

//&amp;nbsp;将验证码存储到会话或数据库，并设置有效期
$_SESSION[&amp;#39;sms_code&amp;#39;]&amp;nbsp;=&amp;nbsp;$code;
$_SESSION[&amp;#39;sms_code_expiry&amp;#39;]&amp;nbsp;=&amp;nbsp;time()&amp;nbsp;+&amp;nbsp;300;&amp;nbsp;//设置验证码5分钟后过期

try&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;AlibabaCloud::rpc()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;product(&amp;#39;Dysmsapi&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;version(&amp;#39;2017-05-25&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;action(&amp;#39;SendSms&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;method(&amp;#39;POST&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;host(&amp;#39;dysmsapi.aliyuncs.com&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;options([
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;query&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;RegionId&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;quot;cn-hangzhou&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PhoneNumbers&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;quot;&amp;lt;USER-PHONE-NUMBER&amp;gt;&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;SignName&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;quot;&amp;lt;YOUR-SIGN-NAME&amp;gt;&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateCode&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;quot;&amp;lt;YOUR-TEMPLATE-CODE&amp;gt;&amp;quot;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateParam&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;json_encode([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$code]),
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;request();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print_r($result-&amp;gt;toArray());
}&amp;nbsp;catch&amp;nbsp;(ClientException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
}&amp;nbsp;catch&amp;nbsp;(ServerException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
}
?&amp;gt;&lt;/pre&gt;&lt;p&gt;验证验证码:&lt;/p&gt;&lt;p&gt;当用户提交验证码时，比较用户输入的验证码与会话或数据库中存储的验证码，然后判断验证码是否过期。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;lt;?php
$userInputCode&amp;nbsp;=&amp;nbsp;$_POST[&amp;#39;code&amp;#39;];&amp;nbsp;//&amp;nbsp;从表单或AJAX请求获取用户输入的验证码

if&amp;nbsp;(isset($_SESSION[&amp;#39;sms_code&amp;#39;])&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;$_SESSION[&amp;#39;sms_code&amp;#39;]&amp;nbsp;==&amp;nbsp;$userInputCode&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;time()&amp;nbsp;&amp;lt;=&amp;nbsp;$_SESSION[&amp;#39;sms_code_expiry&amp;#39;])&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;quot;验证码正确!&amp;quot;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;执行其他注册逻辑
}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;&amp;quot;验证码错误或已过期!&amp;quot;;
}
?&amp;gt;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Nov 2023 18:36:03 +0800</pubDate></item><item><title>PHP与阿里云短信接口对接实际案例中的短信发送机制与消息通道设计</title><link>https://www.ganda.run/post/20.html</link><description>&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;PHP与阿里云短信接口对接实际案例中的短信发送机制与消息通道设计&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;概述：&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;在如今的互联网时代，短信已经成为了人们生活中重要的一部分，而短信发送的功能也成为了很多应用开发中必不可少的一环。本文将以PHP语言为例，介绍如何通过阿里云短信接口实现短信发送的机制与消息通道的设计。&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;一、阿里云短信接口介绍&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;阿里云短信接口是阿里云提供的一套短信发送服务，无论是验证码、营销短信还是通知类短信，都可以通过该接口来实现。通过该接口发送短信，不仅能够满足实际需求，而且保证了短信的高可靠性。&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;二、短信发送机制设计&lt;/p&gt;&lt;p&gt;注册阿里云账号及申请短信服务&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;首先，我们需要注册一个阿里云账号，并申请短信服务。在申请短信服务时，需要提供一些必要的信息，如业务名称、签名等。审核通过后，阿里云将为我们提供AccessKey ID和AccessKey Secret，这两个密钥是我们调用短信接口的凭证。&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); box-sizing: border-box; border-radius: 8px;&quot;&gt;安装阿里云SDK&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;在PHP项目中使用阿里云短信接口，我们可以借助阿里云SDK来进行开发。首先，我们需要在项目中安装阿里云SDK。可以通过composer来安装，命令如下：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;composer&amp;nbsp;require&amp;nbsp;alibabacloud/sdk&lt;/pre&gt;&lt;ol style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;div class=&quot;code&quot; style=&quot;margin: 0px; padding: 0px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); user-select: none; position: relative;&quot;&gt;&lt;table cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;syntaxhighlighter php&quot; width=&quot;929&quot;&gt;&lt;tbody style=&quot;margin: 0px !important; padding: 0px !important; border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;&quot;&gt;&lt;tr style=&quot;margin: 0px !important; padding: 0px !important; border-radius: 0px !important; background: none !important; border: 0px !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; width: auto !important; box-sizing: content-box !important; min-height: auto !important;&quot; class=&quot;firstRow&quot;&gt;&lt;td class=&quot;code&quot; style=&quot;-webkit-tap-highlight-color: rgba(0, 0, 0, 0); user-select: none; word-break: break-all; margin: 0px !important; padding: 0px !important; border-radius: 0px !important; background: none !important; border-width: 0px !important; border-style: initial !important; border-color: initial !important; inset: auto !important; float: none !important; line-height: 1.1em !important; outline: 0px !important; overflow: visible !important; position: static !important; vertical-align: baseline !important; box-sizing: content-box !important; min-height: auto !important;&quot; width=&quot;888&quot;&gt;&lt;br/&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;编写短信发送代码&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;在PHP项目中，我们可以通过调用阿里云SDK提供的API来发送短信。以下是一个简单的示例代码，具体的参数根据实际需求进行填写：&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;lt;?php
require&amp;nbsp;&amp;#39;vendor/autoload.php&amp;#39;;

use&amp;nbsp;AlibabaCloudClientAlibabaCloud;
use&amp;nbsp;AlibabaCloudClientExceptionClientException;
use&amp;nbsp;AlibabaCloudClientExceptionServerException;

AlibabaCloud::accessKeyClient(&amp;#39;your-access-key-id&amp;#39;,&amp;nbsp;&amp;#39;your-access-key-secret&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;regionId(&amp;#39;cn-hangzhou&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;asDefaultClient();

try&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;AlibabaCloud::rpcRequest()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;product(&amp;#39;Dysmsapi&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;scheme(&amp;#39;https&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;version(&amp;#39;2017-05-25&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;action(&amp;#39;SendSms&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;method(&amp;#39;POST&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;options([
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;query&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PhoneNumbers&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;13000000000&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;SignName&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;阿里云&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateCode&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;SMS_0000001&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateParam&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;{&amp;quot;code&amp;quot;:&amp;quot;123456&amp;quot;}&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;request();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print_r($result-&amp;gt;toArray());
}&amp;nbsp;catch&amp;nbsp;(ClientException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
}&amp;nbsp;catch&amp;nbsp;(ServerException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
}
?&amp;gt;&lt;/pre&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;以上代码中，我们使用了AlibabaCloud SDK提供的rpcRequest()方法来发送短信。其中，我们需要填写AccessKey ID、AccessKey Secret、阿里云短信签名、短信模板ID以及接收短信的手机号码等信息。&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;三、消息通道设计&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;为了更好地管理短信发送的状态以及记录相关的操作日志，我们可以设置一个消息通道来处理短信发送的结果。以下是一个简单的消息通道设计示例：&lt;/p&gt;&lt;ol style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;创建数据库表&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;首先，我们需要创建一张数据库表用于记录短信发送的结果和相关信息。表的结构如下：&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;`sms_logs`&amp;nbsp;(
&amp;nbsp;&amp;nbsp;`id`&amp;nbsp;int(11)&amp;nbsp;unsigned&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;AUTO_INCREMENT,
&amp;nbsp;&amp;nbsp;`phone_number`&amp;nbsp;varchar(20)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;手机号码&amp;#39;,
&amp;nbsp;&amp;nbsp;`template_code`&amp;nbsp;varchar(20)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;短信模板ID&amp;#39;,
&amp;nbsp;&amp;nbsp;`content`&amp;nbsp;text&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;短信内容&amp;#39;,
&amp;nbsp;&amp;nbsp;`result_code`&amp;nbsp;varchar(20)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;发送结果编码&amp;#39;,
&amp;nbsp;&amp;nbsp;`result_msg`&amp;nbsp;varchar(255)&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;发送结果消息&amp;#39;,
&amp;nbsp;&amp;nbsp;`created_at`&amp;nbsp;timestamp&amp;nbsp;NOT&amp;nbsp;NULL&amp;nbsp;DEFAULT&amp;nbsp;CURRENT_TIMESTAMP&amp;nbsp;COMMENT&amp;nbsp;&amp;#39;发送时间&amp;#39;,
&amp;nbsp;&amp;nbsp;PRIMARY&amp;nbsp;KEY&amp;nbsp;(`id`)
)&amp;nbsp;ENGINE=InnoDB&amp;nbsp;DEFAULT&amp;nbsp;CHARSET=utf8mb4;&lt;/pre&gt;&lt;ol start=&quot;2&quot; style=&quot;list-style-type: none;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;编写发送短信的代码&lt;/p&gt;&lt;p&gt;在发送短信的代码中，我们可以将发送结果保存到数据库中。以下是一个示例：&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;//&amp;nbsp;发送短信并将结果保存到数据库中
$result&amp;nbsp;=&amp;nbsp;AlibabaCloud::rpcRequest()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;product(&amp;#39;Dysmsapi&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;scheme(&amp;#39;https&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;version(&amp;#39;2017-05-25&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;action(&amp;#39;SendSms&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;method(&amp;#39;POST&amp;#39;)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;options([
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;query&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PhoneNumbers&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;13000000000&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;SignName&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;阿里云&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateCode&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;SMS_0000001&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateParam&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;{&amp;quot;code&amp;quot;:&amp;quot;123456&amp;quot;}&amp;#39;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;])
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;request();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;
//&amp;nbsp;将发送结果保存到数据库中
if&amp;nbsp;($result[&amp;#39;Code&amp;#39;]&amp;nbsp;==&amp;nbsp;&amp;#39;OK&amp;#39;)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;//&amp;nbsp;发送成功
&amp;nbsp;&amp;nbsp;$resultCode&amp;nbsp;=&amp;nbsp;&amp;#39;success&amp;#39;;
&amp;nbsp;&amp;nbsp;$resultMsg&amp;nbsp;=&amp;nbsp;&amp;#39;短信发送成功&amp;#39;;
}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;//&amp;nbsp;发送失败
&amp;nbsp;&amp;nbsp;$resultCode&amp;nbsp;=&amp;nbsp;&amp;#39;fail&amp;#39;;
&amp;nbsp;&amp;nbsp;$resultMsg&amp;nbsp;=&amp;nbsp;$result[&amp;#39;Message&amp;#39;];
}

//&amp;nbsp;将发送结果保存到数据库
$pdo&amp;nbsp;=&amp;nbsp;new&amp;nbsp;PDO(&amp;#39;mysql:host=localhost;dbname=your_database&amp;#39;,&amp;nbsp;&amp;#39;your_username&amp;#39;,&amp;nbsp;&amp;#39;your_password&amp;#39;);
$stmt&amp;nbsp;=&amp;nbsp;$pdo-&amp;gt;prepare(&amp;quot;INSERT&amp;nbsp;INTO&amp;nbsp;sms_logs&amp;nbsp;(phone_number,&amp;nbsp;template_code,&amp;nbsp;content,&amp;nbsp;result_code,&amp;nbsp;result_msg)&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;VALUES&amp;nbsp;(:phone_number,&amp;nbsp;:template_code,&amp;nbsp;:content,&amp;nbsp;:result_code,&amp;nbsp;:result_msg)&amp;quot;);
$stmt-&amp;gt;execute([
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;phone_number&amp;#39;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;13000000000&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;template_code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;SMS_0000001&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;content&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;您的验证码是123456&amp;#39;,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;result_code&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;$resultCode,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;result_msg&amp;#39;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;=&amp;gt;&amp;nbsp;$resultMsg
]);&lt;/pre&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;通过以上的代码，我们将发送的短信以及发送结果保存到数据库中，便于后续的查询和管理。&lt;/p&gt;&lt;p style=&quot;margin-top: 15px; margin-bottom: 15px; padding: 0px 0px 0px 10px; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); color: rgb(61, 70, 77); font-size: 16px; box-sizing: border-box; border-radius: 8px; font-family: &amp;quot;Helvetica Neue&amp;quot;, Helvetica, &amp;quot;PingFang SC&amp;quot;, 微软雅黑, Tahoma, Arial, sans-serif; text-wrap: wrap;&quot;&gt;结语：&lt;br style=&quot;margin: 0px; padding: 0px;&quot;/&gt;通过PHP与阿里云短信接口对接，我们可以快速、可靠地实现短信发送的功能。同时，通过合理的设计短信发送的机制与消息通道，能够更好地管理短信发送的状态和记录相关的操作日志，为我们提供更好的短信服务。希望本文能够对使用PHP与阿里云短信接口进行短信发送的开发工作有所帮助。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Nov 2023 17:55:01 +0800</pubDate></item><item><title>PHP 实现阿里云短信API对接(登录/注册参考)</title><link>https://www.ganda.run/post/19.html</link><description>&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;目录&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;一、阿里云SDK依赖（需要安装好composer）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;二、使用步骤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;1.登录/注册接口对接的阿里云发送短信的控制器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;2.登录发送短信/登录短信验证&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;3：注册发送短信/注册短信验证&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;登录和注册时都需要查询用户是否已存在：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;登录是为了查看用户是否是新用户（新用户去注册）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;注册是为了查看用户是否已经被注册（被注册去登录）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;验证成功后：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;登录验证就签发token——登陆成功（前端跳转首页）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;注册验证就将注册信息添加到用户表里——注册成功（前端跳转登录）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;一、阿里云SDK依赖（需要安装好composer）&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;1：win+R打开命令行进行阿里云换源&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;composer&amp;nbsp;config&amp;nbsp;-g&amp;nbsp;repo.packagist&amp;nbsp;composer&amp;nbsp;https://mirrors.aliyun.com/composer/&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;2：cd 到项目根路径下安装依赖&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;composer&amp;nbsp;require&amp;nbsp;alibabacloud/client&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;二、使用步骤&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;1.登录/注册接口对接的阿里云发送短信的控制器&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;lt;?php
&amp;nbsp;
namespace&amp;nbsp;app\controller;
&amp;nbsp;
use&amp;nbsp;AlibabaCloud\Client\AlibabaCloud;
use&amp;nbsp;AlibabaCloud\NlsCloudMeta\NlsCloudMeta;
use&amp;nbsp;AlibabaCloud\Client\Exception\ClientException;
use&amp;nbsp;AlibabaCloud\Client\Exception\ServerException;
use&amp;nbsp;app\model\sms;&amp;nbsp;&amp;nbsp;/*引入你自己的短信模型地址*/
&amp;nbsp;
class&amp;nbsp;Indexsms
{
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;发送短信验证码
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*接收的是登录接口发送过来的数据phone：手机号，type：请求类型-login/register*/
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;index($phone,&amp;nbsp;$type)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$code&amp;nbsp;=&amp;nbsp;rand(100000,&amp;nbsp;999999);&amp;nbsp;/*验证码随机*/
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$config&amp;nbsp;=&amp;nbsp;[&amp;nbsp;&amp;nbsp;&amp;nbsp;/*将下面的参数换成在阿里云上得到的参数*/
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;accessKeyId&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Access&amp;nbsp;Key&amp;nbsp;ID&amp;#39;,
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;accessSecret&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;Access&amp;nbsp;Key&amp;nbsp;Secret&amp;#39;,
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;SignName&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;短信签名&amp;#39;,
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateCode&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;模板ID&amp;#39;,
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;regionId&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;cn-hangzhou&amp;#39;&amp;nbsp;/*不用改这里的地址*/
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$param&amp;nbsp;=&amp;nbsp;[&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$code];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AlibabaCloud::accessKeyClient($config[&amp;#39;accessKeyId&amp;#39;],&amp;nbsp;$config[&amp;#39;accessSecret&amp;#39;])
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;regionId($config[&amp;#39;regionId&amp;#39;])
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;asDefaultClient();
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&amp;nbsp;{
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$result&amp;nbsp;=&amp;nbsp;AlibabaCloud::rpc()
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;product(&amp;#39;Dysmsapi&amp;#39;)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;version(&amp;#39;2017-05-25&amp;#39;)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;action(&amp;#39;SendSms&amp;#39;)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;method(&amp;#39;POST&amp;#39;)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;options([
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;query&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;[
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;PhoneNumbers&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$phone,
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;SignName&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$config[&amp;#39;SignName&amp;#39;],
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateCode&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$config[&amp;#39;TemplateCode&amp;#39;],
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;TemplateParam&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;json_encode($param)
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;],
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;])
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt;request();
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*发送成功存入数据库，将手机号，验证码，请求类型写入短信表*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$smsModel&amp;nbsp;=&amp;nbsp;new&amp;nbsp;sms();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$saveSms&amp;nbsp;=&amp;nbsp;$smsModel-&amp;gt;saveSms($phone,&amp;nbsp;$code,&amp;nbsp;$type);
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$result-&amp;gt;toArray();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(ClientException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;catch&amp;nbsp;(ServerException&amp;nbsp;$e)&amp;nbsp;{
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$e-&amp;gt;getErrorMessage()&amp;nbsp;.&amp;nbsp;PHP_EOL;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;2.登录发送短信/登录短信验证&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//短信登陆
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;remarks:用户登录-短信发送
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;phone(手机号)/type(long/register)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;index()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*用户表中查询手机号是否存在*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$adminModel&amp;nbsp;=&amp;nbsp;new&amp;nbsp;admin();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$data&amp;nbsp;=&amp;nbsp;request::only([&amp;#39;phone&amp;#39;,&amp;nbsp;&amp;#39;type&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$regular&amp;nbsp;=&amp;nbsp;preg_match(&amp;#39;/^1[3456789]\d{9}$/&amp;#39;,&amp;nbsp;$data[&amp;#39;phone&amp;#39;]);/*验证手机格式*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($regular&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;手机号格式不正确&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$checkUser&amp;nbsp;=&amp;nbsp;$adminModel-&amp;gt;checkphone($data[&amp;#39;phone&amp;#39;],&amp;nbsp;&amp;#39;login&amp;#39;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($checkUser&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;抱歉,该手机号是新户暂时不能使用短信登陆!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$sendsms&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Indexsms();/*实列化发送短信的阿里控制器*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$send&amp;nbsp;=&amp;nbsp;$sendsms-&amp;gt;index($data[&amp;#39;phone&amp;#39;],&amp;nbsp;$data[&amp;#39;type&amp;#39;]);/*带数据过去*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($send)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;发送成功,请注意查收短息5分钟内生效!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;发送失败,网络繁忙请稍后再试!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;remarks:用户登录-验证短信
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;phone/type
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;checkLogin()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$data&amp;nbsp;=&amp;nbsp;request::only([&amp;#39;phone&amp;#39;,&amp;nbsp;&amp;#39;code&amp;#39;,&amp;nbsp;&amp;#39;type&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*查询短信验证码*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$smsModel&amp;nbsp;=&amp;nbsp;new&amp;nbsp;sms();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$checkCode&amp;nbsp;=&amp;nbsp;$smsModel-&amp;gt;checkCode($data);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($checkCode&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;验证码错误,请重新核对!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$uid&amp;nbsp;=&amp;nbsp;new&amp;nbsp;admin();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$key&amp;nbsp;=&amp;nbsp;&amp;#39;token&amp;#39;;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$payload&amp;nbsp;=&amp;nbsp;[
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;iat&amp;quot;&amp;nbsp;=&amp;gt;&amp;nbsp;time(),&amp;nbsp;/*令牌签发时间*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;nbf&amp;quot;&amp;nbsp;=&amp;gt;&amp;nbsp;time(),&amp;nbsp;/*如果当前时间在nbf里的时间之前，则Token不被接受*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;exp&amp;quot;&amp;nbsp;=&amp;gt;&amp;nbsp;time()&amp;nbsp;+&amp;nbsp;60&amp;nbsp;*&amp;nbsp;60&amp;nbsp;*&amp;nbsp;24&amp;nbsp;*&amp;nbsp;7,&amp;nbsp;/*过期时间*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;quot;uid&amp;quot;&amp;nbsp;=&amp;gt;&amp;nbsp;$uid-&amp;gt;uid($data[&amp;#39;phone&amp;#39;]),/*验证用户id是否相同*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;];
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$smsModel-&amp;gt;editCodeState($checkCode[&amp;#39;id&amp;#39;]);/*验证成功后更改短信的有效性（改无效）*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$token&amp;nbsp;=&amp;nbsp;JWT::encode($payload,&amp;nbsp;$key,&amp;nbsp;&amp;quot;HS256&amp;quot;);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;登陆成功&amp;#39;,&amp;nbsp;&amp;#39;token&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$token]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;3：注册发送短信/注册短信验证&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;remarks:注册
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;register()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$data&amp;nbsp;=&amp;nbsp;request::only([&amp;#39;phone&amp;#39;,&amp;nbsp;&amp;#39;type&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$regular&amp;nbsp;=&amp;nbsp;preg_match(&amp;#39;/^1[3456789]\d{9}$/&amp;#39;,&amp;nbsp;$data[&amp;#39;phone&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($regular&amp;nbsp;==&amp;nbsp;0)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;手机号格式不正确&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*查询手机号是否为空*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$nullphone&amp;nbsp;=&amp;nbsp;new&amp;nbsp;admin();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($nullphone-&amp;gt;checkphone($data[&amp;#39;phone&amp;#39;])&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$sendsms&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Indexsms();/*实列化发送短信的阿里控制器*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$send&amp;nbsp;=&amp;nbsp;$sendsms-&amp;gt;index($data[&amp;#39;phone&amp;#39;],&amp;nbsp;$data[&amp;#39;type&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($send)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;发送成功,请注意查收短息5分钟内生效!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;发送失败,网络繁忙请稍后再试!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;抱歉,该手机号已被注册!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/**
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;remarks:用户注册-验证短信
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;function&amp;nbsp;checkRegister()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$data&amp;nbsp;=&amp;nbsp;request::only([&amp;#39;phone&amp;#39;,&amp;nbsp;&amp;#39;code&amp;#39;,&amp;nbsp;&amp;#39;password&amp;#39;,&amp;nbsp;&amp;#39;type&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$register&amp;nbsp;=&amp;nbsp;new&amp;nbsp;sms();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$codeinfo&amp;nbsp;=&amp;nbsp;$register-&amp;gt;checkCode($data);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if&amp;nbsp;($codeinfo&amp;nbsp;==&amp;nbsp;null)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;0,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;验证码错误,请重新核对!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;if&amp;nbsp;(!empty($data[&amp;#39;phone&amp;#39;])&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!empty($data[&amp;#39;password&amp;#39;]))&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*修改短信有效状态*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$register-&amp;gt;editCodeState($codeinfo[&amp;#39;id&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$password&amp;nbsp;=&amp;nbsp;md5($data[&amp;#39;password&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$adduser&amp;nbsp;=&amp;nbsp;new&amp;nbsp;admin();
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$adduser&amp;nbsp;=&amp;nbsp;$adduser-&amp;gt;save([
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;phone&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$data[&amp;#39;phone&amp;#39;],
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;#39;password&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;$password,
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;注册成功!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&amp;nbsp;else&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/*注册失败*/
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;json([&amp;#39;code&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;1,&amp;nbsp;&amp;#39;msg&amp;#39;&amp;nbsp;=&amp;gt;&amp;nbsp;&amp;#39;表单信息不完整!&amp;#39;]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Wed, 01 Nov 2023 17:41:47 +0800</pubDate></item><item><title>Node.js和npm安装</title><link>https://www.ganda.run/post/18.html</link><description>&lt;p&gt;&lt;strong&gt;导入 NodeSource 的 RPM 仓库:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;首先，您需要从 NodeSource 设置 Node.js 仓库。以下是如何设置 Node.js 14.x 仓库（这是一个长期支持（LTS）版本）：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;curl&amp;nbsp;-sL&amp;nbsp;https://rpm.nodesource.com/setup_14.x&amp;nbsp;|&amp;nbsp;sudo&amp;nbsp;bash&amp;nbsp;-&lt;/pre&gt;&lt;p&gt;如果您希望安装其他版本的 Node.js，只需将上述 URL 中的 14.x 替换为您想要的版本号，例如 16.x。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装 Node.js 和 npm:&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;-y&amp;nbsp;nodejs&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;验证安装:&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;node&amp;nbsp;-v
npm&amp;nbsp;-v&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;安装项目依赖:&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;npm&amp;nbsp;install&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;检查全局依赖:&lt;/strong&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;npm&amp;nbsp;install&amp;nbsp;-g&amp;nbsp;react-scripts&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 31 Oct 2023 22:03:04 +0800</pubDate></item><item><title>安装Python3</title><link>https://www.ganda.run/post/17.html</link><description>&lt;p&gt;启用 EPEL 仓库&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;epel-release&lt;/pre&gt;&lt;p&gt;安装 Python 3&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;python36&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;根据 EPEL 仓库的版本，你可能会看到不同的 Python 3 版本，例如 python37、python38 等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;验证 Python 3 安装&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-python&quot;&gt;python3.6&amp;nbsp;--version&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;color: #FF0000;&quot;&gt;根据你安装的具体版本，你可能需要使用 python3.7 --version 或 python3.8 --version 等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;安装 pip (如果需要)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;如果你想使用 pip 来管理 Python 3 包，你可以安装 python3X-pip：&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;python36-pip&lt;/pre&gt;&lt;p&gt;替换 python36-pip 为你安装的 Python 3 的具体版本。&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;centos7.x当你完成上述步骤后，Python 2.7 仍然是默认的 python 版本，而新安装的 Python 3 可以通过 python3.6、python3.7 等命令访问。这确保了系统工具，例如 YUM，仍然可以正常工作，因为它们依赖于 Python 2.7。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;常见Python38安装问题&lt;/p&gt;&lt;p&gt;清空 YUM 缓存:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;clean&amp;nbsp;all&lt;/pre&gt;&lt;p&gt;更新仓库数据:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;makecache&lt;/pre&gt;&lt;p&gt;查找可用的 Python 3 包:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;search&amp;nbsp;python3&lt;/pre&gt;&lt;p&gt;这将列出与 python3 相关的所有包。从列表中，你应该能够找到可用的 Python 3 版本，例如 python36、python37 等，并选择适合你的版本进行安装。&lt;/p&gt;&lt;p&gt;安装选择的 Python 3 版本:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;python36&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;卸载Python3.6&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;remove&amp;nbsp;python36&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 31 Oct 2023 18:28:03 +0800</pubDate></item><item><title>CentOS 更新系统文件</title><link>https://www.ganda.run/post/16.html</link><description>&lt;p&gt;更新 yum 缓存:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;yum&amp;nbsp;clean&amp;nbsp;all&lt;/pre&gt;&lt;p&gt;检查可用更新:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;yum&amp;nbsp;check-update&lt;/pre&gt;&lt;p&gt;更新所有软件包:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;yum&amp;nbsp;update&lt;/pre&gt;&lt;p&gt;重启 (如果需要的话):&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;reboot&lt;/pre&gt;&lt;p&gt;检查更新后的系统版本 (可选):&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;cat&amp;nbsp;/etc/centos-release&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Tue, 31 Oct 2023 18:00:41 +0800</pubDate></item><item><title>node安装和故障排查</title><link>https://www.ganda.run/post/15.html</link><description>&lt;p&gt;Ubuntu/Debian更新:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;apt&amp;nbsp;update&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;CentOS/RHEL更新:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;update&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;Install Node.js: Once the package manager is updated, you can install Node.js. Again, the specific command may vary depending on your distribution. Here are a few examples: For Ubuntu/Debian:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;apt&amp;nbsp;install&amp;nbsp;nodejs&lt;/pre&gt;&lt;p&gt;For CentOS/RHEL:&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;sudo&amp;nbsp;yum&amp;nbsp;install&amp;nbsp;nodejs&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;这意味着在运行 npm run build 命令时，发生了错误。可能的原因有很多，下面是一些常见的解决方案：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;检查依赖项：确保你的项目依赖的所有软件包和库都已正确安装，并且版本兼容。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;清理缓存：尝试使用 npm cache clean 命令清理npm缓存，然后再次运行构建命令。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;更新npm和Node版本：确认你正在使用最新版本的npm和Node.js。你可以运行 npm install -g npm 来更新npm，nvm install stable 来更新Node.js。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;查看其他错误信息：有时候日志中的错误信息可能不够详细，可能有其他的错误信息没有显示出来。你可以查看整个日志文件，或者在控制台中查看其他输出来获取更多信息。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;br/&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;Install npm：&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;curl&amp;nbsp;-L&amp;nbsp;https://www.npmjs.com/install.sh&amp;nbsp;|&amp;nbsp;sudo&amp;nbsp;sh&lt;/pre&gt;&lt;p&gt;&lt;span style=&quot;text-wrap: nowrap;&quot;&gt;&lt;/span&gt;Install nvm：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-perl&quot;&gt;curl&amp;nbsp;-o-&amp;nbsp;https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh&amp;nbsp;|&amp;nbsp;bash&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 27 Oct 2023 17:22:07 +0800</pubDate></item></channel></rss>