1准备Yii源码
首先新建helloyii目录作为Web应用的根目录,并添加到Nginx的配置文件中。然后将Yii框架源码部署到helloyii下,目录结构如下:
helloyii/
|-- framework
|-- ……
|-- YiiBase.php
|-- yiic
|-- yii.php
`-- zii
2编写HelloWorld 2.1目录结构程序目录结构如下:
app/
|-- index.php
`-- protected
|-- controllers
| `-- HelloController.php
`-- views
`-- hello
`-- result.php
2.2主要代码index.php
===============================================================================
<?php
// change the following paths if necessary
$yii=dirname(__FILE__).'/../framework/yii.php';
// remove the following lines when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
// specify how many levels of call stack should be shown in each logmessage
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
require_once($yii);
Yii::createWebApplication()->run();
?>
protected/controllers/HelloController.php
===============================================================================
<?php
class HelloController extends CController
{
public function actionSay()
{
$varYii = "hi,yii";
$this->render('result', array('varYii'=>$varYii));
}
}
?>
protected/views/hello/result.php
===============================================================================
<?php
echo $varYii;
?>
2.3开始访问现在可以直接访问了:http://helloyii.com/app/index.php?r=hello/say
3源码解析 3.1资源映射规则访问Url经过index.php处理,将请求转发到HelloController的actionSay方法中,然后通过result.php生成最终HTML页面。具体映射关系如下图所示:
注:如果ControllerID和ActionID为默认值site和index的话,则可以通过http://helloyii.com/app/index.php直接访问。请求会转发给SiteController的actionIndex()方法。
4自动生成代码工具Yii提供了Yiic和Gii两个代码生成工具,可以生成内容更加丰富的实例,下面就来试用一下。
首先切换到/export/data/helloyii,然后执行:
framework/yiicwebapp demo
将会在/export/data/helloyii/demo中自动生成示例程序代码。
现在在浏览器中访问helloyii.com/demo/index.php即可看到成功页面。
访问index.php时,PHP打印警告日志:Warning: date(): It is not safe to rely on the system's timezonesettings. You are *required* to use the date.timezone setting or thedate_default_timezone_set() function…
在php.ini中设置默认时区,或者修改helloyii/demo/protected/views/layouts/main.php:
===============================================================================
……
<?phpdate_default_timezone_set('Europe/Athens'); ?>
<div id="footer">
Copyright © <?phpecho date('Y'); ?> by My Company.<br/>
All Rights Reserved.<br/>
<?php echo Yii::powered();?>
</div><!-- footer -->
===============================================================================
参考资料
1一起学Yii—-Hello world
http://istrone.com/?p=451
2 yii框架之hello world
http://513394217.blog.163.com/blog/static/10979118620124288721586/
3 Creating Your First Yii Application
http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app
4应用Yii1.1和PHP5进行敏捷Web开发
http://yiibook.com/book/agile_web_application_development_with_yii1.1_and_php5/chapter-2
环境:jdk1.6.0_23 Linux 2.6.32-220.17.1.el6.x86_64 tomcat 采用-XX:+UseParNewGC -XX:+UseConcMarkSweepGC垃圾收集
现象:jvm意外crash,生成hs_err_pid****.log,无dump文件生成。
hs_err_pid****.log关键字包含:SIGSEGV GCTaskThread
crash难以定位,比较一致的一点是崩溃时eden space通常会100%,怀疑是gc时出问题,检查jdk bug库,未找到类似问题。调整jvm参数,修改xmn,xss,-XX:-ReduceInitialCardMarks,-XX:-UseTLAB等,仍然宕机,采用jdk1.6.0_43后,系统稳定,不再出现crash。
总结:
1、系统中可能存在大对象/内存使用,或其他性能瓶颈,导致eden区暴增,导致gc crash;
2、低版本jdk中存在隐患,当出现类似崩溃问题时,请尝试是否可用高版本jdk规避。