這篇文章主要介紹了關於Yaf架構安裝指南 ,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
說起PHP架構,很多人的印象都停留在一個由PHP實現的基於MVC的各種功能組合的程式碼封裝。極少有人知道C語言也能寫PHP架構,並且速度比PHP寫的架構快上10倍以上。
Yaf是一款以C語言寫的PHP架構。它以PHP擴充的方式運行架構。只實現了MVC最核心部分的功能:路由、MVC。Yaf核心夠精簡穩定,所以,幾乎不會遇到運行上的問題。風險可控,效能優異。當然,因為簡單,所以,你需要實現DB的封閉、Session的擴充等操作。
身為PHP程式員,對於由亞洲第一程式員:鳥哥,編寫的架構應該不陌生,那麼它有什麼優點呢?
C語言開發的PHP架構, 相比原生的PHP, 幾乎不會帶來額外的效能開銷.
所有的架構類, 不需要編譯, 在PHP啟動的時候載入, 並常駐記憶體.
更短的記憶體周轉周期, 提高記憶體利用率, 降低記憶體佔用率.
靈巧的自動載入. 支援全域和局部兩種載入規則, 方便類程式庫共用.
高效能的視圖引擎.
高度靈活可擴充的架構, 支援自訂視圖引擎, 支援外掛程式, 支援自訂路由等等.
內建多種路由, 可以相容目前常見的各種路由協議.
強大而又高度靈活的設定檔支援. 並支援緩衝設定檔, 避免複雜的配置結構帶來的效能損失.
在架構本身,對危險的操作習慣做了禁止.
更快的執行速度, 更少的記憶體佔用.
架構安裝:
一:架構安裝
Yaf擴充首頁:http://pecl.php.net/package/yaf
$ wget http://pecl.php.net/get/yaf-3.0.7.tgz$ tar -zxvf yaf-3.0.7.tgz$ cd yaf-3.0.7$ /path/to/phpize$./configure --with-php-config=/path/to/php-config$ make && make test && make install
tip:
在執行編譯命令/path/to/phpize,命令的時候可能會出現如下錯誤:
Configuring for:PHP Api Version: 20151012Zend Module Api No: 20151012Zend Extension Api No: 320151012Cannot find autoconf. Please check your autoconf installation and the$PHP_AUTOCONF environment variable. Then, rerun this script.
可參考:https://blog.csdn.net/alen_xiaoxin/article/details/80255766,尋找解決辦法。
編譯完成組建擴充之後,修改php.ini,在php.ini檔案末尾加如下配置:
[yaf]yaf.use_namespace = 0yaf.environ = 'product'yaf.cache_config = 0yaf.name_suffix = 1yaf.lowcase_path = 1extension = yaf.so
添加完之後,可查看phpinfo是否存在yaf擴充。
配置說明:
yaf.user_namespace 為1是開啟命名空間模式。0關閉。
yaf.environ 是預設情況下Yaf讀取的環境配置是什麼。
yaf.cache_config 是否快取項目配置。
yaf.name_suffix 開啟尾碼。即為1之後,類名將以XxxModel.php、XxxController.php模式載入。
yaf.lowcase_path 路徑資訊中的目錄部分都會被轉換成小寫。
二、建立第一個Yaf項目
有兩種建立方式:
手動建立目錄
使用Yaf提供的命令列組建目錄
第二種方法可自行到:https://github.com/laruence/php-yaf,下載源碼,因為 Yaf 提供的命令工具沒有隨 Yaf 源碼一起,在該項目下面有一個tools檔案夾,裡面就是命令列工具。
一個典型的目錄結構:
+ public
|- index.php //入口檔案
|- .htaccess //重寫規則
|+ css
|+ img
|+ js
+ conf
|- application.ini //設定檔
+ application
|+ controllers
|- Index.php //預設控制器
|+ views
|+ index //控制器
|- index.phtml //預設視圖
|+ modules //其他模組
|+ library //本地類庫
|+ models //model目錄
|+ plugins //外掛程式目錄
入口檔案:
入口檔案是所有請求的入口, 一般都藉助於rewrite規則, 把所有的請求都重新導向到這個入口檔案。
一個經典的入口檔案piublic/index.php:
<?phpdefine("APP_PATH", realpath(dirname(__FILE__) . '/../')); /* 指向public的上一級 */$app = new Yaf_Application(APP_PATH . "/conf/application.ini");$app->run();
重寫規則:
Apache的Rewrite (httpd.conf):
#.htaccess, 當然也可以寫在httpd.confRewriteEngine OnRewriteCond %{REQUEST_FILENAME} !-fRewriteRule .* index.php
Nginx的Rewrite (nginx.conf):
server { listen ****; server_name domain.com; root document_root; index index.php index.html index.htm; if (!-e $request_filename) { rewrite ^/(.*) /index.php/$1 last; }}
設定檔:
在Yaf中, 設定檔支援繼承, 支援分節. 並對PHP的常量進行支援. 你不用擔心設定檔太大造成解析效能問題, 因為Yaf會在第一個啟動並執行時候載入設定檔, 把格式化後的內容保持在記憶體中. 直到設定檔有了修改, 才會再次載入。
一個簡單的設定檔application/application.ini:
[product];支援直接寫PHP中的已定義常量application.directory=APP_PATH "/application/"
控制器:
在Yaf中, 預設的模組/控制器/動作, 都是以Index命名的, 當然,這是可通過設定檔修改的.
對於預設模組, 控制器的目錄是在application目錄下的controllers目錄下, Action的命名規則是"名字+Action"
預設控制器application/controllers/Index.php
<?phpclass IndexController extends Yaf_Controller_Abstract { public function indexAction() {//預設Action $this->getView()->assign("content", "Hello World"); }}?>
視圖檔案:
Yaf支援簡單的視圖引擎, 並且支援使用者自訂自己的視圖引擎, 比如Smarty。
對於預設模組, 視圖檔案的路徑是在application目錄下的views目錄中以小寫action名的目錄中。
一個預設Action的視圖application/views/index/index.phtml
<html> <head> <title>Hello World</title> </head> <body> <?php echo $content;?> </body></html>
運行:
在瀏覽器輸入你伺服器配置的網域名稱即可:
http://www.yourhostname.com/application/index.php
我是在本地配置的直接把連接埠指向public目錄,所以直接輸入:localhost:8081,即可看到
注意:
如果看不到Hello world,那麼請到伺服器查看PHP的錯誤記錄檔,找出問題在哪裡。