【问题标题】:ini_set() scope of effect?ini_set() 作用范围?
【发布时间】: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中的函数?

【问题讨论】:

    标签: php php-ini


    【解决方案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,我可能会错误地猜测该值在外部恢复我的“脚本”函数调用。所以不幸的是,如果人们不知道“脚本”指的是正在发生的整个执行线程,那么通过一遍又一遍地重复“脚本”这个词,答案就不会变得更清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多