<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>碼蟻創研工坊 &#8211; CODEANT STUDIOS</title>
	<atom:link href="http://codeant.cc/feed" rel="self" type="application/rss+xml" />
	<link>http://codeant.cc/</link>
	<description></description>
	<lastBuildDate>Thu, 17 Apr 2025 13:58:50 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.2</generator>

<image>
	<url>http://codeant.cc/wp-content/uploads/2020/10/cropped-Code-Ant-Logo-2-32x32.png</url>
	<title>碼蟻創研工坊 &#8211; CODEANT STUDIOS</title>
	<link>http://codeant.cc/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Apache Log 智能封鎖腳本：自動擷取異常存取與黑名單管理（含 ipset 實作）</title>
		<link>http://codeant.cc/archives/286</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Thu, 17 Apr 2025 13:31:49 +0000</pubDate>
				<category><![CDATA[Netowrk]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=286</guid>

					<description><![CDATA[<p>Category: 技術手記 Tags: apache, access.log, error.log, 自動封 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/286">Apache Log 智能封鎖腳本：自動擷取異常存取與黑名單管理（含 ipset 實作）</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>Category: 技術手記 Tags: apache, access.log, error.log, 自動封鎖, ipset, Linux 防火牆, fail2ban 替代</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f575.png" alt="🕵" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 背景說明</h2>



<p>在大量來自海外的機器人、爬蟲與攻擊流量中，我發現除了 TCP SYN Flood 之外，Apache 的 access.log 與 error.log 裡也有大量異常存取行為，例如：</p>



<ul class="wp-block-list">
<li>不存在的網址（404）</li>



<li>權限拒絕（403）</li>



<li>掃描漏洞（例如嘗試連到 <code>/wp-login.php</code>, <code>/phpmyadmin</code> 等）</li>
</ul>



<p>這些都是潛在攻擊前兆，因此我撰寫一份腳本，定期分析 Apache 的 log 檔，自動封鎖惡意 IP。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 腳本偵測規則</h2>



<p>支援以下條件：</p>



<ul class="wp-block-list">
<li>來自 access.log 或 error.log</li>



<li>出現大量 403 或 404 回應（可自訂次數門檻）</li>



<li>僅掃描 .log 結尾的檔案，跳過 .log.1 或 .gz 歷史檔</li>



<li><strong>可選擇性分析過去 N 分鐘內的 log 記錄</strong>（例如搭配 <code>date</code> + <code>awk</code> 過濾）</li>
</ul>



<p>例如：</p>



<pre class="wp-block-code"><code>grep -hE ' 403 | 404 ' /var/log/apache2/*access.log \
  | awk -v since="$(date --date='5 minutes ago' '+%d/%b/%Y:%H:%M')" \
         '$4 &gt; "&#91;"since' {print $1}'</code></pre>



<p>此方法可限制分析最近 5 分鐘內的異常行為，避免封鎖過時的 IP。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 腳本實作邏輯：apache-ban-ip.sh</h2>



<pre class="wp-block-code"><code>#!/bin/bash

export PATH=/usr/sbin:/usr/bin:/bin:/sbin
LOG_DIR=/var/log/apache2
IPSET_NAME="blacklist"
THRESHOLD=50
IPSET_TIMEOUT=3600
WHITELIST=("127.0.0.1" "你的管理員IP")

# 初始化 ipset
ipset list $IPSET_NAME &gt;/dev/null 2&gt;&amp;1 || ipset create $IPSET_NAME hash:ip timeout $IPSET_TIMEOUT

is_whitelisted() {
  for wip in "${WHITELIST&#91;@]}"; do
    &#91;&#91; "$1" == "$wip" ]] &amp;&amp; return 0
  done
  return 1
}

# 計算最近 5 分鐘的時間戳格式（Apache log 格式）
SINCE=$(date --date='5 minutes ago' '+%d/%b/%Y:%H:%M')

# 擷取最近 5 分鐘內 access.log 中 403, 404 的來源 IP（僅限 .log 結尾）
grep -hE ' 403 | 404 ' $LOG_DIR/*access.log \
  | awk -v since="$SINCE" '$4 &gt; "&#91;"since {print $1}' \
  | sort | uniq -c | sort -nr \
  | awk -v thr=$THRESHOLD '$1 &gt; thr {print $2}' \
  | while read ip; do
    if is_whitelisted "$ip"; then
      echo "&#91;略過] $ip 為白名單"
      continue
    fi
    echo "&#91;封鎖] $ip 超過異常門檻，加入黑名單"
    ipset add $IPSET_NAME $ip timeout $IPSET_TIMEOUT 2&gt;/dev/null
  done</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/23f0.png" alt="⏰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 建議排程（每 5 分鐘一次）</h2>



<pre class="wp-block-code"><code>sudo crontab -e</code></pre>



<p>加入：</p>



<pre class="wp-block-code"><code>*/5 * * * * /usr/local/bin/apache-ban-ip.sh &gt;&gt; /var/log/apache-ban.log 2&gt;&amp;1</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f4cc.png" alt="📌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 補充設定（若未設）</h2>



<p>請確保你已有正確的 iptables drop 規則：</p>



<pre class="wp-block-code"><code>sudo iptables -I INPUT -m set --match-set blacklist src -j DROP</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f4ca.png" alt="📊" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 後續可進階方向</h2>



<ul class="wp-block-list">
<li>加入封鎖 IP 通知（LINE Notify / Email）</li>



<li>將每次封鎖記錄存入 SQLite / JSON Log</li>



<li>做出白名單 / 灰名單 / 封鎖名單 dashboard</li>



<li>用 fail2ban 整合也可以，但此腳本更輕量彈性</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 結語</h2>



<p>這支腳本已幫助我自動防禦數千次非法掃描與惡意請求，等同為 Apache 建立了應用層 WAF 界限。</p>



<p>若你正在經營 WordPress、WooCommerce、或自架 API Gateway，這個腳本將成為你最值得信任的守門員。</p>



<p>開源、自由擴充，安全你自己定義。</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>Reality Breaker — 拒絕被動，用邏輯穿透風暴。</p>
</blockquote>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&amp;linkname=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F286&#038;title=Apache%20Log%20%E6%99%BA%E8%83%BD%E5%B0%81%E9%8E%96%E8%85%B3%E6%9C%AC%EF%BC%9A%E8%87%AA%E5%8B%95%E6%93%B7%E5%8F%96%E7%95%B0%E5%B8%B8%E5%AD%98%E5%8F%96%E8%88%87%E9%BB%91%E5%90%8D%E5%96%AE%E7%AE%A1%E7%90%86%EF%BC%88%E5%90%AB%20ipset%20%E5%AF%A6%E4%BD%9C%EF%BC%89" data-a2a-url="http://codeant.cc/archives/286" data-a2a-title="Apache Log 智能封鎖腳本：自動擷取異常存取與黑名單管理（含 ipset 實作）"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/286">Apache Log 智能封鎖腳本：自動擷取異常存取與黑名單管理（含 ipset 實作）</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>🛡 黑盾守門員：我如何打造一套自動反制 SYN Flood 的伺服器防火牆系統（含腳本更新）</title>
		<link>http://codeant.cc/archives/284</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Thu, 17 Apr 2025 11:37:26 +0000</pubDate>
				<category><![CDATA[Netowrk]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=284</guid>

					<description><![CDATA[<p>本篇介紹一套我親自實作、已成功抵擋上千次攻擊的 自動封鎖系統腳本，專門對付 TCP SYN Flood 攻擊。 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/284">🛡 黑盾守門員：我如何打造一套自動反制 SYN Flood 的伺服器防火牆系統（含腳本更新）</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p>本篇介紹一套我親自實作、已成功抵擋上千次攻擊的 <strong>自動封鎖系統腳本</strong>，專門對付 TCP SYN Flood 攻擊。適用於 Linux + Apache + ipset 環境，完全開源，輕巧高效，歡迎自由使用與改造！</p>
</blockquote>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f525.png" alt="🔥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 問題起點：SYN Flood 攻擊讓我 HTTPS 掛點</h2>



<p>某天，我的伺服器連線數飆升，Apache 回應延遲，<code>ss -tanp | grep "SYN-RECV"</code> 看到數百條類似這樣的紀錄：</p>



<pre class="wp-block-preformatted"><code>SYN-RECV   0 0 [::ffff:10.140.0.3]:443 [::ffff:179.107.51.201]:37425<br></code></pre>



<p>這表示 TCP 三次握手被卡住，對方故意不回 ACK，讓伺服器卡在 <code>SYN_RECV</code> 狀態，進而癱瘓。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f9e0.png" alt="🧠" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 我的想法：伺服器需要一個「黑盾守門員」</h2>



<p>我需要一個 <strong>自動偵測＋即時反制</strong> 的防火牆腳本，來對抗這種 TCP 層的資源消耗型攻擊。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 黑盾守門員的核心邏輯：</h2>



<ol class="wp-block-list">
<li>每分鐘掃描 <code>ss -tanp | grep SYN-RECV</code> 中的連線</li>



<li>解析來源 IP（含 <code>::ffff:x.x.x.x</code> 格式）</li>



<li>每個 IP 若連線數 > 門檻（例如 10），就用 <code>ipset</code> 封鎖</li>



<li>封鎖一段時間（如一小時），之後自動解除</li>



<li>可設定白名單，避免誤殺管理者或內網</li>
</ol>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/270d.png" alt="✍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 最新修正版腳本（支援 IPv6 包裝格式）</h2>



<p>請將下列內容儲存為 <code>/usr/local/bin/synflood-defender.sh</code>：</p>



<pre class="wp-block-preformatted">#!/bin/bash<br><br>IPSET_NAME="blacklist"<br>IPSET_TIMEOUT=3600<br>SYN_THRESHOLD=10<br>WHITELIST=("127.0.0.1" "你的管理員IP")<br><br># 建立 ipset（若尚未存在）<br>ipset list $IPSET_NAME >/dev/null 2>&amp;1 || ipset create $IPSET_NAME hash:ip timeout $IPSET_TIMEOUT<br><br># 判斷是否白名單<br>is_whitelisted() {<br>  for white_ip in "${WHITELIST[@]}"; do<br>    [[ "$1" == "$white_ip" ]] &amp;&amp; return 0<br>  done<br>  return 1<br>}<br><br># 掃描 SYN_RECV 並解析 IP<br>ss -tanp | grep "SYN-RECV" \<br>| awk '{print $5}' \<br>| grep -oP '(?&lt;=::ffff:)(\d{1,3}(\.\d{1,3}){3})' \<br>| sort | uniq -c \<br>| awk -v thr=$SYN_THRESHOLD '$1 >= thr {print $2}' \<code><br>| while read ip; do<br>  if is_whitelisted "$ip"; then<br>    echo "[略過] 白名單 IP：$ip"<br>    continue<br>  fi<br>  echo "[封鎖] $ip 達到 SYN_RECV 門檻，封鎖中..."<br>  ipset add $IPSET_NAME "$ip" timeout $IPSET_TIMEOUT 2>/dev/null<br>done<br><br># 輸出目前封鎖總數<br>COUNT=$(ipset list $IPSET_NAME | grep -c 'add ')<br>echo "[done] 當前 SYN 封鎖 IP 數：$COUNT"<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/23f0.png" alt="⏰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 自動化建議（每分鐘執行）</h2>



<p>請加入 crontab：</p>



<pre class="wp-block-preformatted"><code>sudo crontab -e<br></code></pre>



<p>加入以下內容：</p>



<pre class="wp-block-preformatted"><code>* * * * * /usr/local/bin/synflood-defender.sh >> /var/log/synflood.log 2>&amp;1<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 搭配 iptables DROP 設定（只要設定一次）</h2>



<pre class="wp-block-preformatted"><code>sudo iptables -I INPUT -m set --match-set blacklist src -j DROP<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f9ea.png" alt="🧪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 附加工具：查看 SYN 攻擊 IP 排行榜</h2>



<pre class="wp-block-preformatted"><code>ss -tanp | grep "SYN-RECV" \<br>| awk '{print $5}' \<br>| sed -E 's/.*::ffff:([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+):.*/\1/' \<br>| sort | uniq -c | sort -nr | head<br></code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f9f0.png" alt="🧰" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 總結與延伸</h2>



<p>這套「黑盾守門員」方案，結合了：</p>



<ul class="wp-block-list">
<li>Linux 原生網路工具（ss + ipset + iptables）</li>



<li>自動化執行（cron）</li>



<li>白名單控管</li>



<li>對 SYN Flood 針對性防禦</li>
</ul>



<p>適用於 VPS、自架伺服器，或任何可能暴露在公網的 Apache/Nginx 主機上。</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/15.0.3/72x72/1f4ec.png" alt="📬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 最後附註</h2>



<p>歡迎轉載或自行改寫本腳本，若你也有實戰經驗與更強化的技巧，歡迎留言交流！如果你覺得「黑盾守門員」有幫助，也歡迎分享給更多站長朋友！</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&amp;linkname=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F284&#038;title=%F0%9F%9B%A1%20%E9%BB%91%E7%9B%BE%E5%AE%88%E9%96%80%E5%93%A1%EF%BC%9A%E6%88%91%E5%A6%82%E4%BD%95%E6%89%93%E9%80%A0%E4%B8%80%E5%A5%97%E8%87%AA%E5%8B%95%E5%8F%8D%E5%88%B6%20SYN%20Flood%20%E7%9A%84%E4%BC%BA%E6%9C%8D%E5%99%A8%E9%98%B2%E7%81%AB%E7%89%86%E7%B3%BB%E7%B5%B1%EF%BC%88%E5%90%AB%E8%85%B3%E6%9C%AC%E6%9B%B4%E6%96%B0%EF%BC%89" data-a2a-url="http://codeant.cc/archives/284" data-a2a-title="&#x1f6e1; 黑盾守門員：我如何打造一套自動反制 SYN Flood 的伺服器防火牆系統（含腳本更新）"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/284">🛡 黑盾守門員：我如何打造一套自動反制 SYN Flood 的伺服器防火牆系統（含腳本更新）</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>簡單試玩 PHP 8.0 RC3 及 JIT 效能測試</title>
		<link>http://codeant.cc/archives/271</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Sat, 31 Oct 2020 04:55:08 +0000</pubDate>
				<category><![CDATA[未分類]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=271</guid>

					<description><![CDATA[<p>Step 1. 下載 PHP 8.0 RC3 Step 2. 安裝相關套件 Step 3. 進行編譯 Step [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/271">簡單試玩 PHP 8.0 RC3 及 JIT 效能測試</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>Step 1. 下載 PHP 8.0 RC3</p>



<pre class="wp-block-code"><code>wget https://downloads.php.net/~carusogabriel/php-8.0.0RC3.tar.bz2
tar xf php-8.0.0RC3.tar.bz2
cd php-8.0.0RC3</code></pre>



<p>Step 2. 安裝相關套件</p>



<span id="more-271"></span>



<pre class="wp-block-code"><code>sudo apt install libxml2-dev libsqlite3-dev libpng-dev libonig-dev libmariadb-dev libcurl4-openssl-dev libjpeg-dev libxslt-dev</code></pre>



<p>Step 3. 進行編譯</p>



<pre class="wp-block-code"><code>./configure --enable-opcache --enable-opcache-jit --enable-fpm --enable-cli --enable-bcmath --enable-cgi --enable-gd --enable-intl --enable-mbstring --enable-soap --enable-xml --with-mysql-sock=/var/run/mysqld/mysqld.sock --with-fpm-user=www-data --with-fpm-group=www-data --with-curl --with-imap-ssl --with-sqlite3 --with-zlib --with-xsl --with-openssl --with-jpeg --enable-exif --with-mysqli
make -j$(nproc)
make test
./sapi/cli/php -v</code></pre>



<pre class="wp-block-code"><code>PHP 8.0.0RC3 (cli) (built: Oct 31 2020 12:35:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies</code></pre>



<p>Step 4. 編輯 php.ini 啟動 Opcache JIT</p>



<pre class="wp-block-code"><code>vim php.ini-development
# 新增下面內容
zend_extension=/REAL_PATH/php-8.0.0RC3/modules/opcache.so
&#91;opcache]
opcache.enable=1
opcache.enable_cli=1
opcache.jit=1255
opcache.jit_buffer_size=64M
opcache.memory_consumption=128
opcache.max_accelerated_files=10000</code></pre>



<p>Step 5. 再次執行</p>



<pre class="wp-block-code"><code>./sapi/cli/php -c ./php.ini-development -v</code></pre>



<pre class="wp-block-code"><code>PHP 8.0.0RC3 (cli) (built: Oct 31 2020 12:35:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.0-dev, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.0RC3, Copyright (c), by Zend Technologies</code></pre>



<p>Step 簡單效能比較</p>



<p>已本身手上有一支每日固定排程，自動產生報表的 PHP 程式來坐比較，需要分析的數據目前約148萬筆資料，會進行簡單的數學運算，不需要連接資料庫，在這種條件下：</p>



<pre class="wp-block-code"><code>PHP 7.4.12 需要 4.448 秒
PHP 8.0.RC3(無 JIT) 需要 4.292 秒
PHP 8.0.RC3(有 JIT) 需要 4.083 秒</code></pre>



<p>就這樣的結果來看，PHP 8 是值得期待的，但是不像 PHP 5 到 PHP 7 那樣子實現了大跨度的效能增進。</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&amp;linkname=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F271&#038;title=%E7%B0%A1%E5%96%AE%E8%A9%A6%E7%8E%A9%20PHP%208.0%20RC3%20%E5%8F%8A%20JIT%20%E6%95%88%E8%83%BD%E6%B8%AC%E8%A9%A6" data-a2a-url="http://codeant.cc/archives/271" data-a2a-title="簡單試玩 PHP 8.0 RC3 及 JIT 效能測試"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/271">簡單試玩 PHP 8.0 RC3 及 JIT 效能測試</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>直接關閉 WordPress 的文章迴響功能</title>
		<link>http://codeant.cc/archives/262</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Sun, 11 Oct 2020 04:31:43 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=262</guid>

					<description><![CDATA[<p>關閉文章迴響功能最直接有效的方式，就是直接修改 wp-content/themes/ 下的程式碼，直接禁用 c [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/262">直接關閉 WordPress 的文章迴響功能</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>關閉文章迴響功能最直接有效的方式，就是直接修改 wp-content/themes/ 下的程式碼，直接禁用 comments_template()，很粗暴很有效。</p>



<p>雖然可以在系統或是文章去做個別的設定，但我還是喜歡這種方式。</p>



<p>Step 1: 找出 comments_template()</p>



<pre class="wp-block-code"><code>grep comments_template *</code></pre>



<p>Step 2: 註解相關頁面的程式碼</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="701" height="137" src="http://codeant.cc/wp-content/uploads/2020/10/wordpress_dis_comments.png" alt="" class="wp-image-263" srcset="http://codeant.cc/wp-content/uploads/2020/10/wordpress_dis_comments.png 701w, http://codeant.cc/wp-content/uploads/2020/10/wordpress_dis_comments-300x59.png 300w" sizes="(max-width: 701px) 100vw, 701px" /></figure>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&amp;linkname=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F262&#038;title=%E7%9B%B4%E6%8E%A5%E9%97%9C%E9%96%89%20WordPress%20%E7%9A%84%E6%96%87%E7%AB%A0%E8%BF%B4%E9%9F%BF%E5%8A%9F%E8%83%BD" data-a2a-url="http://codeant.cc/archives/262" data-a2a-title="直接關閉 WordPress 的文章迴響功能"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/262">直接關閉 WordPress 的文章迴響功能</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>修正 PHP 7.4 無法使用 mcrypt_decrypt() 的問題</title>
		<link>http://codeant.cc/archives/259</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Sun, 11 Oct 2020 04:18:13 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=259</guid>

					<description><![CDATA[<p>這個問題其實在 PHP 7.2 就已經發生了，所以 PHP 7.4 也無法避免的會遇到，原因是： 必須安裝額外 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/259">修正 PHP 7.4 無法使用 mcrypt_decrypt() 的問題</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>這個問題其實在 PHP 7.2 就已經發生了，所以 PHP 7.4 也無法避免的會遇到，原因是：</p>



<figure class="wp-block-image size-large"><img decoding="async" width="846" height="223" src="http://codeant.cc/wp-content/uploads/2020/10/php_74_mcrypt.png" alt="" class="wp-image-266" srcset="http://codeant.cc/wp-content/uploads/2020/10/php_74_mcrypt.png 846w, http://codeant.cc/wp-content/uploads/2020/10/php_74_mcrypt-300x79.png 300w, http://codeant.cc/wp-content/uploads/2020/10/php_74_mcrypt-768x202.png 768w" sizes="(max-width: 846px) 100vw, 846px" /></figure>



<p>必須安裝額外的套件才能提供，步驟如下：</p>



<span id="more-259"></span>



<p>Step 1: 安裝函式庫</p>



<pre class="wp-block-code"><code>sudo apt-get install libmcrypt-dev php7.4-dev
sudo pecl install mcrypt-1.0.3</code></pre>



<p>Step 2: 修改 php.ini 啟用功能，增加1行設定如下：</p>



<pre class="wp-block-code"><code>extension=mcrypt.so</code></pre>



<p>Step 3: 重啟 PHP 載入新設定</p>



<pre class="wp-block-code"><code>sudo service php7.4-fpm restart</code></pre>



<p>Step 4: 使用 phpinfo() 確認 mcrypt 已啟用</p>



<figure class="wp-block-image size-large"><img decoding="async" width="950" height="302" src="http://codeant.cc/wp-content/uploads/2020/10/php7.4-mcrypt.png" alt="" class="wp-image-260" srcset="http://codeant.cc/wp-content/uploads/2020/10/php7.4-mcrypt.png 950w, http://codeant.cc/wp-content/uploads/2020/10/php7.4-mcrypt-300x95.png 300w, http://codeant.cc/wp-content/uploads/2020/10/php7.4-mcrypt-768x244.png 768w" sizes="(max-width: 950px) 100vw, 950px" /></figure>



<p></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&amp;linkname=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F259&#038;title=%E4%BF%AE%E6%AD%A3%20PHP%207.4%20%E7%84%A1%E6%B3%95%E4%BD%BF%E7%94%A8%20mcrypt_decrypt%28%29%20%E7%9A%84%E5%95%8F%E9%A1%8C" data-a2a-url="http://codeant.cc/archives/259" data-a2a-title="修正 PHP 7.4 無法使用 mcrypt_decrypt() 的問題"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/259">修正 PHP 7.4 無法使用 mcrypt_decrypt() 的問題</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ubuntu 16.04 安裝 PHP 7.4</title>
		<link>http://codeant.cc/archives/257</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Sun, 11 Oct 2020 03:58:26 +0000</pubDate>
				<category><![CDATA[Linux]]></category>
		<guid isPermaLink="false">http://codeant.cc/?p=257</guid>

					<description><![CDATA[<p>原本 Ubuntu 16.04 預設的 PHP 版本為 7.0.x，無發自動更新到 PHP 7.4.x，有點可 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/257">Ubuntu 16.04 安裝 PHP 7.4</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>原本 Ubuntu 16.04 預設的 PHP 版本為 7.0.x，無發自動更新到 PHP 7.4.x，有點可惜，畢竟 PHP 7.4 有著更好的效能。</p>



<p>下面簡單紀錄一下整個升級安裝的過程：</p>



<span id="more-257"></span>



<p>Step 1: 新增 PHP PPA Repository</p>



<pre class="wp-block-code"><code>sudo apt-get update
sudo apt install software-properties-common
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update</code></pre>



<p>Step 2: 安裝 PHP 7.4</p>



<pre class="wp-block-code"><code>sudo apt install php7.4
sudo apt install php7.4-common php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4-cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-opcache php7.4-soap php7.4-zip php7.4-intl php7.4-bcmath php7.4-bz2 php7.4-fpm</code></pre>



<p>Step 3: 檢查 PHP 版本</p>



<pre class="wp-block-code"><code>php -v</code></pre>



<pre class="wp-block-code"><code>~$ php -v
PHP 7.4.11 (cli) (built: Oct  6 2020 10:35:19) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.11, Copyright (c), by Zend Technologies</code></pre>



<p>Step 4: 啟用 PHP 7.4 FPM 模組</p>



<pre class="wp-block-code"><code>sudo a2disconf php7.0-fpm
sudo a2enconf php7.4-fpm
sudo service apache2 stop
sudo a2dismod mpm_prefork php7.4 
sudo a2enmod mpm_event
sudo service php7.4-fpm restart
sudo service apache2 restart</code></pre>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&amp;linkname=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F257&#038;title=Ubuntu%2016.04%20%E5%AE%89%E8%A3%9D%20PHP%207.4" data-a2a-url="http://codeant.cc/archives/257" data-a2a-title="Ubuntu 16.04 安裝 PHP 7.4"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/257">Ubuntu 16.04 安裝 PHP 7.4</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>用CPU採礦的時代已經過去了！</title>
		<link>http://codeant.cc/archives/190</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Thu, 02 Feb 2017 19:34:00 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://codeant.cc/2017/02/03/bitcoin-cpuminer/</guid>

					<description><![CDATA[<p>過年期間總是會見到平日難得聚首的親戚們，這是幸福的，席間忽然被年輕一輩問到關於用比特幣賺錢的問題，這個我是幾年 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/190">用CPU採礦的時代已經過去了！</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="font-size: 16px; line-height: 26px;">過年期間總是會見到平日難得聚首的親戚們，這是幸福的，席間忽然被年輕一輩問到關於用比特幣賺錢的問題，這個我是幾年前有注意過採礦賺錢的可能性，但是從來沒有投入過，今日再度研究一下，真的時不我予了，5年前可能用GPU採礦還能賺到錢，現在幾乎很難了，Bitcoin的採礦也已經進入規模化的時代，如果還想著要用個人的CPU或是GPU去採礦，應該連電費都賺不到了。</p>
<p style="font-size: 16px; line-height: 26px;">下面是在Linux系統上安裝CPU Miner程式的步驟：</p>
<p><span id="more-190"></span></p>
<p style="font-size: 16px; line-height: 26px;">介紹網頁：</p>
<pre class="prettyprint" style="font-family: 'Courier New',Courier,'gMuli'; font-size: 14px;">https://en.bitcoin.it/wiki/Cpu_Miner</pre>
<p style="font-size: 16px; line-height: 26px;">執行檔下載：</p>
<pre class="prettyprint" style="font-family: 'Courier New',Courier,'gMuli'; font-size: 14px;">Sourceforge: 	
https://sourceforge.net/projects/cpuminer/ 	
tar xf pooler-cpuminer-2.4.5-linux-x86_64.tar.gz</pre>
<p style="font-size: 16px; line-height: 26px;">取得 Source Code：</p>
<pre class="prettyprint" style="font-family: 'Courier New',Courier,'gMuli'; font-size: 14px;">Git Hub: 	
https://github.com/pooler/cpuminer 	
git clone https://github.com/pooler/cpuminer.git</pre>
<p style="font-size: 16px; line-height: 26px;">編譯過程：</p>
<pre class="prettyprint" style="font-family: 'Courier New',Courier,'gMuli'; font-size: 14px;">Build: 	
sudo apt-get install libcurl4-openssl-dev 	
cd cpuminer 	
./autogen.sh 	
./configure 	
make 	
./minerd --help 	
./minerd --benchmark</pre>
<p style="font-size: 16px; line-height: 26px;">測試結果：</p>
<pre class="prettyprint" style="font-family: 'Courier New',Courier,'gMuli'; font-size: 14px;">[2017-02-02 11:41:34] Binding thread 0 to cpu 0 
[2017-02-02 11:41:34] 4 miner threads started, using 'scrypt' algorithm. 
[2017-02-02 11:41:34] Binding thread 2 to cpu 2 
[2017-02-02 11:41:34] Binding thread 3 to cpu 3 
[2017-02-02 11:41:34] Binding thread 1 to cpu 1 
[2017-02-02 11:41:34] thread 1: 4104 hashes, 18.99 khash/s 
[2017-02-02 11:41:34] thread 3: 4104 hashes, 18.77 khash/s 
[2017-02-02 11:41:34] thread 0: 4104 hashes, 18.69 khash/s 
[2017-02-02 11:41:34] thread 2: 4104 hashes, 18.63 khash/s 
[2017-02-02 11:41:39] thread 2: 93144 hashes, 19.29 khash/s 
[2017-02-02 11:41:39] thread 1: 94944 hashes, 19.43 khash/s 
[2017-02-02 11:41:39] thread 0: 93456 hashes, 19.09 khash/s 
[2017-02-02 11:41:39] thread 3: 93864 hashes, 19.15 khash/s 
[2017-02-02 11:41:39] Total: 76.95 khash/s</pre>
<p style="font-size: 16px; line-height: 26px;">問題就是出在上面的 76.95 khash/s，以 Intel i5 CPU 這種一般家用等級的運算效能，根本上不了檯面，至少我是放棄了，興趣的可以繼續參考下面的網頁資料。</p>
<p style="font-size: 16px; line-height: 26px;"><a href="https://litecoin.info/Mining_hardware_comparison">https://litecoin.info/Mining_hardware_comparison</a></p>
<p style="font-size: 16px; line-height: 26px;"><a href="https://btcserv.net/bitcoin-mining-calculator">https://btcserv.net/bitcoin-mining-calculator</a></p>
<p style="font-size: 16px; line-height: 26px;">計算出的結果，一年都賺不到一塊。</p>
<p><img loading="lazy" decoding="async" class=" size-full wp-image-189" style="display: block; margin-left: auto; margin-right: auto;" src="http://codeant.cc/wp-content/uploads/2017/02/images_Screenshot_from_2017-02-03_114736.png" alt="Screenshot from 2017 02 03 114736" width="769" height="335" srcset="http://codeant.cc/wp-content/uploads/2017/02/images_Screenshot_from_2017-02-03_114736.png 769w, http://codeant.cc/wp-content/uploads/2017/02/images_Screenshot_from_2017-02-03_114736-300x131.png 300w" sizes="auto, (max-width: 769px) 100vw, 769px" /></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&amp;linkname=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F190&#038;title=%E7%94%A8CPU%E6%8E%A1%E7%A4%A6%E7%9A%84%E6%99%82%E4%BB%A3%E5%B7%B2%E7%B6%93%E9%81%8E%E5%8E%BB%E4%BA%86%EF%BC%81" data-a2a-url="http://codeant.cc/archives/190" data-a2a-title="用CPU採礦的時代已經過去了！"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/190">用CPU採礦的時代已經過去了！</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>「密技」如何用 WordPress+虛擬主機，打造一個單日30萬PV的網站？</title>
		<link>http://codeant.cc/archives/187</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Thu, 19 Jan 2017 00:56:06 +0000</pubDate>
				<category><![CDATA[Netowrk]]></category>
		<guid isPermaLink="false">http://codeant.cc/2017/01/19/300000pv-using-wordpress-and-shared-web-hosting/</guid>

					<description><![CDATA[<p>取得了客戶同意，今天在這裡要來分享一下單日可承受30萬PV的網站，背後的軟硬體規格，而且這個客戶到目前為止都還 [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/187">「密技」如何用 WordPress+虛擬主機，打造一個單日30萬PV的網站？</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="font-size: 16px; line-height: 26px;">取得了客戶同意，今天在這裡要來分享一下單日可承受30萬PV的網站，背後的軟硬體規格，而且這個客戶到目前為止都還是使用虛擬主機去建置他的網站，Wordpress 已經是目前最受歡迎的 CMS 系統，這點不用懷疑，這真的是一套非常容易上手的系統，第三方資源也是最豐富的，而一般剛開始經營個人網站的新手，最常使用的就是虛擬主機(<span style="color: #545454; font-family: arial, sans-serif; font-size: small;">Shared Web Hosting)</span>，費用低廉，系統管理也不需要煩惱，技術活相對少很多，可以更專注在網站的經營上，但是效能不佳，一直也是最讓人抱怨的一點。</p>
<p style="font-size: 16px; line-height: 26px;">那麼一個單日30萬PV，而且還是使用虛擬主機建成的網站，有可能嗎？當然有，下面就來完整揭露所有配置。</p>
<p>  <span id="more-187"></span>  </p>
<p style="font-size: 16px; line-height: 26px;">這個客戶選擇的虛擬主機服務商是： GoDaddy（先聲明，這絕對不是業配文），其實客戶要選擇什麼主機商，我一向是沒意見，因為付錢的是大爺，當初這位客戶是直接選擇了&#8221;豪華型的套餐&#8221;，然後他又升級成 2 CPU + 1 GB RAM，Total 加起來，虛擬主機這邊的費用，一年聽說約 3000-NT而已，有用 GoDaddy 的就知道這個規格並不是&#8221;一拜&#8221;的等級。</p>
<p style="font-size: 16px; line-height: 26px;">所使用的 WordPress 目前是更新到 4.6 的版本了，沒有去改動任何的 Code，是原廠的，下面這幾張管理後台的配置圖，就是為何可以承受單日30萬PV的關鍵了，魔鬼就藏在細節裡：</p>
<p><img loading="lazy" decoding="async" class=" size-full wp-image-183" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140238.png" alt="Screenshot from 2017 01 18 140238" width="1147" height="600" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140238.png 1147w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140238-300x157.png 300w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140238-1024x536.png 1024w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140238-768x402.png 768w" sizes="auto, (max-width: 1147px) 100vw, 1147px" /></p>
<p><img loading="lazy" decoding="async" class=" size-full wp-image-184" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140327.png" alt="Screenshot from 2017 01 18 140327" width="1142" height="350" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140327.png 1142w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140327-300x92.png 300w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140327-1024x314.png 1024w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140327-768x235.png 768w" sizes="auto, (max-width: 1142px) 100vw, 1142px" /></p>
<p><img loading="lazy" decoding="async" class=" size-full wp-image-185" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140648.png" alt="Screenshot from 2017 01 18 140648" width="480" height="625" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140648.png 480w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140648-230x300.png 230w" sizes="auto, (max-width: 480px) 100vw, 480px" /></p>
<p>&nbsp;</p>
<p style="font-size: 16px; line-height: 26px;">其實故事說到這邊就說完了，下面都是題外話了。事實證明，使用虛擬主機+Wordpress就可以打造出可承受單日30萬PV的網站系統，但最困難的是，要如何才能吸引到單日30萬PV啊？網站技術跟網站經營真的是兩碼子的事。</p>
<p><img loading="lazy" decoding="async" class=" size-full wp-image-186" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140059.png" alt="Screenshot from 2017 01 18 140059" width="1003" height="310" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140059.png 1003w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140059-300x93.png 300w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-18_140059-768x237.png 768w" sizes="auto, (max-width: 1003px) 100vw, 1003px" />&nbsp;</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&amp;linkname=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F187&#038;title=%E3%80%8C%E5%AF%86%E6%8A%80%E3%80%8D%E5%A6%82%E4%BD%95%E7%94%A8%20WordPress%2B%E8%99%9B%E6%93%AC%E4%B8%BB%E6%A9%9F%EF%BC%8C%E6%89%93%E9%80%A0%E4%B8%80%E5%80%8B%E5%96%AE%E6%97%A530%E8%90%ACPV%E7%9A%84%E7%B6%B2%E7%AB%99%EF%BC%9F" data-a2a-url="http://codeant.cc/archives/187" data-a2a-title="「密技」如何用 WordPress+虛擬主機，打造一個單日30萬PV的網站？"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/187">「密技」如何用 WordPress+虛擬主機，打造一個單日30萬PV的網站？</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>談談網頁內容如何實現中文繁簡體的自動轉換</title>
		<link>http://codeant.cc/archives/182</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Wed, 18 Jan 2017 19:40:47 +0000</pubDate>
				<category><![CDATA[Blog]]></category>
		<guid isPermaLink="false">http://codeant.cc/2017/01/19/web-zh-cn-tw-trans/</guid>

					<description><![CDATA[<p>要讓網頁內容達到中文繁簡體的自動轉換，最簡單的方式就是用字表轉換，所以你要先收集繁體跟簡體的差異字，然後用 L [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/182">談談網頁內容如何實現中文繁簡體的自動轉換</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="font-size: 16px; line-height: 26px;">要讓網頁內容達到中文繁簡體的自動轉換，最簡單的方式就是用字表轉換，所以你要先收集繁體跟簡體的差異字，然後用 Lookup Table 的方式去做轉換即可，那麼中文繁簡體的差異字到底有多少個字呢？我自己收集到的部份一共有3060個字，我不是什麼語言研究的專家，所以這個數字不是學術等級的精準，但是仰賴數十位大陸朋友的真人實測，他們一致認為透過這3060個字表轉換後的文章內容，在閱讀上實用性已經很高了。</p>
<p><span id="more-182"></span></p>
<p style="font-size: 16px; line-height: 26px;">如果要求還要再更高，那就進入語意分析的領域了，很抱歉，我沒有那個水準去談語意分析。什麼是語意分析？例如說台灣說&#8221;當機&#8221;等於大陸說&#8221;死機&#8221;，台灣說&#8221;送出&#8221;等於大陸說&#8221;提交&#8221;&#8230;等等這一類就屬於語意分析的範圍，這個難度高很多，也會耗費更多計算資源，但是就像前面說的，透過簡單的字表轉換，其實已經達到實用的等級，實作上跟程式的運行效率都有不錯的CP值。</p>
<p style="font-size: 16px; line-height: 26px;">實作上，繁體轉簡體是容易的，而且效果也比較好，因為很多繁體字經過簡化後，會對應到同一個簡體字，也因為這個特性，簡轉繁難度高上許多，單純的字表轉換會出現語意不同的情況，不像繁轉簡，文章語意幾乎都是通順的，舉例來說：</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-180" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-19_121057.png" alt="Screenshot from 2017 01 19 121057" width="199" height="30" /></p>
<p style="font-size: 16px; line-height: 26px;">在進行簡體轉繁體的時候，你要選哪一個？所以簡轉繁要做的好，幾乎都要考慮語意分析！</p>
<p style="font-size: 16px; line-height: 26px;">還有就是繁體常用字等於部份簡體字的問題，舉例來說：</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-181" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-19_121114.png" alt="Screenshot from 2017 01 19 121114" width="361" height="55" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-19_121114.png 361w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-19_121114-300x46.png 300w" sizes="auto, (max-width: 361px) 100vw, 361px" /></p>
<p style="font-size: 16px; line-height: 26px;">前面說了一大堆，到底要如何去達到網頁的自動繁簡互轉呢？我個人是用判斷HTTP_ACCEPT_LANGUAGE的方式為主，再加上判斷HTTP_USER_AGENT為輔，這樣可以達到大部分來自中國大陸的訪問者，都是看到簡體網頁的內容，這其中當然也包含百度搜尋引擎的蜘蛛，PHP的程式碼如下：</p>
<pre class="prettyprint" style="font-family: 'Courier New', Courier,'gMuli'; font-size: 14px;">$trans = FALSE;  

if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {         
    $lang  = explode("," , $_SERVER['HTTP_ACCEPT_LANGUAGE']);          

    if (($lang[0] == 'zh-cn') || ($lang[0] == 'zh-CN')) {
        $trans = TRUE;         
    } 
} 

if (!$trans &amp;&amp; !empty($_SERVER['HTTP_USER_AGENT']) &amp;&amp; 
    strstr($_SERVER['HTTP_USER_AGENT'], "Baidu")) 
{         
    $trans = TRUE; 
} // From TW -&gt; CN 

if ($trans) {         
    require_once '/include/TWtoCN.php';         
    $app = ant_zhtw2cn($app); 
}</pre>
<p style="font-size: 16px; line-height: 26px;">上面這一段 Code ，我大概使用快十年了，如果你是一個以繁體中文為主的網站，同時也想對使用簡體中文的朋友們做到 User Friendly ，這樣就已經很足夠了，當然有部份人士的個性是屬於多毛症的，那就滿足不了。</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&amp;linkname=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F182&#038;title=%E8%AB%87%E8%AB%87%E7%B6%B2%E9%A0%81%E5%85%A7%E5%AE%B9%E5%A6%82%E4%BD%95%E5%AF%A6%E7%8F%BE%E4%B8%AD%E6%96%87%E7%B9%81%E7%B0%A1%E9%AB%94%E7%9A%84%E8%87%AA%E5%8B%95%E8%BD%89%E6%8F%9B" data-a2a-url="http://codeant.cc/archives/182" data-a2a-title="談談網頁內容如何實現中文繁簡體的自動轉換"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/182">談談網頁內容如何實現中文繁簡體的自動轉換</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Joomla 啟用 reCAPTCHA 圖形驗證的設定流程</title>
		<link>http://codeant.cc/archives/179</link>
		
		<dc:creator><![CDATA[codeant]]></dc:creator>
		<pubDate>Mon, 16 Jan 2017 23:05:11 +0000</pubDate>
				<category><![CDATA[Netowrk]]></category>
		<guid isPermaLink="false">http://codeant.cc/2017/01/17/joomla-recaptcha/</guid>

					<description><![CDATA[<p>要在 Joomla 裡頭啟用 reCAPTCHA 圖形驗證，你要先去產生一組金鑰，產生金鑰的網址如下： sig [&#8230;]</p>
<p>這篇文章 <a href="http://codeant.cc/archives/179">Joomla 啟用 reCAPTCHA 圖形驗證的設定流程</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></description>
										<content:encoded><![CDATA[<p style="font-size: 16px; line-height: 26px;">要在 Joomla 裡頭啟用 reCAPTCHA 圖形驗證，你要先去產生一組金鑰，產生金鑰的網址如下：</p>
<p>  <span id="more-179"></span>  </p>
<p style="font-size: 16px; line-height: 26px;"><a href="http://www.google.com/recaptcha/admin">sign up for an API key pair</a>&nbsp;:&nbsp;<a href="https://www.google.com/recaptcha/admin">https://www.google.com/recaptcha/admin</a></p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-174" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143320.png" alt="Screenshot from 2017 01 17 143320" style="display: block; margin-left: auto; margin-right: auto;" width="518" height="634" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143320.png 518w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143320-245x300.png 245w" sizes="auto, (max-width: 518px) 100vw, 518px" /></p>
<p style="font-size: 16px; line-height: 26px;">然後到 Joomla 的後台管理頁面，啟用圖形驗證功能：</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-175" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142606.png" alt="Screenshot from 2017 01 17 142606" style="display: block; margin-left: auto; margin-right: auto;" width="627" height="431" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142606.png 627w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142606-300x206.png 300w" sizes="auto, (max-width: 627px) 100vw, 627px" /></p>
<p style="font-size: 16px; line-height: 26px;">到外掛中填入剛剛取得的網站金鑰：</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-176" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142856.png" alt="Screenshot from 2017 01 17 142856" style="display: block; margin-left: auto; margin-right: auto;" width="463" height="333" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142856.png 463w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_142856-300x216.png 300w" sizes="auto, (max-width: 463px) 100vw, 463px" /></p>
<p style="font-size: 16px; line-height: 26px;">記得要選 2.0 版本</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-177" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143022.png" alt="Screenshot from 2017 01 17 143022" style="display: block; margin-left: auto; margin-right: auto;" width="437" height="426" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143022.png 437w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143022-300x292.png 300w" sizes="auto, (max-width: 437px) 100vw, 437px" /></p>
<p style="font-size: 16px; line-height: 26px;">下面就是設定成功後的畫面：</p>
<p style="font-size: 16px;"><img loading="lazy" decoding="async" class=" size-full wp-image-178" src="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143458.png" alt="Screenshot from 2017 01 17 143458" style="display: block; margin-left: auto; margin-right: auto;" width="410" height="143" srcset="http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143458.png 410w, http://codeant.cc/wp-content/uploads/2017/01/images_Screenshot_from_2017-01-17_143458-300x105.png 300w" sizes="auto, (max-width: 410px) 100vw, 410px" /></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_line" href="https://www.addtoany.com/add_to/line?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="Line" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_wechat" href="https://www.addtoany.com/add_to/wechat?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="WeChat" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_sina_weibo" href="https://www.addtoany.com/add_to/sina_weibo?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="Sina Weibo" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_qzone" href="https://www.addtoany.com/add_to/qzone?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="Qzone" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_linkedin" href="https://www.addtoany.com/add_to/linkedin?linkurl=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&amp;linkname=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" title="LinkedIn" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=http%3A%2F%2Fcodeant.cc%2Farchives%2F179&#038;title=Joomla%20%E5%95%9F%E7%94%A8%20reCAPTCHA%20%E5%9C%96%E5%BD%A2%E9%A9%97%E8%AD%89%E7%9A%84%E8%A8%AD%E5%AE%9A%E6%B5%81%E7%A8%8B" data-a2a-url="http://codeant.cc/archives/179" data-a2a-title="Joomla 啟用 reCAPTCHA 圖形驗證的設定流程"></a></p><p>這篇文章 <a href="http://codeant.cc/archives/179">Joomla 啟用 reCAPTCHA 圖形驗證的設定流程</a> 最早出現於 <a href="http://codeant.cc">碼蟻創研工坊 - CODEANT STUDIOS</a>。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
