有没有办法查看哪些php.ini值具有非默认设置?

时间:2018-03-20 19:53:52

标签: php configuration ini php-ini

我必须在旧的PHP 5服务器上做一些考古学。我一直在ini文件中挖掘,我发现检查哪些设置具有非默认值非常方便。我发现了php --iniphp -r 'php_info();'以及其他变体,以及ini_get_all() function,它们可以显示php ini文件中设置的值以及任何被覆盖的值(例如来自{{1} }或.htaccess)。

php.net文档描述了默认设置for every ini directive。有没有办法从PHP代码中访问这些默认值?这样我可以对ini_set的返回值进行一些简单的数组操作,并选择哪些具有非默认值。

我正在查看ini_restore并且给出的示例读取就好像它只恢复到启动值,即ini文件中配置的值,而不是php默认值。

1 个答案:

答案 0 :(得分:0)

  

此外,您可以将当前的ini文件重命名为php.ini以外的其他内容并重新启动PHP,以便ini_get_all将为您提供烘焙到核心中的值,并在重命名的文件上使用parse_ini_file()。 - MonkeyZeus

这很有魅力!在开始之前,我有一个链接conf.d,我已经覆盖cli/php.ini文件指向apache2/php.ini文件,以便我的php cli调用将使用Web服务器配置。 cli/php.ini文件已重命名为.old,如下所示:

$ ls -l /etc/php5/cli/
total 68
lrwxrwxrwx 1 root root     9 Apr 24  2013 conf.d -> ../conf.d
lrwxrwxrwx 1 root root    25 Mar 13 05:04 php.ini -> /etc/php5/apache2/php.ini
-rw-r--r-- 1 root root 67629 Mar  4  2013 php.ini.old

我将Web服务器从我们的负载均衡器池中取出并进行了一些修改。

$ rm /etc/php5/cli/conf.d /etc/php5/cli/php.ini
$ php --ini
Configuration File (php.ini) Path: /etc/php5/cli
Loaded Configuration File:         (none)
Scan for additional .ini files in: /etc/php5/cli/conf.d
Additional .ini files parsed:      (none)

然后我添加了一个名为check_config.php的文件,其中包含以下内容:

echo("\nDefaults that are changed by or not present in ini file $path:\n");
print_r(array_diff_assoc($defaults, $ini));

echo("\nValues set by $path which differ from or are not included in the defaults:\n");
print_r(array_diff_assoc($ini, $defaults));

并获得了一些美味的产品。

$ /usr/bin/php /etc/php5/cli/check_config.php 

Defaults that are changed by or not present in ini file /etc/php5/apache2/php.ini:
Array
(
    [allow_call_time_pass_reference] => 1
    [allow_url_include] => 0
    //...snip
)

Values set by /etc/php5/apache2/php.ini which differ from or are not included in the defaults:
Array
(
    [engine] => 1
    [asp_tags] => 
    //...snip
)

这就是我想要的,但它有很多红色的鲱鱼 - 很多指令都有一个默认值但是没有包含在ini文件中,同样很多模块特定的指令也没有包含在返回的值中ini_get_all()。我想我可以通过进一步改进配置设置来改善这一点,以便启用更多的模块,这些模块应该将它们的指令包含在列表中,但是有相当多的模块,所以我认为我现在很好。