PHP Conference Japan 2024

ini_set

(PHP 4、PHP 5、PHP 7、PHP 8)

ini_set设置配置选项的值

描述

ini_set(string $option, string|int|float|bool|null $value): string|false

设置给定配置选项的值。配置选项将在脚本执行期间保持此新值,并在脚本结束后恢复。

参数

option

并非所有可用选项都可以使用 ini_set() 更改。 附录 中列出了所有可用选项。

value

选项的新值。

返回值

成功时返回旧值,失败时返回 false

更新日志

版本 描述
8.1.0 value 现在接受任何标量类型(包括 null)。以前,只接受 string 值。

示例

示例 #1 设置 ini 选项

<?php
echo ini_get('display_errors');

if (!
ini_get('display_errors')) {
ini_set('display_errors', '1');
}

echo
ini_get('display_errors');
?>

参见

添加注释

用户贡献的注释 13 个注释

nl-x
10 年前
我在某些系统上遇到过 ini_set() 失败并返回 false 的情况,当尝试设置在 php.ini 中针对每个主机设置的设置时。请注意这一点。
Tr909 at com dot nospam dot bigfoot
22 年前
[[[编者注:是的,这非常正确。与
register_globals、magic_quotes_gpc 等相同。
]]]

许多设置,虽然已设置,但在您的脚本中没有影响……例如 upload_max_filesize 将被设置,但在更改设置之前,上传的文件已经传递到您的 PHP 脚本。

同样,由于这个原因(post_max_size 等),通过 ini_set() 设置的其他设置可能为时已晚。
注意,尝试通过 php.ini 或 .htaccess 进行设置。
ASchmidt at Anamera dot net
7 年前
检查 ini_set() 是否成功时,请记住,它将在成功时返回旧值 - 该值可能为“0”。因此,您不能只比较返回值 - 您必须检查“同一性”。

<?php

// 这不会确定 ini_set() 是否成功,而是
// 它只测试旧值是否等效于 false
if ( !ini_set( 'display_errors', '1' ) )
throw new
\Exception( '无法设置 display_errors。' );

// 这是确定是否成功的正确方法
if ( ini_set( 'display_errors', '1' ) === false )
throw new
\Exception( '无法设置 display_errors。' );

?>

这解释了 ini_set()“总是”似乎失败的报告情况!
daevid at daevid dot com
18 年前
设置 output_handler 时要小心,因为您不能使用 ini_set() 来更改它。*叹气*

在我的 php.ini 中,我的网页有这个(我想要它)

output_handler = ob_gzhandler

但这会导致我的命令行脚本直到最后才显示输出。

#!/usr/bin/php -q
<?php
ini_set
('output_handler', 'mb_output_handler');
echo
"\noutput_handler => " . ini_get('output_handler') . "\n";
?>

root@# ./myscript.php
output_handler => ob_gzhandler

显然(根据 Richard Lynch 的说法)

> 太晚了!
> 此时 ob_start() 已经启动。
> ob_flush() 直到没有更多缓冲区。
miroslav AT simunic DOT de
22 年前
如果不是您的服务器,因此您想对其他用户隐藏会话变量中的数据,那么在脚本中使用以下命令将 session.save_handler 设置为共享内存非常有用

<?php ini_set('session.save_handler','mm'); ?>

记住:您必须在使用会话变量的每个脚本中在“session_start()”之前设置它,否则 php 将找不到它们。
匿名
10 年前
请注意,此函数仅适用于 PHP_INI_ALL 选项!
RebootConcepts.com
18 年前
使用 'php_flag' 在 .htaccess 文件中设置 PHP_INI_PERDIR 设置,如下所示

php_flag register_globals off
php_flag magic_quotes_gpc on
Ron Ludwig
18 年前
当您的 ISP 不允许您添加默认包含目录时,扩展“include_path”变量可能很有用

<?php ini_set('include_path',ini_get('include_path').':../includes:'); ?>
Nathan
13 年前
小心 - 在某些情况下,当通过 ini_set 将 zlib.output_compression 设置为“On”时,PHP 不会发送 Content-type 标头,浏览器会 garble 输出。将其设置为所需的缓冲区大小,这将发送正确的标头

<?php
ini_set
("zlib.output_compression", 4096);
?>
Julien MOREAU aka PixEye
2 年前
要更改 zend.assertions 或 assert.exception 值,请尝试使用 ini_set() 函数,但请注意它可能会失败。

示例
<?php
$ret
= @ini_set('zend.assertions', '1');
if (
$ret === false) echo 'ini_set() failed before line ', __LINE__, PHP_EOL;
sean at php dot net
20 年前
虽然这不属于手册,但它应该对在本页查找通常安装的 zend_optimizer.* ini 选项的人员有用

有关“zend_optimizer.optimization_level”和“zend_optimizer.enable_loader”选项的信息,请访问

http://www.zend.com/support/user_docs/ZendOptimizer/PDF/ZendOptimizer_UserGuide.pdf
johnzoet at netscape dot com
22 年前
[[[编者注:仅仅因为您能够设置某些内容
并不意味着它会按预期工作。取决于
设置。例如。设置 register_globals 在
运行时将没有什么用,因为它的工作已经
在到达您的脚本时完成。
]]]

当无法在用户脚本中更改设置时,ini_set 的返回值是“空”,而不是您可能期望的“false”。
如果您在脚本中检查返回值是否为“false”,则脚本将继续处理,尽管尚未设置该设置。
布尔返回值用于可以在脚本中更改的设置。否则返回空值。
要测试两种错误情况,请使用

<?php
if (empty($blnResult) or (!$blnResult)) {
echo
"无法设置设置";
exit;
}
?>
Er.ellison
9 年前
如果您收到类似以下的通用错误:
超过 30 秒的最大执行时间

如果您设置 ini_set(max_execution_time, 300);
您的问题将得到解决
请注意,300 表示 300 秒,这意味着 5 分钟,您可以设置其他值!
To Top