Linux kernel 4.4.x、PHP7.1.八、Nginx1.12.1
Github:
https://github.com/liqiongfan/cspeed
擴展只支持PHP7.x以上版本,低於PHP7.x的版本請先升級PHP
在WEB應用模式下,擴展經過解析 PATH_INFO 參數信息進行路由轉發,請先確保 WEB服務器支持 PATH_INFO 模式,而且須要隱藏index.php
不然系統不生效,沒法完成路由解析。
推薦的Nginx配置:
location / {
# try_files $uri $uri/ /index.php$uri;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php/$1 last;
}
# 若是是二級目錄請設置爲二級目錄形式
}
location ~ \.php {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
複製代碼
WEB 目錄設置爲以下:php
+public
|--index.php 入口文件
+controllers
|--Index.php Index默認控制器
+admin 新增admin模塊
|--controllers admin模塊下的控制器目錄
|--Index admin模塊的Index控制器
+fronted fronted模塊
|--controllers fronted模塊控制器目錄
|--Index fronted模塊Index控制器
複製代碼
public 目錄下 index.php 內容以下:html
$app = new \Cs\App();
$app->run();
/* 超簡單的框架已經完成 */
複製代碼
在 public 同級的目錄controllers下建立一個 Index.php 文件,內容以下:git
Index.php:
class Index {
function indexAction(){
// 當須要渲染視圖的時候,請使用 $this->view 得到 View 引擎而後使用引擎具備的方法進行視圖渲染
echo '<h1>Hello CSpeed</h1>';
}
}
複製代碼
配置好 Nginx 路由,打開瀏覽器,輸入配置好的網站地址就會看到剛剛輸入的內容:github
http://path_to_cspeed
複製代碼
WEB應用路由規則:web
假設配置的Nginx如上,配置網站 www.supjos.cn 指向:public目錄下的index.php文件
那麼,路由規則以下三種狀況所示:
1)、www.supjos.cn
不帶PATH_INFO的路由指向與public目錄同級的controllers下的Index.php控制器的indexAction方法
2)、www.supjos.cn/backend/goods/lists
路由到backend模塊的goods控制器下的listsAction方法
3)、www.supjos.cn/sys/info
路由到與public同級的controllers目錄下Sys.php下的infoAction方法
複製代碼
控制器文件首字母必須大寫
以下路由所示:
www.supjos.cn/web/index/lists
模 塊: web 一個模塊對應一個目錄,此處對應web目錄
控制器: index 控制器文件命名爲 Index.php
方 法: listsAction CSpeed系統方法名都以Action結尾
複製代碼
public 目錄下的 index.php 內容以下:數據庫
index.php
/* 當實例化一個 \Cs\App 類後,系統自動進行 autoload, autoload的機制參見下面介紹 */
$app = new \Cs\App();
/** * 方法的第一個參數支持正則匹配,第二個參數是一個Closure閉包函數 */
$app->get('/index$', function(){
echo '<h1>Hello CSpeed</h1>';
});
/* CSpeeed支持常見的請求方法,除了上面的 GET 外,還支持 POST、PUT、DELETE、OPTIONS、HEAD,具體見 API 文檔 */
$app->post('/goods/index/2$', function(){
/* Your code here. */
});
複製代碼
當實例化一個 \Cs\App 類後,系統自動進行未引用文件的加載, 加載機制採用 「別名引用」機制,具體的原理以下:
系統自動內置一個 app 命名別名,指向 index.php 的上級目錄,以下目錄所示:
+--cspeed 網站目錄
+--public
|--index.php 入口文件
+--controllers 默認控制器加載目錄
|--Index.php
|--Goods.php
+--backend 新增模塊backend
|--controllers backend模塊的控制器目錄
|--Index.php
|--Goods.php
若是目錄結構如上所示:
那麼 默認的 `app` 別名指向 cspeed 目錄。
開發者能夠經過 $app->setAlias()來設置別名,具體的設置方法以下:
假設須要設置一個 backend 的別名 指向目錄 /data/supjos/backend ,那麼調用方法以下:
$app->setAlias('@backend', '/data/supjos/backend');
用戶能夠本身建立一個以下的文件:
<?php
namespace app\controllers;
class Index {
function getVersion() {
return 'v2.1.8';
}
}
那麼當你在CSpeed框架中須要使用 \app\controllers\Index類的時候,可使用以下兩種方法使用:
方法1:
use app\controllers\Index;
$index = new Index();
方法2:
$index = new \app\controllers\Index();
複製代碼
$view = new \Cs\mvc\View();
/* 方法包含兩個參數, * 第一個參數爲:須要渲染的視圖的文件名 * 第二個參數爲:須要在視圖中使用的變量,傳入一個數據或者不傳入 */
$view->render('index', ['name'=>'CSpeed', 'version'=>'v2.1.8']);
/* 若是須要添加單個變量到視圖模塊中,可使用 setVar 方法 */
$view->setVar('addVar', ['a', 'b' ,'c', 'd']);
/* 若是須要或者視圖的渲染效果可是並不輸入使用 getRender方法,參數與 render 方法一致 */
$viewResult = $view->getRender('index', ['name'=>'CSpeed', 'version'=>'v2.1.8']);
/* 默認的渲染視圖後綴爲 phtml,能夠經過 setSuffix 方法進行更改 */
$view->setSuffix('ppht');
/* 默認視圖文件夾保存在 public 目錄同級的 views 目錄下, 能夠經過 setViewDir 進行更改, 目錄不能以 "/" 結尾 */
$view->setViewDir('../views');
/*視圖內渲染*/
$view->partial('layouts/head', ['a', 'b', 'c']);
複製代碼
鑑於上一個版本中的數據庫性能有影響,本版本正處於重構狀態。開發中~敬請期待.
複製代碼
測試機器:
1、SSD 240GB
2、Intel Core i7-4790k
3、16GB 1866GHZ內存
4、Linux Debian 8.x kernel 4.4.x
5、PHP 7.1.8
6、Nginx 1.12.1
siege 3.0.8
測試命令: siege -c100 -t5m -b http://localhost/web
共完成一百九十多萬請求,每次請求4.4kb數據,零錯誤,CPU佔用23%左右內存佔用極低。
複製代碼
public get($urlPattern, $closure);
正則匹配 $urlPattern 的GET請求
public post($urlPattern, $closure);
正則匹配 $urlPattern 的POST請求
public put($urlPattern, $closure);
正則匹配 $urlPattern 的PUT請求
public patch($urlPattern, $closure);
正則匹配 $urlPattern 的PATCH請求
public delete($urlPattern, $closure);
正則匹配 $urlPattern 的DELETE請求
public head($urlPattern, $closure);
正則匹配 $urlPattern 的HEAD請求
public options($urlPattern, $closure);
正則匹配 $urlPattern 的OPTIONS請求
public autoload();
CSpeed框架的自動加載函數,切勿私自調用
public setAlias($aliasName, $aliasPath);
設置自動加載別名
public run();
CSpeed框架處理URL請求
複製代碼
public __construct();
構造函數
public render($templateFile, $templateVariables);
渲染視圖
public setSuffix($suffixName);
設置視圖的後綴
public setVar($varName, $varValue);
設置視圖中須要使用的變量,本方法能夠屢次調用
public getRender($templateFile, $templateVariables);
獲取渲染的視圖內容
public setViewDir($dir);
設置視圖渲染路路徑
public partial($templateFile, $templateVariables);
視圖內進行渲染視圖,如:佈局layouts
複製代碼
public getHttpHost();
獲取HTTP HOST信息
public getHttpUserAgent();
獲取HTTP User Agent信息
public getServerName();
獲取Server Name 信息
public getServerAddr();
獲取Server Addr 信息
public getRemotePort();
獲取 Remote Port 信息
public getReqeustScheme();
獲取Request Scheme 信息
public getServerProtocol();
獲取Server Protocol 信息
public getDocumentRoot();
獲取Document Root 信息
public getRequestUri();
獲取Request Uri 信息
public getScriptName();
獲取Script Name 信息
public getPathInfo();
獲取Path Info 信息
public getQueryString();
獲取Query String 信息
public isGet();
是否GET請求
public isPut();
是否Put請求
public isPatch();
是否Patch請求
public isDelete();
是否DELETE請求
public isHead();
是否Head請求
public isOptions();
是否Options請求
public get();
獲取$_GET參數
public getPost();
獲取$_POST參數
複製代碼
public __construct();
構造函數
public setHeader();
設置響應的HTTP HEADER
public unsetHeader();
刪除剛剛設置的HTTP HEADER, 此操做需在調用send方法前使用纔有效
public send();
響應設置的HTTP HEADER與內容
public setJsonContent();
設置響應的內容爲JSON格式
public setRawContent();
設置響應的內容爲原始數據,不進行轉換複製代碼