CI基础知识笔记

1.知识点
$config[‘url_suffix’] = ”;//url后缀
$config[‘enable_query_strings’] = FALSE;
$config[‘controller_trigger’] = ‘c’;//类似Thinkphp当中的m,可以传递c=news控制器名
$config[‘function_trigger’] = ‘m’;//类似Thinkphp当中的a,可以传递a=index方法名
$config[‘directory_trigger’] = ‘d’; //一些控制器在controllers目录下的子目录当中需要使用

2.获取交互数据$this->input->post(‘title’);等同于$_POST[‘title’]

3.使用CI类库
//引入表单验证器
$this->load->library(‘form_validation’);//载入多个可以传递数组形式传递
//set_rules() 方法包含三个参数,第一个是输入域的名称,第二个是错误信息的名称,第三个是错误信息的规则
$this->form_validation->set_rules(‘text’, ‘text’, ‘required’);
//执行验证,返回boolean值
$this->form_validation->run();
其中载入类库第二个参数可以传递数组到类的构造函数中(这样类的构造函数必须带有参数)
在自定义的类库中初始化CI资源可以使用$CI=&get_instance();这样就可以$CI->load->helper(‘url’);等等操作
扩展现有类可以参考扩展辅助函数

4.载入视图
$this->load->view(‘name’);//可以载入views目录下后缀是.php的视图文件,一个控制器可以载入多个视图
$this->load->view(‘folder/name’);//载入views目录下的folder目录下的视图
$this->load->view(‘name’, $data);//其中$data可以是数组或者对象(类变量转换成数组元素)
$content = $this->load->view(‘name’, $data, true);//这样视图内容就作为字符串返回

5.载入模型
$this->load->model(‘Model_name’);如果在子目录下载入参考视图载入形式
$this->load->model(‘model_name’, ‘my_model’);//第二个参数是对象名
载入的模型不会自动连接数据库,如果需要自动连接可以将第三个参数设置成true,或者传入$config数据库配置
可以配置autoload.php自动加载模型(不建议使用)

6.辅助函数
一般保存在system/helpers或者application/helpers下,一旦使用$this->load->helper(‘name’);载入那么在视图和控制器当中都可以使用
可以是载入多个辅助函数$this->load->helper(array(‘help1′,’help2′,’help3’));一定要在使用前加载
可以配置autoload.php自动加载辅助函数
扩展辅助函数,可以在定义文件$config[‘subclass_prefix’] = ‘MY_’;那么扩展a_helper.php那么就可以使用MY_a_helper.php进行重写

7.适配器
适配器是特殊的类库,存放在system/libraries目录下,命名一个和类名相同的文件夹,文件夹下存放该类,
该文件夹下的子文件夹drivers包含了所有子类,那么可以使用$this->load->driver(‘class_name’);

8.系统核心类
CI启动调用Benchmark,Config,Controller,Exceptions,Hooks,Input,Language,Loader,Log,Output,Router,URI,Utf8
可以将自己写的核心类放在/application/core/Input.php,类名字必须是CI_Input

9.钩子
9.1启用钩子可以修改config,$config[‘enable_hooks’] = TRUE;
定义钩子在config/hooks.php文件中定义例如
$hook[‘pre_controller’] = array(
‘class’ => ‘MyClass’,//如果只是过程函数,这个可以用空
‘function’=>’function’,//函数名
‘filepath’=>’hooks’,//文件存放路径
‘params’=>array(‘filter’,’input’));//参数
如果同一挂钩点有多次引用,可以将挂钩点定义成二位数组即可
9.2挂钩点列表以及说明:
pre_system系统执行的早起调用,仅仅在benchmark和hooks类加载完毕的时候,没有执行路由或者其他过程
pre_controller调用你的任何控制器之前调用,此时所用的基础类路由选择和安全性检查都已经完成
post_controller_constructor在控制器实例化之后任何方法调用之前调用
post_controller控制器完全运行之后
display_override在系统执行末尾向web浏览器发送最终页面
cache_override取代output类中的_display_cache函数
post_system最终渲染页面发送到浏览器之后,浏览器接受完最终数据的系统执行末尾调用

10.公共函数
ci使用了一些全局定义的函数,在任何情况下都可以使用
is_php(‘5.2.0’);判断使用的php是否高于5.2.0
is_really_writeable(‘path/to/file’);判断文件是否有写入权限,一般在windows平台才用
set_status_header(code,’text’);手动设置服务器状态头
remove_invisible_characters();//防止在ascii字符之间插入空字符
html_escape();可以防止跨站脚本攻击

11.URI路由
可以定义自己的路由规则,其中可以使用通配符或者正则表达式
11.1通配符
$route[‘product/(:num)’]=’product/show’;
这样可以匹配product是第一个部分,数字是第二部的url都可以定义到product控制器的show方法中
:num表示一个只包含数字
:any表示任何字符,可以匹配多个值,eg:$route[‘product/(:any)’]=’product/list/$1/$2/$3′;
11.2正则路由
$route[‘products/([a-z]+)/(\d+)’] = “$1/id_$2″;
上例中, 类似于 products/shirts/123 的URI 将换成调用 shirts 控制器类的 id_123 方法.

第一个为系统默认的路由$route[‘default_controller’] = ‘welcome’;
第二个为404页面的路由$route[‘404_override’] = ”;
这个路由标识了如果请求的控制器无法访问的时候将加载哪个控制器。
它相当于覆盖了默认的404错误页面(即提供了自己定义404页面的功能)。
但它不会影响show_404()这个方法,这个方法依然会加载默认的位于application/errors/error_404.php的error_404.php页面。

12.错误处理
show_error(‘消息’ [, int $status_code = 500 ] [, string $heading = ‘An Error Was Encountered’])
这个函数将会使用以下错误模版来显示错误消息:
application/errors/error_general.php
可选参数 $status_code 决定在显示错误的同时将会发送哪种 HTTP 状态代码。
可选参数 $heading 决定错误模版h1标签内容。
更多参考:http://codeigniter.org.cn/user_guide/general/errors.html

13.启动缓存
$this->output->cache(n);//其中n是分钟,可以使用1/60表示精确到1s
由于CI存储缓存文件的方式,只有通过 view 文件的输出才能被缓存
在缓存文件产生之前,请确保 application/cache 文件夹可写

14调试程序
激活分析器$this->output->enable_profiler(TRUE);
关闭分析器$this->output->enable_profiler(FALSE);
其中可以在配置文件profiler.php配置启用和禁用的变量,或者使用
$sections = array(
‘config’ => TRUE,
‘queries’ => TRUE
);
$this->output->set_profiler_sections($sections);

注意点:
1.类名的首字母应该大写。如果名称由多个词组成,词之间要用下划线分隔,不要使用骆驼命名法。
类中所有其他方法的名称应该完全小写并且名称能明确指明这个函数的用途,最好用动词开头
2.如果你要使用某个子文件夹下的功能,就要保证 URI 的第一个片段是用于描述这个文件夹的
3.如果要在你的任意控制器中使用构造函数的话,那么必须在里面加入下面这行代码parent::__construct();
4.控制器保留字Controller,CI_Base,_ci_initialize,Default,index
5.函数保留字is_really_writeable(),load_class(),get_config(),config_item(),show_error(),show_404(),log_message(),_exception_handler(),get_instance()
6.变量保留字$config,$mimes,$lang
7.常量ENVIRONMENT,EXT,FCPATH,SELF,BASEPATH,APPPATH,CI_VERSION,FILE_READ_MODE,FILE_WRITE_MODE,DIR_READ_MODE,FOPEN_READ_WRITE等等
8.载入多个视图,只需要在第一个视图传入数据就可以
9.辅助函数中的函数名最好做好命名规范,如果同时加载多个辅助函数文件,且其中有名称相同的函数,会导致 CI 出现空白页问题(也就是 PHP 语法错误)。
10. 对象的实例名永远都是小写的
11.编写路由规则的时候不要在前面或后面加”/

 

Unable To Load Dynamic Library

配置的wamp中提示

Unable To Load Dynamic Library

那么需要添加php根目录到环境变量path当中,这样不用重启电脑,只用注销下当前用户就可以了!

 

Invalid command ‘RewriteEngine’, perhaps misspelled or defined by a module not included in the server configuration

这样是没有加载rewrite模块!

ab压力测试

ab -n 1000 -c 50 http://test.xxxx.com/www/

Document Path: /www/
Document Length: 28625 bytes #请求文档大小

Concurrency Level: 50 #并发数
Time taken for tests: 47.986 seconds #全部请求完成耗时
Complete requests: 1000 #全部请求
Failed requests: 0 #失败的请求
Write errors: 0
Total transferred: 29014000 bytes #总传输大小
HTML transferred: 28625000 bytes #html内容传输量
Requests per second: 20.84 [#/sec] (mean)#重要指标之一,每秒请求数(平均)
Time per request: 2399.308 [ms] (mean)#重要指标之一,每次并发请求时间
Time per request: 47.986 [ms] (mean, across all concurrent requests)#每个请求实际运行时间,平均值
Transfer rate: 590.46 [Kbytes/sec] received #传输速率

Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.4 0 2
Processing: 922 2379 376.4 2389 3723
Waiting: 891 2319 369.0 2326 3715
Total: 925 2379 376.2 2389 3723

Percentage of the requests served within a certain time (ms)
50% 2389
66% 2521
75% 2594
80% 2659
90% 2806
95% 2905
98% 3113
99% 3417
100% 3723 (longest request)
#50%的用户响应时间小于2389毫秒
#最长的响应时间是3723毫秒