提及PHP框架,不少人的印象都停留在一个由PHP实现的基于MVC的各类功能组合的代码包。极少有人知道C语言也能写PHP框架,而且速度比PHP写的框架快上10倍以上。php
Yaf是一款以C语言写的PHP框架。它以PHP扩展的方式运行框架。只实现了MVC最核心部分的功能:路由、MVC。Yaf内核够精简稳定,因此,几乎不会遇到运行上的问题。风险可控,性能优异。固然,由于简单,因此,你须要实现DB的封闭、Session的扩展等操做。css
身为PHP程序员,对于由亚洲第一程序员:鸟哥,编写的框架应该不陌生,那么它有什么优势呢?html
Yaf框架中文文档:http://www.laruence.com/manual/nginx
框架安装:git
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:github
在执行编译命令/path/to/phpize,命令的时候可能会出现以下错误:浏览器
Configuring for: PHP Api Version: 20151012 Zend Module Api No: 20151012 Zend Extension Api No: 320151012 Cannot 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 = 0 yaf.environ = 'product' yaf.cache_config = 0 yaf.name_suffix = 1 yaf.lowcase_path = 1 extension = yaf.so
添加完以后,可查看phpinfo是否存在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:
<?php define("APP_PATH", realpath(dirname(__FILE__) . '/../')); /* 指向public的上一级 */ $app = new Yaf_Application(APP_PATH . "/conf/application.ini"); $app->run();
Apache的Rewrite (httpd.conf):
#.htaccess, 固然也能够写在httpd.conf RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .* 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/"
对于默认模块, 控制器的目录是在application目录下的controllers目录下, Action的命名规则是"名字+Action"
默认控制器application/controllers/Index.php
<?php class IndexController extends Yaf_Controller_Abstract { public function indexAction() {//默认Action $this->getView()->assign("content", "Hello World"); } } ?>
对于默认模块, 视图文件的路径是在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的错误日志,找出问题在哪里。