因爲半路出家的緣故,沒用過幾個PHP框架,第一個瞭解的框架是公司本身的,而後又試着用了Yii,CI。在讀了CSDN在某度的高排名翻譯文章(PHP開發框架流行度排名:Laravel居首)後,看了Laravel的皮毛。不得不說Laravel的文檔真是漂亮,可是做爲一個後臺程序開發者,總以爲也不是本身想要的。php
框架的做用:先後端代碼解耦;數據庫操做封裝;內置通用程序模塊(好比路由、認證、加密等);css
雖然整個網站中,框架性能並不是主要因素,可是仍是想把它發揮到極致,只能說是程序員的理想主義在做祟啦。
phalcon就是這種框架。PHP框架這麼一個直接跟業務代碼打交道的東西,都用本地化語言編寫,夠Geek。事實上,雖然說框架只是提供代碼調度和封裝,其自己的性能也不容忽視。html
本地化語言:就是能夠編譯成機器碼(那種能夠直接跑在本機CPU上的代碼啦)的語言,C/C++/Obj-C, ASM這種的。優勢是執行起來快快快,且有些硬件API,也許只有C接口,所以較解釋型語言更適合嵌入式領域,缺點是需從新編譯才能實現跨平臺,且一樣的功能,開發起來複雜度比腳本和Java要高mysql
Phalcon的方式是經過PHP擴展,將框架代碼編譯進去,使得編譯後的php命令支持一些框架類和依賴注入。編譯很是簡單nginx
#下載安裝依賴庫 sudo apt-get install php5-dev libpcre3-dev gcc make php5-mysql php5-fpm #下載git庫 git clone --depth=1 git://github.com/phalcon/cphalcon.git cd cphalcon/build sudo ./install #增長/etc/php5/fpm/conf.d/30-phalcon.ini sudo echo 'extension=phalcon.so' > /etc/php5/fpm/conf.d/30-phalcon.ini #增長/etc/php5/cli/conf.d/30-phalcon.ini sudo echo 'extension=phalcon.so' > /etc/php5/cli/conf.d/30-phalcon.ini
如今檢查下安裝是否成功。git
php -r 'echo phpinfo();' | grep -i phalcon
若是輸出下面這樣算做成功程序員
/etc/php5/cli/conf.d/30-phalcon.ini phalcon Phalcon Framework => enabled Phalcon Version => 1.3.4 phalcon.db.escape_identifiers => On => On phalcon.orm.column_renaming => On => On phalcon.orm.enable_literals => On => On phalcon.orm.events => On => On phalcon.orm.exception_on_failed_save => Off => Off phalcon.orm.not_null_validations => On => On phalcon.orm.virtual_foreign_keys => On => On phalcon.register_psr3_classes => Off => Off
也能夠經過下面這種方式檢測:github
php -r 'echo print_r(get_loaded_extensions());'
若是輸出下面這樣算做成功web
Array ( [0] => Core [1] => date [2] => ereg [3] => libxml [4] => openssl ...
Nginx的安裝略去sql
配置修改:修改/etc/nginx/site-avaliable/default 或 /etc/nginx/conf.d/default,取決於/etc/nginx/nginx.conf的配置和我的喜愛
這裏爲了測試,在default文件中配置了兩個域名,共用8080端口
server { listen 8080 default_server; server_name ~^(.+)$; index index.php index.html index.htm; set $root_path '/srv/www/htdocs/phalcon-website/public'; root $root_path; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } location ~ \.php$ { fastcgi_index /index.php; fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } } server { listen 8080; #這裏在測試時用store_server域名,本機須要綁定hosts才能解析 server_name store_server; index index.php index.html index.htm; set $root_path '/srv/www/htdocs/store/public'; root $root_path; try_files $uri $uri/ @rewrite; location @rewrite { rewrite ^/(.*)$ /index.php?_url=/$1; } location ~* ^/(css|img|js|flv|swf|download)/(.+)$ { root $root_path; } location ~ /\.ht { deny all; } location ~ \.php$ { fastcgi_index /index.php; fastcgi_pass unix:/var/run/php5-fpm.sock; include fastcgi_params; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } }
這個是phalcon的腳手架工具,支持一組命令,可以爲您自動生成代碼。
git clone git://github.com/phalcon/phalcon-devtools.git cd phalcon-devtools/ && sudo ln -s ~/devtools/phalcon.php /usr/bin/phalcon
而後執行phalcon commands
,會出現命令提示
Phalcon DevTools (1.3.4) Available commands: commands (alias of: list, enumerate) controller (alias of: create-controller) model (alias of: create-model) all-models (alias of: create-all-models) project (alias of: create-project) scaffold migration webtools
執行create-project就能生成一套框架代碼啦!
cd /srv/www/htdocs/ && phalcon create-project store
終於到了一個興奮點了,哈哈
#重啓fpm和nginx sudo service php5-fpm restart sudo service nginx restart
而後本機綁定host: store_server,在瀏覽器欄輸入store_server:8080,就能看到大大的Congratulations了!
期間可能會遇到權限問題,緣由是不管nginx建立子進程,仍是php5-fpm建立子進程,用得都是www-data的用戶名和羣組。
要修改默認值,賦值爲自定義的值。請分別修改/etc/nginx/nginx.conf和/etc/php5/fpm/pool.d/www.conf的user和group
至此,環境搭建完畢,接下來去探索Phalcon的各類內部機制吧!