Yaf(Yet Another Freamwork)框架是中国国内教父级php程序员鸟哥的主力作品之一, 在php.net有鸟哥(惠新宸)的大名, 可谓国之骄傲。Yaf的运行并非堆积php类文件或者写一些其他php层面上的封装,而是采取了php扩展模式,随php常驻内存。想要学习Yaf, 需要先在环境上入手, 安装(编译)必要的扩展文件。

安装下载Yaf

先在Yaf的github页面右上角找到.zip文件包地址 或者到PHP官网上面的yaf扩展下载页面里下载。

然后将地址复制到控制台里用wget命令拿到

以下是.zip包的编译安装案例:wget https://github.com/laruence/yaf/archive/master.zip

unzip master.zip

cd yaf-master

设$PHP_BIN为php的bin目录,自己找一下这个目录放哪里啦$PHP_BIN/phpize

./configure --with-php-config=$PHP_BIN/php-config

make

make install

.tgz包的编译安装案例:

从php官网下载到.tgz的包放在~目录下tar -zxvf yaf-2.3.5.tgz

cd yaf-2.3.5

# 假设/phpstudy/server/php/bin为php的bin目录

/phpstudy/server/php/bin/phpize

./configure --with-php-config=/phpstudy/server/php/bin/php-config

make

make install

在php.ini里面填上yaf.so加载Yaf扩展extension=yaf.so

启用命名空间的方法也是在php.ini当中加两行yaf.use_namespace=1

yaf.environ="product"

其中environ这个配置项和application.ini的配置标准相关,product这个名字也是自己根据情况起的名字。

Yaf的配置

nginx的配置server {

listen       80;

server_name  maxtv5.wkwkk.com;

root   "/home/web/www.wkwkk.com/public";

if (!-e $request_filename) {

rewrite ^/(.*) /index.php/$1 last;

}

location / {

index  index.html index.htm index.php;

#autoindex  on;

}

location ~ \.php(.*)$ {

fastcgi_pass   127.0.0.1:9000;

fastcgi_index  index.php;

fastcgi_split_path_info  ^((?U).+\.php)(/?.+)$;

fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;

fastcgi_param  PATH_INFO  $fastcgi_path_info;

fastcgi_param  PATH_TRANSLATED  $document_root;

include        fastcgi_params;

}

}

注意: 如果发现重写规则失败,找不到文件,安装的是nginx较高(1.5+)版本的服务器,则把 / 符号改为 ?,即:rewrite ^/(.*) /index.php?$1 last;

别忘了重启生效

Apache的配置

.htaccess正文里写入以下代码:RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule .* index.php

Yaf的代码初始化模板

很多同学不会或者懒得使用鸟哥的代码初始化工具, 那么可以粘贴以下代码来用

先建立三个目录:  application  conf  public

在application当中建立目录: controllers  library  models  modules  plugins  views

application/Bootstrap.php文件代码:<?php

/**

* @name Bootstrap

* @author root

* @desc 所有在Bootstrap类中, 以_init开头的方法, 都会被Yaf调用,

* @see http://www.php.net/manual/en/class.yaf-bootstrap-abstract.php

* 这些方法, 都接受一个参数:Yaf_Dispatcher $dispatcher

* 调用的次序, 和申明的次序相同

*/

class Bootstrap extends Yaf\Bootstrap_Abstract

{

public function _initConfig()

{

Yaf\Registry::set('config', Yaf\Application::app()->getConfig());

}

public function _initPlugin(Yaf\Dispatcher $dispatcher)

{

// 注册一个插件

// $objSamplePlugin = new SamplePlugin();

// $dispatcher->registerPlugin($objSamplePlugin);

}

public function _initRoute(Yaf\Dispatcher $dispatcher)

{

$dispatcher->getInstance()->getRouter()->addConfig(Yaf\Registry::get('config')->routes);

}

public function _initView(Yaf\Dispatcher $dispatcher)

{

// 在这里注册自己的view控制器,例如smarty,firekylin

// $dispatcher->getInstance()->disableView();

}

public function _initSession(Yaf\Dispatcher $dispatcher)

{

// 初始化Session

}

public function _initCommonFunction()

{

// $directory = Yaf\Application::app()->getConfig()->application->directory;

// Yaf\Loader::import($directory . '/Constant.php');

// Yaf\Loader::import($directory . '/Common.php');

}

}

application/controllers/Index.php的代码<?php

class IndexController extends Yaf\Controller_Abstract

{

public function indexAction()

{

// echo 'do something';

return false;

}

}

application/plugins/Sample.php的代码:<?php

/**

* @name SamplePlugin

* @desc Yaf定义了如下的6个Hook,插件之间的执行顺序是先进先Call

* @see http://www.php.net/manual/en/class.yaf-plugin-abstract.php

* @author root

*/

class SamplePlugin extends Yaf\Plugin_Abstract

{

public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

public function dispatchLoopStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

public function postDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)

{

}

}

conf/application.ini的代码[common]

application.directory=APP_PATH "/application/"

;application.dispatcher.catchException=TRUE

application.modules="Index"

[routes]

routes.article.type="regex"

routes.article.match="#^/article/([0-9]+).html$#"

routes.article.route.module="Index"

routes.article.route.controller="Index"

routes.article.route.action="Todo"

routes.article.map.1="id"

routes.simple.type = "simple"

routes.simple.module = "m"

routes.simple.controller = "c"

routes.simple.action = "a"

[product : common:routes]

[develop : common:routes]

public/index.php 也就是入口文件的代码:<?php

/**

* Yaf框架基本入口

* @author caster 20160806

*/

header('Content-type:text/html;charset=utf-8');

// 开发模式

ini_set('display_errors',1);

error_reporting(E_ALL);

date_default_timezone_set('PRC');

// 定义入口文件

define('APP_PATH', __DIR__ . '/../'); // 指向public上一级

define('ROOT_PATH',__DIR__);

$app = new Yaf\Application(APP_PATH . '/conf/application.ini');

$app->bootstrap()->run();

php 鸟哥 配置文件,鸟哥出品的高性能php框架YAF的安装和配置相关推荐

  1. Java扫描配置文件的注解_详解Spring框架注解扫描开启之配置细节

    前言 Spring框架对Bean进行装配提供了很灵活的方式,下面归纳一下主要的方式: 在XML中进行显示配置 在Java中进行显示配置 隐式的bean发现机制和自动装配 而自动装配实现就需要注解扫描, ...

  2. drbd配置文件_Linux数据安全工具:数据镜像软件DRBD的安装与配置

    本文授权转载自微信公众号:计算机与网络安全,转载请联系授权. 微信公众号:计算机与网络安全 ID:Computer-network 1.安装环境说明 操作系统统一采用CentOS5.5-x86-64, ...

  3. 哥好鸟 哥啊鸟 哥回鸟

    "哥啊"鸟又叫了 我们海南岛是盛产怀参的地方,有野生的怀参,也有人工种植的怀参,它是一种南药,是一种根茎的藤本植物,藤条攀爬在藤架上或树枝上,叶子是心形的,开白色的小花,根茎长在地 ...

  4. 抄袭哥与流氓哥之间的世纪大战

    抄袭哥与流氓哥之间的世纪大战(作者:想飞)------yndp.net原创,转载请注明出处. 周鸿祎:实力战将,谋定而后动,步步为营,步步紧逼,进可以攻,退亦可守. 马化腾:早年成就霸业,几乎一统江湖 ...

  5. 面向对象编程 鸵鸟到底是不是鸟 企鹅是不是鸟?

    1.什么是里氏替换原则 里氏替换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章<Data Abstraction and Hie ...

  6. 涛哥、星哥即段海涛、赵星本人已不在属于传智播客

    自2016年涛哥离职后2年内一直打着涛哥.星哥名义宣传大数据课程及相关内容讲解视频宣传,自2018年11月起涛哥.星哥联合创办了多易教育,联合很多企业牛人一起专业做大数据培训,想了解的涛粉儿.星粉儿. ...

  7. 面向对象编程-鸵鸟到底是不是鸟?企鹅是不是鸟?

    1.什么是里氏替换原则 里氏替换原则是由麻省理工学院(MIT)计算机科学实验室的Liskov女士,在1987年的OOPSLA大会上发表的一篇文章<Data Abstraction and Hie ...

  8. 【JAVA工作项目日报管理开发-王大师开发-阮大师指导-鑫哥建议-国庆哥教导-项目组成员使用】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,<Java王大师王天师>作者 公众号:山峯草堂,非技术多篇文章,专注于天道酬勤的 Java 开发问题.中国国学.传统文化和代 ...

  9. mysql路由器配置文件_如何安装并配置mysql 5.7.13解压缩版?

    如何安装并配置mysql 5.7.13解压缩版? MySQL是一个关系型数据库管理系统,官方网站是http://www.mysql.com/,分为MySQL Enterprise Edition(co ...

最新文章

  1. 二值logit模型的适用条件_一文读懂条件Logistic回归
  2. rsync配置与报错总结
  3. 用pandas填充时间序列缺失值
  4. Elasticsearch 字段数据类型
  5. ajax获取php的数组,使用AJAX请求获取数组并将其传递到php数组中 - javascript
  6. 一文教你学会需求分析与管理
  7. dubbo接口快速测试技巧
  8. 264编码基本概念 FFMpeg的解码流程
  9. Bootstrap媒体对象列表
  10. 严数据结构c语言及答案,严蔚敏《数据结构(c语言版)习题集》全答案
  11. 一招搞定时间序列数据,手把手教你绘制时间序列图
  12. 如何去掉字符串中第一个和最后一个字符 比如是;
  13. java+selenum实现网页自动化总结
  14. index()函数和match()函数联合使用案例
  15. 【备忘】李炎恢老师HTML5+CSS3教程与课件代码【共享完毕】下载
  16. “特殊疑问词+动词不定式”的用法归纳
  17. python locale.setlocale啥意思_Python locale 多语言模块及遇到问题解决
  18. aria2+AriaNg 打造自己的离线下载/云播平台
  19. Logback 快速定位用户在一次请求中的所有日志
  20. games java mtech_JEIL MTECH打号机打码机

热门文章

  1. Redmi k20解锁/刷TWRP_Recovery/刷Magisk获取root
  2. 技术至简-7:2G/3G/4G/5G基站系统中混合调制的技术框架
  3. 明星热图|印小天曾志伟两代影帝演技PK;黄晓明、李佳琦、刘雨昕、华晨宇、刘柏辛等参加品牌活动...
  4. 大数据揭秘“浪漫情人节”经济:悦己消费成新趋势 超7成单身“80后”会送花给自己...
  5. Ralink RT5350 GPIO配置(坑了个大爹的)
  6. 学计算机的怎样防近视,经常使用电子产品如何护眼 科学使用电子产品防近视...
  7. 看懂,操作下,就可以去当网管
  8. 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(二) --基本设置二...
  9. 番茄助手Visual Assist X提示中文注释错误
  10. 揭秘百度快照劫持的原因以及解决技巧