關於網路那些事...

Marketing, SEO, Web trends, Programming tutorial, Web design, and Life event...

Swoole 與傳統 PHP-FPM 差異

在swoole 官方介紹到運作原理時,就有針對 swoole 運作方式與 PHP-FPM 的差異進行比較

傳統 PHP-FPM 是基於 PHP Server 來解析

而 Swoole 則是用 C 所編譯的 PHP 擴充,可以直接透過 CLI mode 與 server 溝通

這一點差異就讓 swoole 能做到傳統 php model 無法達成的事情

讓 PHP 開發者可寫出高效能、可拓展的程式

並且可以直接設計 no-blocking I/O 程式,以及與底層 linux kernel 溝通

其中包括幾點:

  • swoole 可以充分運用 CPU 核心資源,用來分配 worker 任務
  • swoole 可以直接支援 websocker server 與 TCP/UDP server 長連結
  • 可以直接與多種 server-side 協定進行溝通
  • 可以直接管理及重複使用 memory 中的狀態

Continue Reading

閒聊 FastCGI 與 PHP-FPM

閒聊 FastCGI 與 PHP-FPM

在這裡記錄一下 FastCGI 與 PHP-FPM 的關係

關於 FastCGI

FastCGI 是一個協定,從字面上其實就能看到 Fast + CGI,意思就是加速CGI

CGI 是一個協定,在webserver接收到請求時,會跟請求內容進行對應處理,再返回對應文件給瀏覽器

Continue Reading

netstat 指令小記

在 Linux 建構服務時,通常遇到問題除了查詢log 之外,大多數還會確認連線是否正常,port是否有打通之類

Linux 命令列的 netstat 可以查詢到各種網路相關訊息

當我們要檢測 socket、TCP、UDP、IP、ethernet等各種連線,都可以用它來查詢

支援一般權限,以及 IPv4, IPv6

這裡筆記方式記錄一些用法

搭配 watch 監控現有連線

watch -d -n0 "netstat | grep ESTABLISHED"

以下可能是 CentOS的環境使用:

列出完整的 URL 位址

netstat -tup -W

這個指令可以將所有連線的 IP 位址列出來,並依照每個 IP 位址的連線數排序

netstat -an | grep ESTABLISHED | awk '/^tcp/ {print $5}' | awk -F: '{print $1}' | sort | uniq -c | sort -nr

用 awk 分析連線 這個指令可以分析 Apache 的連線,列出每個 IP 位址的連線數

sudo netstat -anpt | grep http | grep ESTABLISHED | awk -F "[ :]*" '{print $4}' | uniq -c

這個指令可以將所有連線的 IP 位址列出來,並依照每個 IP 位址的連線數排序.

Continue Reading

11選5規則範例

11選5

### 三码

	#### [直选]
		- 前三直选复式
			从01-11共11个号码中选择3个不重复的号码组成一注,所选号码与当期顺序摇出的5个号码中的前3个号码相同,且顺序一致,即为中奖。
			(如:选择01,02,03,开奖号码顺序为01,02,03 * *,即为中奖。)
		- 前三直选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的前3个号码相同,且顺序一致,即为中奖。
			(如:手动输入01 02 03,开奖号码为是01 02 03 * *,即为中奖。)
		- 中三直选复式
			从01-11共11个号码中选择3个不重复的号码组成一注,所选号码与当期顺序摇出的5个号码中的千位,百位,十位3个号码相同,且顺序一致,即为中奖。
			(如:选择01,02,03,开奖号码顺序为* 01,02,03 *,即为中奖。)
		- 中三直选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的千位,百位,十位3个号码相同,且顺序一致,即为中奖。
			(如:手动输入01 02 03,开奖号码为是* 01 02 03 *,即为中奖。)
		- 后三直选复式
			从01-11共11个号码中选择3个不重复的号码组成一注,所选号码与当期顺序摇出的5个号码中的后3个号码相同,且顺序一致,即为中奖。
			(如:选择01,02,03,开奖号码顺序为* * 01,02,03即为中奖。)
		- 后三直选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的后3个号码相同,且顺序一致,即为中奖。
			(如:选择01,02,03,开奖号码顺序为* * 01,02,03即为中奖。)

	#### [组选]
		- 前三組选复式
			从01-11中共11个号码中选择3个号码,所选号码与当期顺序摇出的5个号码中的前3个号码相同,顺序不限,即为中奖。
			(如:选择01 02 03(展开为01 02 03 * *,01 03 02 * *,02 01 03 * *,02 03 01 * *,03 01 02 * *,03 02 01 * *),开奖号码为03 01 02 如:,即为中奖。)
		- 前三組选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的前3个号码相同,顺序不限,即为中奖。
			(如:手动输入01 02 03(展开为01 02 03 * *,01 03 02 * * , 02 01 03 * *,02 03 01 * *,03 01 02 * *,03 02 01 * *),开奖号码为01 03 02 * *,即为中奖。)
		- 中三組选复式
			从01-11中共11个号码中选择3个号码,所选号码与当期顺序摇出的5个号码中的千位,百位,十位3个号码相同,顺序不限,即为中奖。
			(如:选择01 02 03(展开为* 01 02 03 *,* 01 03 02 *,* 02 01 03 *,* 02 03 01 *,* 03 01 02 *,* 03 02 01 *),开奖号码为03 01 02 如:,即为中奖。)
		- 中三組选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的千位,百位,十位3个号码相同,顺序不限,即为中奖。
			(如:手动输入01 02 03(展开为* 01 02 03 *,* 01 03 02 *,* 02 01 03 *,* 02 03 01 *,* 03 01 02 *,* 03 02 01 *),开奖号码为03 01 02 如:,即为中奖。)
		- 后三組选复式
			从01-11中共11个号码中选择3个号码,所选号码与当期顺序摇出的5个号码中的后3个号码相同,顺序不限,即为中奖。
			(如:选择01 02 03(展开为* * 01 02 03,* * 01 03 02,* * 02 01 03,* * 02 03 01,* * 03 01 02,* * 03 02 01),开奖号码为03 01 02 如:,即为中奖。)
		- 后三組选单式
			手动输入3个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的后3个号码相同,顺序不限,即为中奖。
			(如:手动输入01 02 03(展开为* * 01 02 03,* * 01 03 02,* * 02 01 03,* * 02 03 01,* * 03 01 02,* * 03 02 01),开奖号码为03 01 02 如:,即为中奖。)

### 二码
	#### [直选]
		- 前二直选复式
			从01-11共11个号码中选择2个不重复的号码组成一注,所选号码与当期顺序摇出的5个号码中的前2个号码相同,且顺序一致,即中奖。
			(如:选择01 02,开奖号码 01 02 * * *,即为中奖。)
		- 前二直选单式
			手动输入2个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的前2个号码相同,且顺序一致,即为中奖。
			(如:手动输入 01 02,开奖号码为01 02 * * *,即为中奖。)
		- 后二直选复式
			从01-11共11个号码中选择2个不重复的号码组成一注,所选号码与当期顺序摇出的5个号码中的后2个号码相同,且顺序一致,即中奖。
			(如:选择01 02,开奖号码* * * 01 02,即为中奖。)
		- 后二直选单式
			手动输入2个号码组成一注,所输入的号码与当期顺序摇出的5个号码中的后2个号码相同,且顺序一致,即为中奖。
			(如:手动输入01 02,开奖号码* * * 01 02,即为中奖。)
	#### [组选]
		- 前二組选复式
			从01-11中共11个号码中选择2个号码,所选号码与当期顺序摇出的5个号码中的前2个号码相同,顺序不限,即为中奖。
			(如:选择01 02(展开为01 02 * * *,02 01 * * *),开奖号码为02 01 * * * 或 01 02 * * *,即为中奖。)
		- 前二組选胆拖
			分别从胆码和拖码的01-11中,至少选择1个胆码和1个拖码组成一注。当期顺序摇出的5个号码中的前2个号码中同时包含所选的1个胆码和1个拖码,顺序不限,即为中奖。
			(如:选择胆码 01,选择拖码 06,开奖号码为 06 01 * * *,即为中奖。)
		- 后二組选复式
			从01-11中共11个号码中选择2个号码,所选号码与当期顺序摇出的5个号码中的后2个号码相同,顺序不限,即为中奖。
			(如:选择01 02(展开为* * * 01 02,* * * 02 01),开奖号码为* * * 02 01或* * * 01 02,即为中奖。)
		- 后二組选胆拖
			分别从胆码和拖码的01-11中,至少选择1个胆码和1个拖码组成一注。当期顺序摇出的5个号码中的后2个号码中同时包含所选的1个胆码和1个拖码,顺序不限,即为中奖。
			(如:选择胆码 01,选择拖码 06,开奖号码为* * * 06 01,即为中奖。)

### 不定位
	#### [不定位]
		- 前三不定位
			从01-11中共11个号码中选择1个号码,每注由1个号码组成,只要当期顺序摇出的第一位、第二位、第三位开奖号码中包含所选号码,即为中奖。
			(如:选择01,开奖号码为01 * * * *,* 01 * * *,* * 01 * *,即为中奖。)
		- 中三不定位
			从01-11中共11个号码中选择1个号码,每注由1个号码组成,只要当期顺序摇出的第二位、第三位、第四位开奖号码中包含所选号码,即为中奖。
			(如:选择01,开奖号码为* 01 * * *,* * 01 * *,* * * 01 * ,即为中奖。)
		- 后三不定位
			从01-11中共11个号码中选择1个号码,每注由1个号码组成,只要当期顺序摇出的第三位、第四位、第五位开奖号码中包含所选号码,即为中奖。
			(如:选择01,开奖号码为* * 01 * *,* * * 01 * ,* * * * 01即为中奖。)
### 定位胆
	#### [定位胆]

		- 定位胆
			从第一位,第二位,第三位任意1个位置或多个位置上选择1个号码,所选号码与相同位置上的开奖号码一致,即为中奖。
			(如:万位上选择01,开奖号码为01 * * * *,即为中奖。)

### 任选
	#### [任选单式]
		- 一中一
			从01-11共11个号码中选择1个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05,开奖号码为08 04 11 05 03,即为中奖)
		- 二中二
			从01-11共11个号码中选择2个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04,开奖号码为08 04 11 05 03,即为中奖。)
		- 三中三
			从01-11共11个号码中选择3个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 11,开奖号码为08 04 11 05 03,即为中奖。)
		- 四中四
			从01-11共11个号码中选择4个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 08 03,开奖号码为08 04 11 05 03,即为中奖。)
		- 五中五
			从01-11共11个号码中选择5个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(从01-11共11个号码中选择5个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。)
		- 六中五
			从01-11共11个号码中选择6个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 10 04 11 03 08,开奖号码为08 04 11 05 03,即为中奖。)
		- 七中五
			从01-11共11个号码中选择7个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 10 11 03 08 09,开奖号码为08 04 11 05 03,即为中奖。)
		- 八中五
			从01-11共11个号码中选择8个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 11 03 08 10 09 01,开奖号码为08 04 11 05 03,即为中奖。)
	#### [任选复式]
		- 一中一
			从01-11共11个号码中选择1个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05,开奖号码为08 04 11 05 03,即为中奖)
		- 二中二
			从01-11共11个号码中选择2个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04,开奖号码为08 04 11 05 03,即为中奖。)
		- 三中三
			从01-11共11个号码中选择3个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 11,开奖号码为08 04 11 05 03,即为中奖。)
		- 四中四
			从01-11共11个号码中选择4个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 08 03,开奖号码为08 04 11 05 03,即为中奖。)
		- 五中五
			从01-11共11个号码中选择5个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(从01-11共11个号码中选择5个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。)
		- 六中五
			从01-11共11个号码中选择6个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 10 04 11 03 08,开奖号码为08 04 11 05 03,即为中奖。)
		- 七中五
			从01-11共11个号码中选择7个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 10 11 03 08 09,开奖号码为08 04 11 05 03,即为中奖。)
		- 八中五
			从01-11共11个号码中选择8个号码进行购买,只要当期顺序摇出的5个开奖号码中包含所选号码,即为中奖。
			(如:手动输入05 04 11 03 08 10 09 01,开奖号码为08 04 11 05 03,即为中奖。)
### 胆拖
	#### [胆拖]
		- 二中二
			分别从胆码和拖码的01-11中,至少选择1个胆码和1个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时包含所选的1个胆码和1个拖码,所选胆码必须全中,即为中奖。
			(如:选择胆码 08,选择拖码 06,开奖号码为 06 08 11 09 02,即为中奖。)
		- 三中三
			分别从胆码和拖码的01-11中,至少选择1个胆码和2个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时包含所选的1个胆码和2个拖码,所选胆码必须全中,即为中奖。
			(如:选择胆码 08,选择拖码 06 11,开奖号码为 06 08 11 09 02,即为中奖。)
		- 四中四
			分别从胆码和拖码的01-11中,至少选择1个胆码和3个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时包含所选的1个胆码和3个拖码,所选胆码必须全中,即为中奖。
			(如:选择胆码 08,选择拖码 06 09 11,开奖号码为 06 08 11 09 02,即为中奖。)
		- 五中五
			分别从胆码和拖码的01-11中,至少选择1个胆码和4个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时包含所选的1个胆码和4个拖码,所选胆码必须全中,即为中奖。
			(如:选择胆码 08,选择拖码 02 06 09 11,开奖号码为 06 08 11 09 02,即为中奖。)
		- 六中五
			分别从胆码和拖码的01-11中,至少选择1个胆码和5个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时存在于胆码和拖码的任意组合中,即为中奖。
			(如:选择胆码 08,选择拖码 01 02 05 06 09 11,开奖号码为 06 08 11 09 02,即为中奖。)
		- 七中五
			分别从胆码和拖码的01-11中,至少选择1个胆码和6个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时存在于胆码和拖码的任意组合中,即为中奖。
			(如:选择胆码 08,选择拖码 01 02 05 06 07 09 11,开奖号码为 06 08 11 09 02,即为中奖。)
		- 八中五
			分别从胆码和拖码的01-11中,至少选择1个胆码和7个拖码组成一注,只要当期顺序摇出的5个开奖号码中同时存在于胆码和拖码的任意组合中,即为中奖。
			(如:选择胆码 08,选择拖码 01 02 03 05 06 07 09 11,开奖号码为 06 08 11 09 02,即为中奖。)

Continue Reading

Laravel-S 查看 worker 進程(筆記)

在開發 laravels 需要確認目前 worker 執行狀況

查看 laravels worker 進程的方式如下:

ps -ef|grep laravels

Continue Reading

wrk - 輕巧 http benchmark 工具,處理簡易的HTTP 性能測試

wrk 是用C語言寫的一套http benchmark 工具

可以幫助我們處理簡易的HTTP 性能測試

Continue Reading

Laravel - Requests 說明及測試方法

Laravel - Requests 說明及測試方法

Laravel 的 requests 可以將請求所需要的驗證進行分離,在這裡主要談一談 Requests 的建立方法 ,以及針對它進行測試的一些方式進行說明。

首先,建立一個 Requests

Continue Reading

Laravel - Eloquent model (二)

前面介紹過了如何建立 Model

這裡繼續用範例說明如何使用 Model 來進行數據操作

首先先建立一個 MemberController

Continue Reading

Laravel - Eloquent model (一)

Laravel 的 Eloquent model 提供查詢資料表以及新增資料到資料表的功能

這部分主要說明定義 Models 及 Migration

Continue Reading

Laravel - Migrate+Seeds 自動部署資料表及資料

這裡記錄如何運用 migrate 及 Seeds 來建立自動部署流程

Continue Reading

Laravel - Visual Studio Code 擴充套件及功能推薦

這裡列出幾個推薦使用的Visual Studio Code 利於 Laravel 開發的套件

Continue Reading

PHP - Passing by Reference

PHP 提供了一個將變數參照到函式中的功能

只要在定義 function 時,將要參照的變數前面加上 & 就可以宣告為參照

例如:這裡範例定義了函式以及參數設定為參照 - myfun(&$x)

Continue Reading

Laravel - How to Custom a Artisan Console

There show how to custom a php artisan command

first create your custom command

This will auto generate a file in app/Console/Command/Tests/TestOutput.php

and setting a relative command for calling this file in terminal command

Continue Reading

Github 設定 SSH Deploy key 流程教學

透過設定 Deploy keys (SSH Key) 可以避免掉每次 push 都要輸入帳密的流程

設定的步驟如下:

啟用本地 Cli 命令列視窗

建立 ssh keygen

Continue Reading

Mac - 如何顯示/取消隱藏檔案

除了 ctrl+shift+. 的方式可以切換

啟用終端機,以指令方式操作顯示/隱藏檔案方式如下:

顯示檔案

defaults write com.apple.finder AppleShowAllFiles TRUE;\killall Finder

隱藏檔案

defaults write com.apple.finder AppleShowAllFiles FALSE;\killall Finder

Continue Reading

Laradock - MySQL 8.x 版本權限錯誤修正

Laradock 在目前釋出的最新版本,會直接引用 MySQL latest version (MySQL 8.x)

由於 MySQL 8.x 版本的新密碼格式會引發 mysql container 一些錯誤,

The server requested authentication method unknown to the client...

因此,必須在安裝 laradock 調整 MySQL 版本

(若已經安裝且執行過 docker-compose up..,同樣可適用)

Continue Reading

Laravel - Laradock 安裝

Laradock 在 Laravel 社群相當知名,它提供了完整套件 Docker-Images及相關設定

讓我們能很簡單的就部署好完整的 Laravel 開發環境

當然也可以支援其他PHP專案,像是 Symfony, CodeIgniter, WordPress 等

這裡介紹如何快速的透過 Laradock 安裝 NGINX, PHP, Composer, MySQL, Redis 及 Beanstalkd

Continue Reading

如何關閉mac預設 apache 啟動執行

關閉MAC本地 apache

MAC系統會自帶 apache, 在這裡要先將它關閉

暫停apache

sudo apachectl -k stop

關閉開機啟動

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Continue Reading

Laravel - Sublime Text3 搭配 SFTP 連線管理 Homestead

安裝 sublime text sftp

shift+command+p > Package Control:Install Package > sftp

開啟設定檔

File>SFTP/FTP/Setup Server

這時會開啟一個json格式的設定檔案

查看 vagant ssh-config

首先,先查看vagant ssh-config

$ vagrant ssh-config
Host homestead-7
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/liaoxiangru/Homestead/.vagrant/machines/homestead-7/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

SFTP CONFIG 檔案

設定 Sftp config 檔案,填寫對應資訊

例如:

{
    // The tab key will cycle through the settings when first created
    // Visit http://wbond.net/sublime_packages/sftp/settings for help
    
    // sftp, ftp or ftps
    "type": "sftp",

    "sync_down_on_open": true,
    "sync_same_age": true,
    
    "host": "127.0.0.1",
    "user": "vagrant",
    //"password": "password",
    "port": "2222",
    
    "remote_path": "/home/vagrant/code",
    //"file_permissions": "664",
    //"dir_permissions": "775",
    
    //"extra_list_connections": 0,

    "connect_timeout": 30,
    //"keepalive": 120,
    //"ftp_passive_mode": true,
    //"ftp_obey_passive_host": false,
    "ssh_key_file": "~/.ssh/id_rsa",
    //"sftp_flags": ["-F", "/path/to/ssh_config"],
    
    //"preserve_modification_times": false,
    //"remote_time_offset_in_hours": 0,
    "remote_encoding": "utf-8",
    //"remote_locale": "C",
    //"allow_config_upload": false,
}

接著存擋為 sftp-config.json

Continue Reading

Laravel - Homestead

Laravel Homestead 介紹

Laravel 為了讓PHP開發整體體驗都能完善,在local開發的環境設定也提供了相關解決方案

也就是這裡要介紹的 Homestead

Laravel Homestead 是官方所維護的 Vagrant box pre-package

讓你可以直接透過這個環境開發,而不必再獨立安裝PHP、Web server…等軟體

並且不必擔心忘記系統設定,因為 Vagrant boxes 是一次性設定安裝完畢,

如果在安裝流程有發現錯誤,隨時都可以重新安裝環境,並且只需要幾分鐘的時間就能完成

Continue Reading