- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章thinkPHP中配置的读取与C方法详解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
本文实例讲述了thinkPHP中配置的读取与C方法。分享给大家供大家参考,具体如下:
1.项目公共配置 。
Conf/config.php 。
内容如下 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
<?php
/**
*项目公共配置
*@package
*@author
**/
return
array
(
'LOAD_EXT_CONFIG'
=>
'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay'
,
'APP_AUTOLOAD_PATH'
=>
'@.ORG'
,
'OUTPUT_ENCODE'
=> true,
//页面压缩输出
'PAGE_NUM'
=> 15,
/*Cookie配置*/
'COOKIE_PATH'
=>
'/'
,
// Cookie路径
'COOKIE_PREFIX'
=>
''
,
// Cookie前缀 避免冲突
/*定义模版标签*/
'TMPL_L_DELIM'
=>
'{sh:'
,
//模板引擎普通标签开始标记
'TMPL_R_DELIM'
=>
'}'
,
//模板引擎普通标签结束标记
'TMPL_CACHE_ON'
=> false,
//关闭模板缓存
'DEFAULT_GROUP'
=>
'Home'
,
//默认访问分组,设置默认入口
'APP_GROUP_LIST'
=>
'Agent,Home,System,User,Store,Wap,Mall,Opener'
,
// 项目分组设定,多个组之间用逗号分隔,例如'Home,Admin'
'PUBLIC_RESOURSE'
=>
'./Public/'
,
'URL_404_REDIRECT'
=>
'./Tpl/404.html'
,
);
?>
|
'LOAD_EXT_CONFIG' => 'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay' 确定加载的额外的配置,这些配置都可以通过C()方法读取,全局有效.
2.如果启用了模块分组,则可以在对每个分组单独定义配置文件,分组配置文件位于:
项目配置目录/分组名称/config.php 。
1
2
|
'APP_GROUP_LIST'
=>
'Home,Admin'
,
//项目分组设定
'DEFAULT_GROUP'
=>
'Home'
,
//默认分组
|
现在定义了Home和Admin两个分组,则我们可以定义分组配置文件如下:
1
2
|
Conf/Home/config.php
Conf/Admin/config.php
|
每个分组的配置文件仅在当前分组有效,分组配置的定义格式和项目配置是一样的.
注意:分组名称区分大小写,必须和定义的分组名一致.
3.读取配置 。
定义了配置文件之后,可以使用系统提供的C方法(如果觉得比较奇怪的话,可以借助Config单词来帮助记忆)来读取已有的配置 。
1
|
C(
'参数名称'
)
//获取已经设置的参数值
|
例如,C('APP_STATUS') 可以读取到系统的调试模式的设置值,同样,由于配置参数不区分大小写,因此C('app_status')是等效的,但是建议使用大写方式的规范.
如果APP_STATUS尚未存在设置,则返回NULL.
C方法同样可以用于读取二维配置 。
1
|
C(
'USER_CONFIG.USER_TYPE'
)
//获取用户配置中的用户类型设置
|
C方法读取全局配置,以及当前模块的配置.
参数没有的话,将读取全部的有效配置.
如果存在相同的配置名,前面的值将被覆盖.
例如:
1
2
|
'HTML_CACHE_TIME'
=> 60,
//静态缓存有效期(秒)
'HTML_CACHE_TIME'
=> 80,
|
最终获取的是80.
加载顺序依照参数LOAD_EXT_CONFIG 。
1
|
'LOAD_EXT_CONFIG'
=>
'db,info,email,safe,upfile,cache,route,app,alipay,sms,platform,store,pay'
|
比如info中有个参数HTML_CACHE_TIME 为60 ,其余配置中没有,那么这个参数读取出来就是60.
如果db中也有HTML_CACHE_TIME为50,那么值还是60。因为info是后读取的,把db中的HTML_CACHE_TIME覆盖掉了.
附上C方法源码 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
/**
* 获取和设置配置参数 支持批量定义
* @param string|array $name 配置变量
* @param mixed $value 配置值
* @return mixed
*/
function
C(
$name
=null,
$value
=null) {
static
$_config
=
array
();
// 无参数时获取所有
if
(
empty
(
$name
)) {
if
(!
empty
(
$value
) &&
$array
= cache(
'c_'
.
$value
)) {
$_config
=
array_merge
(
$_config
,
array_change_key_case
(
$array
));
}
return
$_config
;
}
// 优先执行设置获取或赋值
if
(
is_string
(
$name
)) {
if
(!
strpos
(
$name
,
'.'
)) {
$name
=
strtolower
(
$name
);
if
(
is_null
(
$value
))
return
isset(
$_config
[
$name
]) ?
$_config
[
$name
] : null;
$_config
[
$name
] =
$value
;
return
;
}
// 二维数组设置和获取支持
$name
=
explode
(
'.'
,
$name
);
$name
[0] =
strtolower
(
$name
[0]);
if
(
is_null
(
$value
))
return
isset(
$_config
[
$name
[0]][
$name
[1]]) ?
$_config
[
$name
[0]][
$name
[1]] : null;
$_config
[
$name
[0]][
$name
[1]] =
$value
;
return
;
}
// 批量设置
if
(
is_array
(
$name
)){
$_config
=
array_merge
(
$_config
,
array_change_key_case
(
$name
));
if
(!
empty
(
$value
)) {
// 保存配置值
cache(
'c_'
.
$value
,
$_config
);
}
return
;
}
return
null;
// 避免非法参数
}
|
希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助.
最后此篇关于thinkPHP中配置的读取与C方法详解的文章就讲到这里了,如果你想了解更多关于thinkPHP中配置的读取与C方法详解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!