当我显示phpinfo();
时,我看到两列:local value(本地值)
和master value(主值)
。Web服务器什么时候会选择local value
,什么时候会选择master value
?
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
。
"Master Value" (从 php.ini 中) 可以通过在 httpd.conf, .htaccess 或其他 Apache 配置中使用 php_value 指令来被覆盖为 "Local Value"。
第一个是本地值,第二个是全局值。本地值优先于全局值并在 PHP、HTACCESS 等中设置,而全局值在 php.ini 中设置。回答您的问题,将使用第一个值。
.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
local是指网站或用户范围,而master是系统范围的配置选项。
如果将其命名为“global”而不是master,则会更容易和更快地理解。
由于隐藏的.user.ini
和.htaccess
文件是站点范围的,因此它们包含本地值以及ini_set
函数来设置.php
文件中的选项。
PHPRC
和PHP_INI_SCAN_DIR
文件将包含主(全局,系统范围)值。
PHPRC
:/etc/php.ini
PHP_INI_SCAN_DIR
:/etc/php/*.ini
phpinfo()
报告)确实是“bar”。这正如答案的第一段所述(不确定为什么在示例中推理上似乎有所改变?)。在httpd.conf
、.htaccess
或.user.ini
等文件中设置 PHP 配置值不会更改报告的“主值”,只会更改“本地值”。 - MrWhite