【澳门葡京备用网址】1框架关于日志的安排的粗略利用,详解PHP的Yii框架中国和东瀛记的相干配置及应用

近年来开头接触新类型,新类型用的框架是Yii1.1版本的,通过看框架文档差不多熟知明白了Yii在日记方面的利用。

默认的日记是出口到protected/runtime/application.log

日志 Yii提供了一个冲天自定义化和高增添性的日志框架。依据使用意况的不比,你可以很简单的对各个新闻就行记录、过滤、合并,比如说文本文件,数据库文件,邮件。

本文实例讲述了Yii2完结log输出到file及database的办法。分享给大家供我们参考,具体如下:

率先在protected/config/main.php配置文件中进入日志相关安顿,如下图:

要是急需修改那么需求在main.php里面的 components 下边增添log配置,如下:

动用Yii的日志框架包蕴如下步骤:

编辑config/web.php

澳门葡京备用网址 1

'preload' => array('log'),//这句也必须加上

'components' => array( 
    'log'=>array( 
      'class'=>'CLogRouter', 
      'routes'=>array(
        //这是一个文件route表示category为test开头的所有类型的输出都会记录到runtime/test.log下面 
         array( 
           'class'=>'CFileLogRoute', 
           'levels'=>'trace, info, debug, warn, error, fatal, profile', 
           'categories'=>'test.*', 
           'maxFileSize'=>1048576,//单文件最大1G 
           'logFile'=>'test.log', 
         ), 
         // 

//        开发过程中所有日志直接输出到浏览器了,这样不需要登录服务器看日志了  


         array( 
          'class' => 'CWebLogRoute', 
          'categories' => 'test.*', 
          'levels' => CLogger::LEVEL_PROFILE, 
          'showInFireBug' => true, 
          'ignoreAjaxInFireBug' => true, 
        ), 
        array( 
          'class' => 'CWebLogRoute', 
          'categories' => 'test.* ', 
        ), 

        array( 
          'class'=>'CEmailLogRoute', 
          'levels'=>'error, warning', 
          'emails'=>'admin@example.com', 
        ), 
      ), 
    ), 

  ),

调用日志记录的章程

首先log要开启

CFileLogRoute表示生成文书日志,当程序运行时出现error,warning两连串型的荒谬时会输出日志,默许是在protected/runtime/application.log,如下图:

借使在某处调用了Yii::log(“jdkshgds”,”info”,’test.xx’);

  • 在主应用的计划文件(例如basic下边的web.php)中配备好日志的过滤和导出的装置
  • 检查差异景象下通过过滤之后的日志新闻
  • 笔录日志
'bootstrap' => [
  'log'
],

澳门葡京备用网址 2

那么些log首先被记录在了内存中一个CLogger类的array中,然后会相继的判定每个LogRoute,判断是不是须求输出,注意是种种判断,不是内部一个输出下一个就不管了。

笔录日志其实就是简简单单的调用如下的法子:

[file]

澳门葡京备用网址 3

拿地点的安插来说:

  • [[Yii::trace()]]:
    记录关于某段代码运行的连带音信。重倘使用来支付环境。
  • [[Yii::info()]]: 在少数地点记录一些相比有效的音信的时候利用。
  • [[Yii::warning()]]: 当某些期望之外的政工发生的时候,使用该办法。
  • [[Yii::error()]]:
    当某些需求马上解决的浴血难题暴发的时候,调用此方法记录相关音讯。
'components' => [
  'log' => [
    'targets' => [
      [
        'class' => 'yii\log\FileTarget',
        'exportInterval' => 1,
      ],
    ],
  ],
]

CWebLogRoute表示从来把品种为trace的日记输出在网页下方,system.db.*意味着仅记录db的操作,其余的忽视,如下图:

第一个CFileLogRoute,’categories’=>’test.*’,levels里带有了info,
test.xx知足条件,所以会执行,将那条log输出到test.log中,然后下一个CWebLogRoute,
‘levels’ =>
CLogger::LEVEL_PROFILE,。而那条log是info的,所以不会实施,再下一个CWebLogRoute,’categories’
=> ‘test.*
‘,levels没指定,那就说不过滤,所以那一个也会被实施,所以那条log将被输出到浏览器中。

地方的那些方法纵然根据差其他level和连串来记录新闻,不过事实上它们调用的是同一个方法function($message,
$category =
‘application’)。其中$message就是要记录的音讯,$category代表的是其一日志的归属类。下边的代码表示在默许的‘application’分类下边记录了一条trace类型的音讯。

默许输出到runtime/logs/app.log

澳门葡京备用网址 4

二、profile功能 此外logger还有一个很有力的效益:profile,

 Yii::trace('start calculating average revenue');

专注webserver或控制台用户要有写入该公文的权杖

Yii::beginProfile('blockID');
...code block being profiled...
Yii::endProfile('blockID');

提拔:记录的$message能够是概括的string也可以是叶影参差的数组、对象。你应当按照区其他光景下日志记录的职分采纳合适的$message类型。默许情况下,固然你记录的$message不是String,日志在导出的时候都会调用[[yii\helpers\VarDumper::export()]]
方法来输出一个string类型的信息。

[database]

那样就能测试这几个code block的进行功用了,分外的便利啊。

为了更好的团社团管理及筛选日志音讯,经常情形下应该为每一种日志分同盟适的类型。你可以选取一种有分明等级分别意思的归类,用以方便根据区其余目标来筛选分歧分类的日志。一种简易且实用的命名方式就是选拔PHP的魔术常量METHOD来作为分类的称号。Yii框架之中的要旨代码在做日志记录的时候就是那样干的。比如说:

'log' => [
  'targets' => [
    [
      'class' => 'yii\log\DbTarget',
      'levels' => ['error', 'warning', 'trace'],
    ]
  ]
],

更详实的布置查看:

Yii::trace('start calculating average revenue', __METHOD__);

默认输出db组件对应的数据库下{{%log}}表

下一场还有一个很BUG的作用,Profiling SQL Executions

在有常量METHOD出现的地点,它象征的就是近期的格局的称谓(并且增加了近期艺术所属的类的完好前缀)。举个例子吗,假如在app\controllers\RevenueController那个类里面的calculate方法里面有地方的那行代码,那么此时的METHOD表示的就是‘app\controllers\RevenueController::calculate’。

yii2根目录下运作下边发号施令生成对应的table schema

有的是时候sql语句写的不佳会卓殊影响功用的,可是要规定哪一条语句影响了频率就要求profiling了。YII也提供了这几个bug级其他作用。

唤醒:下边所说的措施其实只是单例对象[[yii\【澳门葡京备用网址】1框架关于日志的安排的粗略利用,详解PHP的Yii框架中国和东瀛记的相干配置及应用。log\Logger|logger
object]]
的[[yii\log\Logger::log()|log()]]艺术的简练利用,大家得以经过Yii::getLogger()方法来获取那些单例对象。当大家记录了十足的日记新闻依然当前的施用运行为止了,日志对象将调用[yii\log\Dispatcher|message
dispatcher]] 方法把记录的日记音讯写入到布置的目的地方。

./yii migrate --migrationPath=@yii/log/migrations/

三、Yii::log()和Yii::trace()的使用 第一在config文件中设置log

log targets 一个log
target是[[yii\log\Target]]抑或其子类的实例。它依据严重的等级和分类类过滤日志,然后把日志导出到合适的介绍人下面去。就比如,一个[[yii\log\DbTarget|database
target]] 对象就会把过滤之后的日志音讯导出到对应数据库。
您可以在行使的布局文件中的日志组件处登记八个log targets,如同上面那样:

留意config/console.php下也要有和web.php同样的安顿,否则命令执行不成功。

'log'=>array(
  'class'=>'CLogRouter',
  'routes'=>array(
    array(
      'class'=>'CFileLogRoute',//这表示把日志输出到文件中,下方有详细的
      'levels'=>'error, warning',
    ),
    array(
      'class'=>'CWebLogRoute',//这表示把日志显示在网页下方,下方有详细的
      'levels'=>'trace, info, error, warning',
      'categories'=>'cool.*,system.db.*',
    ),
  ),
),
return [
// the "log" component must be loaded during bootstrapping time
'bootstrap' => ['log'],

'components' => [
  'log' => [
    'targets' => [
      [
        'class' => 'yii\log\DbTarget',
        'levels' => ['error', 'warning'],
      ],
      [
        'class' => 'yii\log\EmailTarget',
        'levels' => ['error'],
        'categories' => ['yii\db\*'],
        'message' => [
          'from' => ['log@example.com'],
          'to' => ['admin@example.com', 'developer@example.com'],
          'subject' => 'Database errors at example.com',
        ],
      ],
    ],
  ],
],
];

仍是可以按照不相同的条件陈设不一样的日记格局

日志路由class:

留意:日志组件必须在bootstrap中配置,那样才能把日志音讯分发到对应的log
target.
地方的代码里面,几个log
target注册到了[[yii\log\Dispatcher::targets]]里面。

'components' => [
  'log' => [
    'traceLevel' => YII_ENV == 'dev' ? 3 : 0,
    'targets' => [
      [
        'class' => 'yii\log\DbTarget',
        'levels' => YII_DEBUG ? ['error', 'warning', 'trace'] : ['error'],
      ],
      [
        'class' => 'yii\log\FileTarget',
        'levels' => YII_DEBUG ? ['error', 'warning', 'trace'] : ['error', 'warning'],
      ],
    ],
  ],
],
  • CDbLogRoute: 将新闻保存到数据库的表中。
  • CEmailLogRoute: 发送新闻到指定的 Email 地址。
  • CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文书中。
  • CWebLogRoute: 将 音信 突显在现阶段页面的平底。
  • CProfileLogRoute: 在页面的底层突显概述(profiling)音讯。

首先个筛选出荒谬和警示新闻并且把这么些音信保存到了数据库。
其次个筛选出分类以yii\db*始于的错误音讯,并把那些新闻透过邮件发送到admin@example.com
和 developer@example.com.
Yii有下边那几个内置的log
targets,你可以参考API文档来读书具体怎么去布置和动用它们。

越来越多关于Yii相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧统计》、《php突出开发框架统计》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法统计》、《php+mysql数据库操作入门教程澳门葡京备用网址,》及《php常见数据库操作技巧汇总》

信息级别levels:

  • [[yii\log\DbTarget]]:把日志新闻保存到数据库。
  • [[yii\log\EmailTarget]]:
    把日记新闻发送到指定的邮箱,下边的例子就是。
  • [[yii\log\FileTarget]]: 把日记写到到文件。
  • [[yii\log\SyslogTarget]]:
    调用PHP的syslog()方法将日志写入到系统日志。

目的在于本文所述对咱们基于Yii框架的PHP程序设计具有帮忙。

  • trace: 那是在 Yii::trace 中采用的级别。它用来在支付中
    跟踪程序的举办流程。
  • info: 那些用于记录普通的消息。
  • profile: 这一个是性质概述(profile)。下边立时会有更详尽的求证。
  • warning: 那些用于警示(warning)音信。
  • error: 那个用于致命错误(fatal error)音信。

接下去,大家就来探视常见的log target具有的法力。

你或许感兴趣的稿子:

  • 完善解读PHP的Yii框架中的日志成效
  • YII
    Framework框架教程之日志用法详解
  • PHP的Yii框架的常用日志操作统计
  • 详解PHP的Yii框架中国和扶桑记的连锁安插及拔取
  • Yii2使用自带的UploadedFile已毕的公文上传
  • yii使用activeFileField控件达成上传文件与图片的法门
  • Yii入门教程之目录结构、入口文件及路由设置
  • Yii配置文件用法详解
  • Yii2中SqlDataProvider用法示例
  • Yii中CArrayDataProvider和CActiveDataProvider差异实例分析

分类categories:

新闻过滤 就每一种log target而言,你可以布署它的
[[yii\log\Target::levels|levels]] 和
[[yii\log\Target::categories|categories]]属性类设置它的惨重程度以及归属的分类。
[[yii\log\Target::levels|levels]]质量的行使一个数组里面的一个或者三个值,那些数组包括如下值:

可以自定义,但在输出函数里要对应才会被写入日志里
(例如上面写的是 cool.* 和 system.db.*
,就会把相应分类的音讯写入日志,请结合下文来精通)

  • error:对应[[Yii::error()]]记录的信息
  • warning:对应[[Yii::warning()]]笔录的消息
  • info :对应 [[Yii::info()]]记录的新闻
  • trace:对应 [[Yii::trace()]]记录的音讯.
  • profile :对应[[Yii::beginProfile()]] 和
    [[Yii::endProfile()]]笔录的新闻,那种艺术上边更加多详细消息会被记录。

安装完了,就足以用写入日志的函数来记录了:

倘使您未曾点名[[yii\log\Target::levels|levels]]
的值,那么其余level的音讯都会被记录。

Yii::trace('My log message.','cool.pd');
//cool.pd属于cool.*分类,所以会被写入日志
Yii::log('My log message.','info','cool.collectpd');
//log定义级别为info,结合上文,第一个logclass会忽略,不会被写入文件,但会被第二个logclass接收,写入日志在网络下方显示。

[[yii\log\Target::categories|categories]]
属性的值是数组,那些数组里面的值可以是一个有血有肉的归类名称,也可以是接近正则的匹配方式。只有在target能在这些数组里面找到呼应的分类名或者符合某一个极度情势,他才会处理那么些音信。那里的协作格局的组合是在分拣的称谓前边加上一个号。如果那几个分类恰好和这么些匹配方式的号前的字符匹配,那么也就是其一分类找到对应匹配值。举个例来说,在类[[yii\db\Command]]中的yii\db\Command::execute和yii
\db\Command:: query
方法应用类名类记录相关日志音讯,那么那几个时候她们都合作情势yii\db*

trace()和log()的区别:
trace()只会在调试格局下生效,即打开debug的时候
trace()不分level,但log()能设置levels参数

无异于的,如果我们尚无点名[[yii\log\Target::categories|categories]],那么每一种分类的日记新闻都会被处理。
除开通过[[yii\log\Target::categories|categories]]
属性来安装分类的白名单外,你也得以由此
[[yii\log\Target::except|except]]特性来设置分类的黑名单。属于黑名单的分类日志音信不会被target处理。

四、调试sql query每个语句执行的耗时 在配置中的log下增进上边那么些Route

下边的安插指定了一个分类匹配yii\db*或者
yii\web\HttpException:*,但又不包蕴yii\web\HttpException:404的分类,而且它只处理错误和警示的日记音讯。

//这个配置专门负责数据库操作的profile 
array( 
    'class'=>'CProfileLogRoute', 
    'levels' => CLogger::LEVEL_PROFILE, 
    'showInFireBug' => true, 
    'ignoreAjaxInFireBug' => true, 
    'categories' => 'system.db.* ', //只记录db的操作日志,其他的忽略 
),
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
'categories' => [
  'yii\db\*',
  'yii\web\HttpException:*',
],
'except' => [
  'yii\web\HttpException:404',
],
]

接下来在某个controller的某个action中进入:

留神:当错误的句柄捕获到HTTP的丰裕的时候,记录的日志新闻会以yii\web\HttpException:ErrorCode的那种格式
记录,例如[[yii\web\NotFoundHttpException]]
就会被记录成yii\web\HttpException:404
音信格式化 日志targets用三种格式来导出日志。举个例子,假诺你的日志target是[[yii\log\FileTarget]],那么您在您的主次中著录日志的时候,应该会找到类似于文件runtime/log/app.log
记录的如下的新闻:

Yii::beginProfile('db', 'pocketpet'); 
for($i=0;$i<1000;$i++){ 
   $user = UserModel::model()->findByPk("1");//这里只要是数据库操作就行,这个只是个例子 
}
2014-10-04 18:10:15 [::1][][-][trace][yii\base\Module::getModule] Loading module: debug

Yii::endProfile(‘db’, ‘pocketpet’);

默认景况下,[[yii\log\Target::formatMessage()]]:会帮大家把日记新闻格式化成上边的这种格式:

在浏览器中做客这几个action,记得先打开firebug,然后firebug中就能来看如下图的笔录:

Timestamp [IP address][User ID][Session ID][Severity Level][Category] Message Text

澳门葡京备用网址 5

您可以透过给[[yii\log\Target::prefix]]
属性配置一个自定义的回调函数来
自定义日志的前缀。上面的代码就贯彻了在每条日志音信前面加上了用户的ID(ip地址,sessionId等灵活新闻因为个人隐衷被去掉了)。

无异于的query会进行分拣,总计total和average,那一个对于分析如故不行有援助的。

[
'class' => 'yii\log\FileTarget',
'prefix' => function ($message) {
  $user = Yii::$app->has('user', true) ? Yii::$app->get('user') : null;
  $userID = $user ? $user->getId(false) : '-';
  return "[$userID]";
}
]

也得以将db的日志写到文件,配置如下(不提议利用,依然到浏览器用firebug方便):

除开日志音讯的前缀,日志的target还把一部分上下文新闻附加在了每一批的日记记录中。默许景况下,全局的PHP变量包蕴$_GET,
$_POST, $_FILES, $_COOKIE, $_SESSION 和 $_SERVER. 你可以透过陈设
[[yii\log\Target::logVars]]
来调整日志记录的全局变量。上面的代码表示的是只记录$_SERVER相关的变量。

array( 
  'class'=>'CFileLogRoute', 
  'levels' => CLogger::LEVEL_PROFILE, 
  'categories' => 'system.db.* ', //只记录db的操作日志,其他的忽略 
  'logFile'=>'db.log', 
),
[
'class' => 'yii\log\FileTarget',
'logVars' => ['_SERVER'],
]

当然,想要生效还得有上边两步配置:


‘logVars’为空的时候,表示不记录相关的上下文音信。要是您想自定义上下文音讯的提供形式,你可以覆写[[yii\log\Target::getContextMessage()]]
方法。

1 . 记得在index.php, 中参加以下配置

消息的trace等级 在付出的进度当中,大家连年期待可以领会每一条日志音信是发源何地。在Yii中你能够通过配备[[yii\log\Dispatcher::traceLevel|traceLevel]]
属性来完毕。配置的演示如下:

$yii = dirname(__FILE__).'/../yii/framework/yii.php';
$config = dirname(__FILE__).'/protected/config/main.php';

defined('YII_DEBUG') or define('YII_DEBUG',true);

defined('YII_DEBUG_SHOW_PROFILER') or define('YII_DEBUG_SHOW_PROFILER',true);
//enable profiling
defined('YII_DEBUG_PROFILING') or define('YII_DEBUG_PROFILING',true);
//trace level
defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
//execution time
defined('YII_DEBUG_DISPLAY_TIME') or define('YII_DEBUG_DISPLAY_TIME',false);
require_once($yii);
Yii::createWebApplication($config)->run();
return [
'bootstrap' => ['log'],
'components' => [
  'log' => [
    'traceLevel' => YII_DEBUG ? 3 : 0,
    'targets' => [...],
  ],
],
];
  1. 在main.php主配置文件之中,的components db
    里将enableProfiling设置为true

地点的示范在YII_DEBUG为true的时候将[[yii\log\Dispatcher::traceLevel|traceLevel]]
设置为3,反之设置为0.
趣味是什么样呢?3象征每一条日志记录都会记录与之有关的三层栈调用音讯,0代表不记录任何相关的栈调用音信

'components' => array(
'db' => array(
    'enableProfiling' => true, //这个是用来记录日志的,会记录每一条语句执行的时间
    'enableParamLogging' => true,//true表示包括sql语句的参数在内的信息都会记录到日志里,非常详细
  ),
)

提醒:没有必要总是记录调用的仓库音信,相比较耗质量。所以,你应有只在你付出的时候照旧用于调试的情事下选择该意义。
音讯的清空和导出 就好似上边说的,记录的音讯以数组的方式保存在[[yii\log\Logger|logger
object]]中。为了限制这几个数组消耗过多的内存,当以此数组包含的情节大小达到某个量的时候会被相应的target从内存中转移到对应的对象(文件,数据库…)中。你可以通过安装
[[yii\log\Dispatcher::flushInterval|flushInterval]]
的值来决定量的轻重。像下边那样:

您可能感兴趣的篇章:

  • PHP的Yii框架的常用日志操作计算
  • 完善解读PHP的Yii框架中的日志功用
  • Yii2框架中国和东瀛记的施用办法分析
  • YII
    Framework框架教程之日志用法详解
  • Yii框架达成记录日志到自定义文件的办法
  • yii框架配置默认controller和action示例
  • PHP的Yii框架中行使数据库的安顿和SQL操作实例教程
  • Nginx配置PHP的Yii与CakePHP框架的rewrite规则示例
  • Yii框架日志记录Logging操作示例
return [
'bootstrap' => ['log'],
'components' => [
  'log' => [
    'flushInterval' => 100,  // default is 1000
    'targets' => [...],
  ],
],
];

留神:在行使运行截至的时候也会刷新内存,那样工作为了让日志的target可以记录完整的音讯。
把日记音讯从内存刷到对应存放的地点的这一动作不是随即发出的。事实上,和地点一样,都是当内存中的日志大小达到自然水平才会生出。你能够像上面的演示一样通过安排差距target的[[yii\log\Target::exportInterval|exportInterval]]值,来已毕修改的目的:

[
'class' => 'yii\log\FileTarget',
'exportInterval' => 100, // default is 1000
]

因为清空和导出的设定,默许情况下您调用 Yii::trace()
或者其余的日志记录格局的时候不会在日志target下立即看到日志信息。那对一些长日子运作的控制台程序是一个问题。不过这几个题材是足以解决的,方法入上边的代码,你需求把[[yii\log\Dispatcher::flushInterval|flushInterval]]
和[[yii\log\Target::exportInterval|exportInterval]]
的值都设置成1:

return [
'bootstrap' => ['log'],
'components' => [
  'log' => [
    'flushInterval' => 1,
    'targets' => [
      [
        'class' => 'yii\log\FileTarget',
        'exportInterval' => 1,
      ],
    ],
  ],
],
];

小心:如此反复的清空和导出日志新闻会下跌系统的质量。
切换日志的targets 您能够通过安装[[yii\log\Target::enabled|enabled]]
属性来禁止日志的target。就好似上面的代码描述的均等:

Yii::$app->log->targets['file']->enabled = false;

地点的代码须求您在布局文件之中有一个上面的计划:

return [
'bootstrap' => ['log'],
'components' => [
  'log' => [
    'targets' => [
      'file' => [
        'class' => 'yii\log\FileTarget',
      ],
      'db' => [
        'class' => 'yii\log\DbTarget',
      ],
    ],
  ],
],
];

创建一个新的target 第一,创立一个新的日志target是很简短的。你根本做的作业是完毕[[yii\log\Target::export()]]
方法并且把数组类型的信息[[yii\log\Target::messages]]发送到指定的蕴藏媒介上去就行了。在这几个历程中你可以调用[[yii\log\Target::formatMessage()]]
方法来格式化每一条日志信息。至于越来越多的细节你可以在Yiid的发行版本里找到详细的音信。

特性测评 特性测评是一种相比特其他日记记录。它一般用来博取某些模块执行时间的数据,以此来找到质量的难点所在。比如说,[[yii\db\Command]]
那几个类就用品质测评日志来赢得每一条sql查询所开支的流年。

要使用该类日志,你首先要做的时规定你要测试的代码范围。然后在每一段代码之间你都应该要保险它们是关闭的,就像是下面这几个样子:

\Yii::beginProfile('myBenchmark');
...code block being profiled...
\Yii::endProfile('myBenchmark');

myBenchmark只是一个标识,用于你在翻六柱预测应日志记录的时候连忙稳定。
在beginProfile和endProfile之间是可以再嵌套的,可是必须有限协理科学的关闭关系,如下所示:

\Yii::beginProfile('block1');

// some code to be profiled

\Yii::beginProfile('block2');
  // some other code to be profiled
\Yii::endProfile('block2');

\Yii::endProfile('block1');

要是上面的密闭关系出错了,对应的笔录都不会正常干活。

对此每一块被测评的代码,日志的level都是profile。你可以再日志的target中配备这个音讯并导出它们。
Yii内建了 Yii debugger来浮现评测的结果。

您可能感兴趣的小说:

  • 一应俱全解读PHP的Yii框架中的日志功用
  • 详解PHP的Yii框架中国和东瀛记的有关配置及运用
  • Yii2框架中国和扶桑记的施用办法分析
  • YII
    Framework框架教程之日志用法详解
  • Yii框架完毕记录日志到自定义文件的不二法门
  • yii框架配置默许controller和action示例
  • PHP的Yii框架中动用数据库的配备和SQL操作实例教程
  • Nginx配置PHP的Yii与CakePHP框架的rewrite规则示例
  • Yii框架日志记录Logging操作示例

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website