无码人妻久久一区二区三区免费,久久亚洲国产精品一区二区,欧美日韩一区二区在线http://www.7811333.com/學海無涯,心存高遠!微信支付 redirect_uri 提示 協(xié)議與后臺配置不一致,錯誤碼:10039http://www.7811333.com/?id=533<p>如下圖所示:</p><p><img src="http://www.7811333.com/zb_users/upload/2024/05/202405251716629776444154.jpg" alt="4e3061a9878b9e91e27b0adee77a797.jpg"/></p><p>檢查微信公眾后臺的協(xié)議</p><p><img src="http://www.7811333.com/zb_users/upload/2024/05/202405251716629887298686.png" alt="image.png"/>協(xié)議有沒有對上,有些是強制了https的</p>Sat, 25 May 2024 17:35:40 +0800window mysql開啟遠程訪問http://www.7811333.com/?id=532<h2>1. 設置賬戶權限</h2><pre class="prism-highlight prism-language-bash">mysql&nbsp;-u&nbsp;root&nbsp;-p</pre><p>&nbsp; &nbsp; 輸入進去后切換到mysql數(shù)據(jù)庫</p><pre class="prism-highlight prism-language-bash">use&nbsp;mysql</pre><p>&nbsp; &nbsp; 查詢user表</p><pre class="prism-highlight prism-language-bash">SELECT&nbsp;user,&nbsp;host&nbsp;FROM&nbsp;user;</pre><p>&nbsp; &nbsp; host字段如果設置為 %,都可以訪問</p><pre class="prism-highlight prism-language-bash">UPDATE&nbsp;user&nbsp;SET&nbsp;host&nbsp;=&nbsp;&#39;%&#39;&nbsp;&nbsp;WHERE&nbsp;&nbsp;user&nbsp;=&nbsp;&#39;root&#39;;</pre><h2></h2><h2>2. 查看服務器是否已開啟3306權限,我以阿里云為例</h2><p><span style="font-family: PingFangSC-Regular; white-space: pre-wrap; background-color: #FFFFFF;">登錄到云服務器控制臺——點擊服務器實例id名稱(以藍顏色字母 i 開頭)——到實例詳情界面——安全組——點擊安全組id(藍顏色以 sg 開頭)</span></p><p><span style="font-family: PingFangSC-Regular; white-space: pre-wrap; background-color: #FFFFFF;"></span><a href="https://ecs.console.aliyun.com/server/region/cn-heyuan" target="_blank" style="box-sizing: border-box; background-color: rgb(255, 255, 255); text-decoration-line: none; color: rgb(0, 126, 253); cursor: pointer; transition: opacity 0.2s ease-in-out 0s; font-family: PingFangSC-Regular; white-space: pre-wrap;">https://ecs.console.aliyun.com/server/region/cn-heyuan</a></p><p><a href="https://ecs.console.aliyun.com/server/region/cn-heyuan" target="_blank" style="box-sizing: border-box; background-color: rgb(255, 255, 255); text-decoration-line: none; color: rgb(0, 126, 253); cursor: pointer; transition: opacity 0.2s ease-in-out 0s; font-family: PingFangSC-Regular; white-space: pre-wrap;"><img src="http://www.7811333.com/zb_users/upload/2024/04/202404201713617455317360.png" alt="image.png"/></a></p><p><a href="https://ecs.console.aliyun.com/server/region/cn-heyuan" target="_blank" style="box-sizing: border-box; background-color: rgb(255, 255, 255); text-decoration-line: none; color: rgb(0, 126, 253); cursor: pointer; transition: opacity 0.2s ease-in-out 0s; font-family: PingFangSC-Regular; white-space: pre-wrap;"></a></p><p><a href="https://ecs.console.aliyun.com/server/region/cn-heyuan" target="_blank" style="box-sizing: border-box; background-color: rgb(255, 255, 255); text-decoration-line: none; color: rgb(0, 126, 253); cursor: pointer; transition: opacity 0.2s ease-in-out 0s; font-family: PingFangSC-Regular; white-space: pre-wrap;"></a></p><p>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;手動添加一條規(guī)則</p><p><br/></p><h2>&nbsp; 3,以上步驟操作后,即可遠程連接mysql啦,希望可以幫助到你!</h2>Sat, 20 Apr 2024 20:44:05 +0800npm安裝時報錯,出現(xiàn) certificate has expiredhttp://www.7811333.com/?id=531<p><span style="text-wrap: nowrap;">最近使用npm安裝工具屢屢報錯,大致顯示為:<span style="text-wrap: nowrap; color: #FF0000;">npm ERR! request to https://registry.npm.taobao.org/cnpm failed, reason: certificate has expired.</span></span></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">從報錯信息就可以知道是因為你之前設置的淘寶鏡像已過期,解決方法就是要把之前設置的淘寶鏡像改成新的:</span></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">第一步:清空緩存</span></p><pre class="prism-highlight prism-language-bash">npm&nbsp;cache&nbsp;clean&nbsp;--force</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">第二步:重新設置新的鏡像源</span></p><pre class="prism-highlight prism-language-bash">npm&nbsp;config&nbsp;set&nbsp;registry&nbsp;https://registry.npmmirror.com</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><span style="text-wrap: nowrap;"><br/></span></p><p><span style="text-wrap: nowrap;">第三步:使用npm安裝工具,沒有再報錯了</span></p><pre class="prism-highlight prism-language-bash">npm&nbsp;install&nbsp;XX</pre><p><span style="text-wrap: nowrap;"></span><br/></p>Sat, 13 Apr 2024 11:25:03 +0800php nginx實現(xiàn)文件下載http://www.7811333.com/?id=530<h2><strong style="font-size: 24px; text-wrap: wrap;">配置nginx</strong></h2><pre class="prism-highlight prism-language-php">server&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name&nbsp;&nbsp;demo.com;&nbsp;&nbsp;#你的域名 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root&nbsp;&nbsp;&nbsp;&quot;D:/wwwroot/demo&quot;;&nbsp;&nbsp;#&nbsp;你的項目路徑 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;下載文件關鍵配置 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location&nbsp;/download/&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;internal; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alias&nbsp;G:/files/;&nbsp;&nbsp;#&nbsp;&nbsp;文件的路徑 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendfile&nbsp;on;&nbsp;&nbsp;&nbsp;#&nbsp;開啟高效文件傳輸模式 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoindex&nbsp;on;&nbsp;&nbsp;#&nbsp;開啟目錄文件列表 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoindex_exact_size&nbsp;on;&nbsp;&nbsp;#&nbsp;顯示出文件的確切大小,單位是bytes &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;autoindex_localtime&nbsp;on;&nbsp;&nbsp;#&nbsp;顯示的文件時間為文件的服務器時間 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;charset&nbsp;utf-8,gbk;&nbsp;&nbsp;#&nbsp;避免中文亂碼 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;... }</pre><p><br/></p><h2>PHP代碼實現(xiàn)邏輯</h2><p>以下代碼會下載&nbsp; <strong>G:/files/demo.rar</strong>&nbsp; 文件,請確保文件存在</p><pre class="prism-highlight prism-language-php">&lt;?php&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$origin_name&nbsp;=&nbsp;&#39;demo.rar&#39;; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;啟用&nbsp;nginx&nbsp;X-Accel&nbsp;下載 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;Content-Type:&nbsp;application/octet-stream&#39;); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$encoded_fname&nbsp;=&nbsp;rawurlencode($origin_name); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;Content-Disposition:&nbsp;attachment;filename=&quot;&#39;.$encoded_fname.&#39;&quot;;filename*=utf-8&#39;.&quot;&#39;&#39;&quot;.$encoded_fname); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;X-Accel-Redirect:&nbsp;&#39;.&nbsp;&#39;/download/&#39;.&nbsp;$origin_name); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header(&#39;X-Accel-Buffering:&nbsp;yes&#39;); &gt;</pre><p><br/></p>Sun, 07 Apr 2024 11:08:27 +0800mysql查詢名稱重復的數(shù)據(jù)http://www.7811333.com/?id=529<p>查詢所有重復數(shù)據(jù):</p><pre class="prism-highlight prism-language-sql">SELECT&nbsp;*&nbsp;FROM&nbsp;your_table_name WHERE&nbsp;your_name&nbsp;IN&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;your_name &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;your_table_name &nbsp;&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;your_name &nbsp;&nbsp;&nbsp;&nbsp;HAVING&nbsp;COUNT(*)&nbsp;&gt;&nbsp;1 );</pre><p><br/></p><p>查詢重復項,只保留第一條:</p><pre class="prism-highlight prism-language-sql">SELECT&nbsp;DISTINCT&nbsp;your_name FROM&nbsp;your_table_name WHERE&nbsp;your_name&nbsp;IN&nbsp;( &nbsp;&nbsp;&nbsp;&nbsp;SELECT&nbsp;your_name &nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;your_table_name &nbsp;&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;your_name &nbsp;&nbsp;&nbsp;&nbsp;HAVING&nbsp;COUNT(*)&nbsp;&gt;&nbsp;1 );</pre><p><br/></p><p>查詢列表中所有 name 去重數(shù)據(jù):</p><pre class="prism-highlight prism-language-sql">SELECT&nbsp;your_name,&nbsp;MIN(id)&nbsp;as&nbsp;id &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FROM&nbsp;your_table_name &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GROUP&nbsp;BY&nbsp;your_name;</pre><p><br/></p>Thu, 04 Apr 2024 09:14:13 +0800Mysql 開啟外網訪問http://www.7811333.com/?id=528<pre class="prism-highlight prism-language-bash">mysql&nbsp;-u&nbsp;root&nbsp;-p</pre><p><br/></p><pre class="prism-highlight prism-language-bash">use&nbsp;mysql;</pre><p><span style="text-wrap: nowrap;"><br/></span></p><pre class="prism-highlight prism-language-bash">select&nbsp;user,host&nbsp;from&nbsp;user;</pre><p><span style="text-wrap: nowrap;"><br/></span></p><pre class="prism-highlight prism-language-bash">GRANT&nbsp;ALL&nbsp;PRIVILEGES&nbsp;ON&nbsp;*.*&nbsp;TO&nbsp;&#39;root&#39;@&#39;%&#39;&nbsp;IDENTIFIED&nbsp;BY&nbsp;&#39;mypass&#39;&nbsp;WITH&nbsp;GRANT&nbsp;OPTION;</pre><p><br/></p><pre class="prism-highlight prism-language-bash">flush&nbsp;privileges;</pre><p><span style="text-wrap: nowrap;"></span><br/></p>Thu, 04 Apr 2024 00:20:15 +0800nodejs 文件操作類的封裝http://www.7811333.com/?id=527<p>最近做node項目,操作文件特別不方便,于是封裝了工具類挺好用的,分享給大家</p><p></p><pre class="prism-highlight prism-language-javascript"> const&nbsp;fs&nbsp;=&nbsp;require(&#39;fs&#39;) const&nbsp;path&nbsp;=&nbsp;require(&#39;path&#39;) /** &nbsp;*&nbsp;文件/目錄操作封裝工具 &nbsp;*/ class&nbsp;File&nbsp;{ constructor(fs,&nbsp;path)&nbsp;{ this.fs&nbsp;=&nbsp;fs this.path&nbsp;=&nbsp;path } /** &nbsp;*&nbsp;重命名文件/目錄:可移動文件/目錄到指定位置,如果是目錄也包含其子文件 &nbsp;*/ rename(filePath,&nbsp;newFilePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.rename(filePath,&nbsp;newFilePath,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;獲取該目錄的體積大小 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir&nbsp;目錄路徑 &nbsp;*/ async&nbsp;getDirSize(dir)&nbsp;{ let&nbsp;size&nbsp;=&nbsp;0 const&nbsp;info&nbsp;=&nbsp;await&nbsp;this.stat(dir) //如果是文件 if&nbsp;(info.isFile())&nbsp;{ size&nbsp;+=&nbsp;info.size }&nbsp;else&nbsp;{ //如果是目錄 //獲取目錄下的文件 const&nbsp;files&nbsp;=&nbsp;await&nbsp;this.readdir(dir) for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;files.length;&nbsp;i++)&nbsp;{ size&nbsp;+=&nbsp;await&nbsp;this.getDirSize(this.path.join(dir,&nbsp;files[i])) } } return&nbsp;size } /** &nbsp;*&nbsp;讀取文件內容 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*/ readFile(filePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.readFile(filePath,&nbsp;&#39;utf8&#39;,&nbsp;(err,&nbsp;data)&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve(data) } }) }) } /** &nbsp;*&nbsp;寫入文本內容:覆蓋原內容 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;text&nbsp;寫入的文本內容 &nbsp;*/ writeFile(filePath,&nbsp;text)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.writeFile(filePath,&nbsp;text,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;文件寫入內容:追加 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;text&nbsp;寫入的文本內容 &nbsp;*/ appendFile(filePath,&nbsp;text)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.appendFile(filePath,&nbsp;text,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;拷貝文件 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;copyFilePath&nbsp;復制后的文件路徑 &nbsp;*/ copyFile(filePath,&nbsp;copyFilePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.copyFile(filePath,&nbsp;copyFilePath,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;打開文件 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;mode&nbsp;模式:r(讀取模式,r+(讀寫模式),w(寫入模式,如果文件不存在則創(chuàng)建),w+(讀寫模式,如果文件不存在則創(chuàng)建),wx(寫入模式,如果文件不存在則返回失敗),wx+(讀寫模式,如果文件不存在則返回失敗),a(追加模式,如果文件不存在則創(chuàng)建),a+(讀取追加模式,如果文件不存在則創(chuàng)建),ax(追加模式,如果文件不存在則返回失敗),ax+(讀取追加模式,如果文件不存在則返回失敗) &nbsp;*/ openFile(filePath,&nbsp;mode)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.open(filePath,&nbsp;mode,&nbsp;(err,&nbsp;fd)&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve(fd) } }) }) } /** &nbsp;*&nbsp;關閉文件 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;fd&nbsp;打開文件時返回的文件標識符 &nbsp;*/ closeFile(fd)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.close(fd,&nbsp;(fd,&nbsp;err)&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;查看文件或者目錄的操作權限,可讀寫返回true,否則返回false,文件不存在也返回false &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*/ access(filePath)&nbsp;{ return&nbsp;new&nbsp;Promise(resolve&nbsp;=&gt;&nbsp;{ this.fs.access(filePath,&nbsp;this.fs.constants.R_OK&nbsp;|&nbsp;this.fs.constants.W_OK,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ resolve(false)&nbsp;//不可訪問 }&nbsp;else&nbsp;{ resolve(true)&nbsp;//可讀寫 } }) }) } /** &nbsp;*&nbsp;獲取文件/目錄信息 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件或者目錄路徑 &nbsp;*/ stat(filePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.stat(filePath,&nbsp;(err,&nbsp;obj)&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve(obj) } }) }) } /** &nbsp;*&nbsp;判斷文件/目錄是否存在 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件或者目錄路徑 &nbsp;*/ exist(filePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.exists(filePath,&nbsp;exist&nbsp;=&gt;&nbsp;{ if&nbsp;(exist)&nbsp;{ resolve(true) }&nbsp;else&nbsp;{ resolve(false) } }) }) } /** &nbsp;*&nbsp;創(chuàng)建目錄 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir&nbsp;目錄路徑 &nbsp;*/ mkdir(dir)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.mkdir(dir,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;遞歸創(chuàng)建目錄 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir&nbsp;目錄路徑 &nbsp;*/ mkdirs(dir)&nbsp;{ return&nbsp;new&nbsp;Promise(async&nbsp;(resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.exist(dir).then(exist&nbsp;=&gt;&nbsp;{ if&nbsp;(exist)&nbsp;{ //如果目錄存在 resolve() }&nbsp;else&nbsp;{ //目錄不存在 this.mkdirs(this.path.dirname(dir)) .then(()&nbsp;=&gt;&nbsp;{ return&nbsp;this.mkdir(dir) }) .then(()&nbsp;=&gt;&nbsp;{ resolve() }) .catch(err&nbsp;=&gt;&nbsp;{ reject(err) }) } }) }) } /** &nbsp;*&nbsp;讀取目錄下的所有文件列表 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir&nbsp;目錄路徑 &nbsp;*/ readdir(dir)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.readdir(dir,&nbsp;(err,&nbsp;data)&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve(data) } }) }) } /** &nbsp;*&nbsp;刪除目錄:只能刪除空目錄 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir&nbsp;目錄路徑 &nbsp;*/ rmdir(dir)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.rmdir(dir,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } /** &nbsp;*&nbsp;遞歸刪除目錄:直接刪除目錄下的所有文件 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;dir &nbsp;*/ async&nbsp;rmdirs(dir)&nbsp;{ const&nbsp;files&nbsp;=&nbsp;await&nbsp;this.readdir(dir) if&nbsp;(files.length&nbsp;==&nbsp;0)&nbsp;{ await&nbsp;this.rmdir(dir) }&nbsp;else&nbsp;{ for&nbsp;(let&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;files.length;&nbsp;i++)&nbsp;{ const&nbsp;info&nbsp;=&nbsp;await&nbsp;this.stat(dir&nbsp;+&nbsp;this.path.sep&nbsp;+&nbsp;files[i]) if&nbsp;(info.isDirectory())&nbsp;{ await&nbsp;this.rmdirs(dir&nbsp;+&nbsp;this.path.sep&nbsp;+&nbsp;files[i]) }&nbsp;else&nbsp;{ await&nbsp;this.rmFile(dir&nbsp;+&nbsp;this.path.sep&nbsp;+&nbsp;files[i]) } } this.rmdirs(dir) } } /** &nbsp;*&nbsp;刪除文件 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*/ rmFile(filePath)&nbsp;{ return&nbsp;new&nbsp;Promise((resolve,&nbsp;reject)&nbsp;=&gt;&nbsp;{ this.fs.unlink(filePath,&nbsp;err&nbsp;=&gt;&nbsp;{ if&nbsp;(err)&nbsp;{ reject(err) }&nbsp;else&nbsp;{ resolve() } }) }) } &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;*&nbsp;獲取文件后綴名 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;getExt(filePath)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;path.extname(filePath).toLowerCase().slice(1);&nbsp;//&nbsp;去除前面的點號 &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;*&nbsp;獲取文件不含后綴名 &nbsp;*&nbsp;@param&nbsp;{Object}&nbsp;filePath&nbsp;文件路徑 &nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;getName(filePath)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;path.parse(filePath).name; &nbsp;&nbsp;&nbsp;&nbsp;} } module.exports&nbsp;=&nbsp;new&nbsp;File(fs,&nbsp;path)</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p>使用方法:</p><p><span style="text-wrap: nowrap;"></span></p><pre class="prism-highlight prism-language-javascript">(async&nbsp;function&nbsp;()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;const&nbsp;file&nbsp;=&nbsp;require(&#39;file.js&#39;)&nbsp;&nbsp;//&nbsp;引入后直接使用 &nbsp;&nbsp;&nbsp;&nbsp;await&nbsp;file.rename(&#39;test.txt&#39;,&nbsp;&#39;text1.txt&#39;) })()</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><br/></p>Wed, 03 Apr 2024 15:11:52 +0800php實現(xiàn)微信公眾號掃碼登錄http://www.7811333.com/?id=526<h1><span style="font-size: 20px;"><strong>服務器配置</strong></span></h1><p><span style="font-size: 14px;">登錄微信公眾平臺,左側點開設置與開發(fā) -&gt; 基本設置,如圖所示:</span></p><p><span style="font-size: 14px;"><img src="http://www.7811333.com/zb_users/upload/2024/03/202403311711895981350147.png" alt="image.png" width="215" height="256" style="width: 215px; height: 256px;"/></span></p><p><span style="font-size: 14px;">設置好按照指示設置好配置,服務端代碼如下:</span></p><p><span style="font-size: 14px;"></span></p><p><span style="text-wrap: nowrap;"></span></p><pre class="prism-highlight prism-language-php">&lt;?php //&nbsp;微信token認證 $signature&nbsp;=&nbsp;$_GET[&quot;signature&quot;]; $timestamp&nbsp;=&nbsp;$_GET[&quot;timestamp&quot;]; $nonce&nbsp;=&nbsp;$_GET[&quot;nonce&quot;]; $echostr&nbsp;=&nbsp;$_GET[&quot;echostr&quot;]; //&nbsp;你在微信公眾號后臺的設置的Token $token&nbsp;=&nbsp;&quot;yourtoken&quot;;//&nbsp;1)將token、timestamp、nonce三個參數(shù)進行字典序排序 $tmpArr&nbsp;=&nbsp;array($nonce,&nbsp;$token,&nbsp;$timestamp); sort($tmpArr,&nbsp;SORT_STRING);//&nbsp;2)將三個參數(shù)字符串拼接成一個字符串進行sha1加密 $str&nbsp;=&nbsp;implode($tmpArr); $sign&nbsp;=&nbsp;sha1($str);//&nbsp;3)開發(fā)者獲得加密后的字符串可與signature對比,標識該請求來源于微信 if&nbsp;($sign&nbsp;==&nbsp;$signature)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;$echostr; }</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><span style="font-size: 14px;">token必須和微信公眾號配置中保持一致,點擊“提交”按鈕,看是否成功</span></p><p><span style="font-size: 14px;"><br/></span></p><h1><strong><span style="font-size: 14px;"><span style="color: #4D4D4D; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;"></span></span></strong></h1><h1><strong><span style="font-size: 14px;"><span style="color: #4D4D4D; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;"></span></span></strong>生成微信登錄二維碼</h1><p><span style="font-size: 14px;"><span style="color: #4D4D4D; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;">1. 先獲取access_token</span></span><strong><span style="font-size: 14px;"><span style="color: #4D4D4D; font-family: -apple-system, &quot;SF UI Text&quot;, Arial, &quot;PingFang SC&quot;, &quot;Hiragino Sans GB&quot;, &quot;Microsoft YaHei&quot;, &quot;WenQuanYi Micro Hei&quot;, sans-serif; font-size: 16px; font-variant-ligatures: no-common-ligatures; text-wrap: wrap; background-color: #FFFFFF;"><br/></span></span></strong></p><p><span style="color:#4d4d4d;font-family:-apple-system, SF UI Text, Arial, PingFang SC, Hiragino Sans GB, Microsoft YaHei, WenQuanYi Micro Hei, sans-serif"><span style="font-size: 16px; font-variant-ligatures: no-common-ligatures; background-color: #FFFFFF;">地址:</span></span><a href="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}" _src="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={APPSECRET}">https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&amp;appid={APPID}&amp;secret={APPSECRET}</a> </p><p>其中 APPID 和 APPSECRET 分別是在微信開放平臺創(chuàng)建應用后獲取的應用 ID 和應用密鑰。將該 URL 地址進行 url encode,然后發(fā)送 GET 請求即可獲取 access_token。</p><p><br/></p><p>2. 獲取登錄二維碼的 ticket</p><p>使用上傳圖片素材接口(media/upload)獲取二維碼 Ticket ,該接口的請求 URL 地址為:</p><p><strong>POST&nbsp;</strong> &nbsp;<a href="https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image" _src="https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=image">https://api.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&amp;type=image</a> </p><p><br/></p><p>3.&nbsp;將獲取到的 Ticket 通過以下 URL 地址生成登錄二維碼:</p><p><a href="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET" _src="https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET">https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET</a></p><p>其中 TICKET 是在上一步取到的 Ticket。將以上 URL 地址拼接起來,即可生成二維碼,二維碼有效期為 5 分鐘。需要注意二維碼中必須攜帶正確的參數(shù),以保證登錄成功。</p>Sun, 31 Mar 2024 22:33:13 +0800php es 報錯 No alive nodes. All the 1 nodes seem to be downhttp://www.7811333.com/?id=525<p><span style="text-wrap: nowrap;">php連接es時報錯No alive nodes. All the 1 nodes seem to be down,原因是Elasticsearch開啟了安全認證,查看服務器端響應信息為:</span></p><p><br/></p><pre class="prism-highlight prism-language-actionscript">received&nbsp;plaintext&nbsp;http&nbsp;traffic&nbsp;on&nbsp;an&nbsp;https&nbsp;channel,&nbsp;closing&nbsp;connection&nbsp;Netty4HttpCha</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><span style="text-wrap: nowrap;">我是通過docker安裝的es,修改es啟動命令為:</span></p><p><br/></p><p><span style="text-wrap: nowrap;"></span></p><pre class="prism-highlight prism-language-actionscript">docker&nbsp;run&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ -d&nbsp;&nbsp;&nbsp;\ --name&nbsp;es01&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\ -e&nbsp;&quot;discovery.type=single-node&quot;&nbsp;\ -e&nbsp;&quot;xpack.security.enabled=false&quot;&nbsp;\ --net&nbsp;elastic&nbsp;-p&nbsp;9200:9200&nbsp;&nbsp;\ -it&nbsp;&nbsp;\ docker.elastic.co/elasticsearch/elasticsearch:8.12.2</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><span style="text-wrap: nowrap;">成功解決問題</span></p><p><br/></p>Fri, 29 Mar 2024 09:58:47 +0800php字符串壓縮工具http://www.7811333.com/?id=524<p><span style="text-wrap: nowrap;">判斷字符串是否需要壓縮,然后再進行壓縮,需要優(yōu)化的地方很多,比如把壓縮結果保存起來,避免執(zhí)行2次,判斷是依賴于壓縮的結果大小和原始字符串的大小來判斷的,懶得處理了。代碼如下</span></p><p><br/></p><p><span style="text-wrap: nowrap;"></span></p><pre class="prism-highlight prism-language-php">/** &nbsp;*&nbsp;字符串壓縮工具 &nbsp;*/ class&nbsp;CompressStrUtil { &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;是否需要壓縮 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;$str &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;bool &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;need($str):&nbsp;bool &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$oldLen&nbsp;=&nbsp;strlen($str); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$newLen&nbsp;=&nbsp;strlen(self::enCompress($str)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;$newLen&nbsp;&lt;&nbsp;$oldLen; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;壓縮字符串 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;$str &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;false|string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;enCompress($str) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;gzcompress($str,&nbsp;9); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;/** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;還原字符串 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@param&nbsp;$str &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*&nbsp;@return&nbsp;false|string &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*/ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;function&nbsp;deCompress($str) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;gzuncompress($str); &nbsp;&nbsp;&nbsp;&nbsp;} }</pre><p><span style="text-wrap: nowrap;"></span><br/></p><p><br/></p>Fri, 29 Mar 2024 09:57:26 +0800 主站蜘蛛池模板: 99久久婷婷国产综合亚洲| 婷婷丁香五月天综合东京热| 亚洲综合另类小说色区| 综合国产在线观看无码| 亚洲伊人久久综合影院| 亚洲综合激情另类小说区| 亚洲a无码综合a国产av中文| 一本久道久久综合中文字幕| 亚洲av伊人久久综合密臀性色| 亚洲国产综合精品中文第一| 婷婷五月六月激情综合色中文字幕 | 久久综合久久久久88| 丁香五月网久久综合| 亚洲综合一区二区三区四区五区| 亚洲国产一成久久精品国产成人综合 | 伊人久久综合谁合综合久久| 国产精品综合AV一区二区国产馆| 国产综合无码一区二区三区| 色天天综合色天天看| 亚洲日本国产综合高清| 五月丁香综合激情六月久久| 国产福利电影一区二区三区久久久久成人精品综合 | 天天影视色香欲性综合网网站| 国产精品激情综合久久| 亚洲国产精品综合久久网络 | 色噜噜久久综合伊人一本| 亚洲综合区图片小说区| 久久93精品国产91久久综合| 国产成人综合在线视频 | 综合91在线精品| 国产综合无码一区二区色蜜蜜| 亚洲综合一区国产精品| 狠狠做深爱婷婷久久综合一区| AV狠狠色丁香婷婷综合久久| 天天综合天天综合| 狠狠综合久久久久综合网| 亚洲综合久久夜AV | 伊人婷婷色香五月综合缴激情| 婷婷四房综合激情五月在线| 91精品国产色综合久久不| 久久婷婷五月综合色精品|