ini_get

(PHP 4, PHP 5, PHP 7, PHP 8)

ini_get获取配置选项的值

说明

ini_get(string $option): string|false

如果成功,则返回配置选项的值。

参数

option

配置选项名称。

返回值

如果成功,则返回配置选项的值作为字符串,如果值为 null,则返回空字符串。如果配置选项不存在,则返回 false

示例

示例 #1 一些 ini_get() 示例

<?php

/*
我们的 php.ini 包含以下设置:

display_errors = On
register_globals = Off
post_max_size = 8M
*/

echo 'display_errors = ' . ini_get('display_errors') . "\n";
echo
'register_globals = ' . (int) ini_get('register_globals') . "\n";
echo
'post_max_size = ' . ini_get('post_max_size') . "\n";
echo
'post_max_size + 1 = ' . (rtrim(ini_get('post_max_size'), 'KMG') + 1) . "\n";
echo
'post_max_size in bytes = ' . return_bytes(ini_get('post_max_size'));

function
return_bytes($val)
{
$val = trim($val);
$num = (int) rtrim($val, 'KMG');
$last = strtolower($val[strlen($val) - 1]);

switch (
$last) {
// 'G' 修饰符可用
case 'g':
$num = $num * 1024 * 1024 * 1024;
break;
case
'm':
$num = $num * 1024 * 1024;
break;
case
'k':
$num *= 1024;
break;
}

return
$num;
}

?>

上面的示例将输出类似于以下内容:

display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9
post_max_size in bytes = 8388608

注释

注意: 查询布尔值时

一个布尔型 ini 值 off 将被返回为空字符串或 "0",而一个布尔型 ini 值 on 将被返回为 "1"。该函数还可以返回 INI 值的字面字符串。

注意: 查询内存大小值时

许多 ini 内存大小值,例如 upload_max_filesize,存储在 php.ini 文件中,使用简写符号。 ini_get() 将返回存储在 php.ini 文件中的确切字符串,而不是int 等价物。尝试对这些值进行正常的算术运算将不会得到预期的结果。上面的示例展示了一种将简写符号转换为字节的方法,这与 PHP 源码中所做的方法类似。

注意:

ini_get() 无法读取 "数组" 型 ini 选项,例如 pdo.dsn.*,在这种情况下将返回 false

参见

添加注释

用户贡献注释 12 条注释

Stas Trefilov, OpteamIS
14 年前
return_bytes 的另一个版本,运行速度更快,不使用多次乘法(抱歉:)。即使它是编译时解决的,这也是一个不好的做法;
没有分配局部变量;
省略了 trim()(php 在读取 php.ini 文件时已经修剪了值);
strtolower() 被第二个 case 替换,这为我们节省了一个函数调用的代价,但却使要处理的 case 数量增加了一倍(可能会减慢最坏情况下的速度,因为到达默认情况下需要六次比较,而不是三次比较和一个函数调用);
case 按最频繁的排在最前面(大写 M 值是默认大小);
规格说明我们必须处理整数大小,所以浮点值被转换为整数,0.8G 变成 0;
'Gb', 'Mb', 'Kb' 简写字节选项未实现,因为它们不在规范中,请参见
https://php.net/manual/en/faq.using.php#faq.using.shorthandbytes

<?php
function return_bytes ($size_str)
{
switch (
substr ($size_str, -1))
{
case
'M': case 'm': return (int)$size_str * 1048576;
case
'K': case 'k': return (int)$size_str * 1024;
case
'G': case 'g': return (int)$size_str * 1073741824;
default: return
$size_str;
}
}
?>
devsrealmGuy
3 年前
以下是用 PHP8 获取结果以字节为单位的另一种方法

<?php

/**
* @param string $size
* @return int
* @author DevsrealmGuy
*/
public function getBytes(string $size): int
{
$size = trim($size);

#
# 从度量单位中分离出值(例如 MB、GB、KB)
#
preg_match('/([0-9]+)[\s]*([a-zA-Z]+)/', $size, $matches);

$value = (isset($matches[1])) ? $matches[1] : 0;
$metric = (isset($matches[2])) ? strtolower($matches[2]) : 'b';

#
# $value 的结果乘以匹配的用例
# 注意:(1024 ** 2) 等同于 (1024 * 1024) 或 pow(1024, 2)
#
$value *= match ($metric) {
'k', 'kb' => 1024,
'm', 'mb' => (1024 ** 2),
'g', 'gb' => (1024 ** 3),
't', 'tb' => (1024 ** 4),
default =>
0
};

return (int)
$value;
}

#
# 测试:如果它不符合匹配标准,则默认为 0
#
echo getBytes('2GB') . "</br>";
# 输出:2147483648
echo getBytes('4tb') . "</br>";
# 输出:4398046511104
echo getBytes('5345etrgrfd') . "</br>";
# 输出:0
echo getBytes('357568336586') . "</br>";
# 输出:0
?>
IceNV
7 年前
请注意,XDebug 可能会更改 max_execution_time。

在本地调试使用 <?php ini_get('max_execution_time'); ?> 的脚本时,当启用 XDebug 远程调试且 IDE 正在监听它时,它返回 0。

这是有道理的,因为手动调试需要时间,因此我们不希望脚本超时;但在这种特定情况下,它使脚本看起来像 max_execution_time 为 0,因此计算错误。

您可以在 phpinfo() 中看到在这种情况下本地值为 0,但主值为在 php.ini 中设置的正确值。
filh at filh dot org
18 年前
关于返回值,它取决于您的设置方式。
我在 horde-3 中遇到了这个问题,它会测试 safe_mode 值。
然后
- 如果您使用 php_admin_value safe_mode Off(或 On)设置值,ini_get 将返回字符串
- 如果您使用 php_admin_flag safe_mode Off(或 On)设置值,ini_get 将返回布尔值。
Ivo Mandalski
12 年前
此版本的 return_bytes 处理了 MB、GB、KB 的情况以及 M、G、K 的情况。
希望这有帮助!

<?php
public static function return_bytes ($val)
{
if(empty(
$val))return 0;

$val = trim($val);

preg_match('#([0-9]+)[\s]*([a-z]+)#i', $val, $matches);

$last = '';
if(isset(
$matches[2])){
$last = $matches[2];
}

if(isset(
$matches[1])){
$val = (int) $matches[1];
}

switch (
strtolower($last))
{
case
'g':
case
'gb':
$val *= 1024;
case
'm':
case
'mb':
$val *= 1024;
case
'k':
case
'kb':
$val *= 1024;
}

return (int)
$val;
}
?>
Joe Huss detain at interserver dot net
2 年前
这里有一个版本,它结合了这里的几个示例,它不需要 php8,也不会生成警告

/**
* 从人类可读字符串(如 10G)中转换的字节值
*
* @param mixed $val 人类可读/缩写形式的值
* @return int 转换为字节的值
*/
function return_bytes($val) {
$val = trim($val);
preg_match('/([0-9]+)[\s]*([a-zA-Z]+)/', $val, $matches);
$value = (isset($matches[1])) ? intval($matches[1]) : 0;
$metric = (isset($matches[2])) ? strtolower($matches[2]) : 'b';
switch ($metric) {
case 'tb'
case 't'
$value *= 1024;
case 'gb'
case 'g'
$value *= 1024;
case 'mb'
case 'm'
$value *= 1024;
case 'kb'
case 'k'
$value *= 1024;
}
return $value;
}
david dot tulloh at infaze dot com dot au
19 年前
您可以在 ini 文件中设置自定义条目以提供全局变量,例如数据库详细信息。
但是,这些必须使用 get_cfg_var 获取,ini_get 不起作用。
bishop@php
8 年前
return_bytes 的另一种实现

<?php
function return_bytes($val)
{
assert('1 === preg_match("/^\d+([kmg])?$/i", $val)');
static
$map = array ('k' => 1024, 'm' => 1048576, 'g' => 1073741824);
return (int)
$val * @($map[strtolower(substr($val, -1))] ?: 1);
}
?>

如果您使用的是 PHP >= 7,您可以用 ?? 替换 ?: 以避免使用 @ 静音器。
peter
16 年前
上面示例函数名为 return_bytes(),它假设 ini_get('upload_max_filesize') 在末尾只传递一个字母。因为我见过 'Mb' 之类的,所以我建议将 $last = ... 部分更改为 $last = strtolower(substr($val,strlen($val/1),1))。
我会将其称为 $unit。
nicolas dot grekas+php at gmail dot com
14 年前
以下是准确测试 php.ini 布尔值的方法

<?php

function ini_get_bool($a)
{
$b = ini_get($a);

switch (
strtolower($b))
{
case
'on':
case
'yes':
case
'true':
return
'assert.active' !== $a;

case
'stdout':
case
'stderr':
return
'display_errors' === $a;

default:
return (bool) (int)
$b;
}
}

?>
Der Graph
19 年前
对于包含其他文件的包含脚本,扩展 'include_path' 变量可能很有用

<?php ini_set('include_path',ini_get('include_path').':../includes:'); ?>

有时,将当前 'include_path' 存储在一个变量中,覆盖它,包含它,然后恢复旧的 'include_path' 也很有用。
bishop at php dot net
8 年前
类似地,将标志转换为正确的布尔值

<?php
function return_boolean($val)
{
static
$map = array ('on' => true, 'true' => true, 'off' => false, 'false' => false);
return @(
$map[strtolower($val)] ?: (bool)$val);
}
?>

如果您使用的是 PHP >= 7,请考虑将 ?: 替换为 ?? 并删除 @ 静音符。
To Top