ini_set() 作用范围?

Posted

技术标签:

【中文标题】ini_set() 作用范围?【英文标题】:ini_set() scope of effect? 【发布时间】:2011-09-23 08:57:58 【问题描述】:

我有index.php 和几个级联包含的文件,类似这样。

index.php -> controller.php -> model.php -> view.php

model.php我有一个使用ini_set('memory_limit', '-1');的函数

ini_set() 设置更改什么时候到期?

执行后index.php?还是view.php?还是model.php中的函数?

【问题讨论】:

【参考方案1】:

ini_set() 对于脚本中发生的所有事情(不仅仅是当前文件:正在发生的整个执行线程)都是全局,对于整个一个请求;不管你从哪里调用它,它总是会影响这个脚本的全局设置。当您的脚本终止时,效果将过期 - 例如通过exitdie,或者跑到index.php的末尾。

不会影响其他同时运行的脚本(需要自己调用ini_set),也不会持久化到后面的请求中(如果需要持久化设置,需要编辑php.ini)。

注意documentation says the same thing:

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


编辑:由于显然不清楚:您使用 ini_set 更改的值将在整个脚本之后有效。当前执行的位置无关紧要(在什么文件中,在什么类中,在什么函数中);设置将是相同的,无处不在。它会一直保持下去,直到您再次更改它,或者直到整个脚本终止。 (不是当前文件,不是当前函数;整个脚本)

【讨论】:

我已经阅读了文档,但我想知道使用此函数后它会影响函数范围(如变量)还是整个脚本。我不确定他们的“脚本”是什么意思。 @thReality:你看我的回答了吗?引用:“不管你从哪里调用它,它总是会影响这个脚本的全局设置”——换句话说,完全不管函数范围。 “无论你从哪里调用它都无关紧要”当你调用它时很重要,“ini_set 将从整个脚本开始有效。”; @user973810:PHP 文档的链接对您来说还不够参考吗?对不起,我没有比这更权威的了。 “在脚本执行期间”如果您不确定“脚本”的含义,则并不明显。如果我在“myclass.php”中定义一个类,我可能会认为“myclass.php”是一个 PHP“脚本”,如果我在该类的函数中调用 ini_set,我可能会错误地猜测该值在外部恢复我的“脚本”函数调用。所以不幸的是,如果人们不知道“脚本”指的是正在发生的整个执行线程,那么通过一遍又一遍地重复“脚本”这个词,答案就不会变得更清楚。

以上是关于ini_set() 作用范围?的主要内容,如果未能解决你的问题,请参考以下文章

ini_set

ini_set()

php的ini_set函数

关于使用 ini_set('max_execution_time', 0);

php [ini_set]#电影业务

php配置可被设定范围