“本地值”和“主值”的区别是什么?

98

当我显示phpinfo();时,我看到两列:local value(本地值)master value(主值)。Web服务器什么时候会选择local value,什么时候会选择master value

4个回答

92

master是在PHP编译时预设的值,或者通过主要的php.ini指令设置。也就是说,在PHP启动之前,执行任何代码之前,这个值就已经生效了。

local是在调用phpinfo()时当前生效的值。这个本地值是通过ini_set()、httpd.conf/.htaccess中的php_value指令等覆盖操作后的最终结果

例如:

php.ini:     foo=bar
httpd.conf:  php_value foo baz
.htaccess:   php_value foo qux
ini_set:     ini_set('foo', 'kittens');
.user.ini    foo=bar   # this file works conditionally see https://dev59.com/SlwY5IYBdhLWcg3w0KnL#32193087

考虑到,master 的值为 qux,而 local 的值为 kittens


10
根据您所写的内容,主值应该是“bar”,因为它在php.ini文件中设置了。 - Aine
1
@Aine 是的,在这个例子中,“主值”(由 phpinfo() 报告)确实是“bar”。这正如答案的第一段所述(不确定为什么在示例中推理上似乎有所改变?)。在 httpd.conf.htaccess.user.ini 等文件中设置 PHP 配置值不会更改报告的“主值”,只会更改“本地值”。 - MrWhite
2
答案中并不清楚 .user.ini 文件也可以改变本地值。我建议编辑答案以使其更加明确。 - Jeff Baker
3
根据答案的第一段,我认为答案的最后一行应该是“鉴于此,主值为bar,本地值为baz(如果在httpd.conf中设置),qux(如果在.htaccess中设置),kittens(如果使用ini_set设置)”。如果我正确理解了这个概念,并且我建议的最后一个陈述也是正确的,请将答案的最后陈述更改为我建议的那个,以消除混淆。 - PHPLover
2
@MarcB:请更新您的答案,以消除关于“主值”“qux”的混淆。 - PHPFan
显示剩余4条评论

15

"Master Value" (从 php.ini 中) 可以通过在 httpd.conf, .htaccess 或其他 Apache 配置中使用 php_value 指令来被覆盖为 "Local Value"。

第一个是本地值,第二个是全局值。本地值优先于全局值并在 PHP、HTACCESS 等中设置,而全局值在 php.ini 中设置。回答您的问题,将使用第一个值。


6
举例来说,如果本地数值为0,但是主数值为1440,网络服务器会始终使用0,对吗? - Liauchuk Ivan
7
第一个值是局部值,第二个值是全局值。局部值将覆盖全局值,并在PHP、HTACCESS等中设置,而全局值在php.ini中设置。回答你的问题,使用第一个值;局部值 = 0。 - Legionar

7
托管的网站将首先检查本地文件夹中 .htaccess.user.ini 的值。(这些文件通常用作本地级别的配置文件)
本地值会覆盖主要值,因此 php 首先会检查本地值。
主要值在 php.ini (主 PHP 配置文件) 中设置。 在终端中运行以下命令以查找正确的路径:
php -i | grep 'Configuration File'

或者

php -i | grep php.ini

即使我们在php.ini中设置了主要值,我们也需要检查.htaccess.user.ini中的本地值。

以下是有关.htaccess.user.ini之间区别的解释:https://dev59.com/SlwY5IYBdhLWcg3w0KnL#32193087


“也可以说是本地级别的配置文件”这句话是什么意思?看起来有些难以理解。请通过编辑(更改)您的答案来回复,而不是在评论中回复(不要加上“编辑:”,“更新:”或类似的内容——答案应该看起来像是今天写的)。 - Peter Mortensen

0

local是指网站或用户范围,而master是系统范围的配置选项。

如果将其命名为“global”而不是master,则会更容易和更快地理解。

由于隐藏的.user.ini.htaccess文件是站点范围的,因此它们包含本地值以及ini_set函数来设置.php文件中的选项。

PHPRCPHP_INI_SCAN_DIR文件将包含主(全局,系统范围)值。

PHPRC:/etc/php.ini

PHP_INI_SCAN_DIR:/etc/php/*.ini


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接