ini_get_all()
(PHP 4 >= 4.2.0, PHP 5, PHP 7)
获取所有配置选项
说明
ini_get_all([string $extension[,bool $details= true]]): array
获取所有已注册的配置选项
参数
- $extension
可选的扩展名称。如果设置了,此函数仅仅返回指定该扩展的选项。
- $details
获取详细设置或者仅仅是每个设置的当前值。默认是
TRUE(获取详细信息)。
返回值
返回一个关联数组,指令名称是数组的键。
当$details为TRUE(默认),数组会包含global_value(php.ini中的设置)、local_value(可能是ini_set()或.htaccess中的设置)以及access(访问级别)。
当$details为FALSE,这个值会是选项的当前值。
参见手册章节中访问级别含义的信息。
Note:指令可以有多个访问级别,这也是为什么access会显示适当的位掩码。
注释
Note:ini_get_all()忽略"array"的 ini 选项,例如 pdo.dsn.*。
更新日志
| 版本 | 说明 |
|---|---|
| 5.3.0 | 增加参数$details。 |
范例
Example #1ini_get_all()例子
<?php
print_r(ini_get_all("pcre"));
print_r(ini_get_all());
?>
以上例程的输出类似于:
Array
(
[pcre.backtrack_limit] => Array
(
[global_value] => 100000
[local_value] => 100000
[access] => 7
)
[pcre.recursion_limit] => Array
(
[global_value] => 100000
[local_value] => 100000
[access] => 7
)
)
Array
(
[allow_call_time_pass_reference] => Array
(
[global_value] => 0
[local_value] => 0
[access] => 6
)
[allow_url_fopen] => Array
(
[global_value] => 1
[local_value] => 1
[access] => 4
)
...
)
禁用$details
<?php
print_r(ini_get_all("pcre", false)); // Added in PHP 5.3.0
print_r(ini_get_all(null, false)); // Added in PHP 5.3.0
?>
以上例程的输出类似于:
Array
(
[pcre.backtrack_limit] => 100000
[pcre.recursion_limit] => 100000
)
Array
(
[allow_call_time_pass_reference] => 0
[allow_url_fopen] => 1
...
)
参见
- 怎样修改配置设定
ini_get()获取一个配置选项的值ini_restore()恢复配置选项的值ini_set()为一个配置选项设置值get_loaded_extensions()返回所有编译并加载模块名的 arrayphpinfo()输出关于 PHP 配置的信息- ReflectionExtension::getINIEntries() 获取ini配置
I guess the third entry is the required access level (to change this variable at runtime): Constant Value Meaning PHP_INI_USER 1 Entry can be set in user scripts PHP_INI_PERDIR 2 Entry can be set in php.ini, .htaccess or httpd.conf PHP_INI_SYSTEM 4 Entry can be set in php.ini or httpd.conf PHP_INI_ALL 7 Entry can be set anywhere See also the docs for ini_set() Hugo.
echo recreate_php_ini();
/**
* Sample function to re-create a php ini config file.
*
* @return string
*/
function recreate_php_ini() {
$a = ini_get_all();
$data = [];
foreach (array_keys($a) as $k) {
$ss = split("\.", $k);
if (count($ss) == 1) {
$sec = "PHP";
$v = $k;
} else {
$sec = $ss[0];
$v = $ss[1];
}
$data[$sec][$v] = $a[$k]['global_value'];
}
ksort($data);
$out = "";
foreach ($data as $sec => $data) {
$out .= "[$sec]\n";
ksort($data);
foreach ($data as $k => $v) {
if (is_numeric($v)) {
$out .= sprintf("%-40s = %s\n", $k, $v);
} else {
$out .= sprintf("%-40s = \"%s\"\n", $k, $v);
}
}
$out .= "\n";
}
return $out;
}If you want to load and parse your own ini file, have a look at parse_ini_file() function. Example: <?php // ... $my_data = parse_ini_file($my_file, true);
You can use the following snippet on servers to grab the live/staging configs in order to be able to replicate those in your development environment. (I use `php -a` for this) <?php foreach (ini_get_all(null, false) as $key => $value) echo "$key=$value;\n"; ?>
Since a certain PHP version (I think it's 5.2.5) it is no longer possible to override INI entrys set with php_admin_* in httpd.conf. The access level will be set to 4 (PHP_INI_SYSTEM), which is also returned by this function. The constants mentioned below are available in PHP, but without the prefix (e.g. INI_USER, INI_PERDIR).
