【问题标题】:Which is better php.ini vs ini_set()php.ini 与 ini_set() 哪个更好
【发布时间】:2024-12-23 07:15:02
【问题描述】:

我有一个简单的问题,我应该写设置或php.ini 文件还是在php 文件上使用ini_set()。哪个性能更好?

非常感谢。

【问题讨论】:

    标签: php ini ini-set


    【解决方案1】:

    取决于你的目标。默认情况下,php.ini 设置将应用于所有 php 应用程序,ini_set 将动态更改当前 php 应用程序的 php 设置。

    如果你有性能问题,php.ini 应该更快,因为你跳过了ini_set 的函数调用。

    【讨论】:

    • 你知道打开ini文件有多快吗?是不是已经接近微时间,甚至不用关心?
    • 您想在 php 应用程序运行时打开 php.ini 吗?
    • 不,我的意思是如果我使用 php.ini 而不是 ini_set(),如果它只快 0.1 秒,那不应该担心....对吗?我想知道更具体的消耗时间。
    • 我从未测量过,但是是的,我认为差异非常小。顺便说一句,如果您使用 Apache 网络服务器,您可以在 .htaccess 中进行。
    【解决方案2】:

    在典型的 2018 年硬件上运行 ini_set('date.timezone', $timezone) 1,000,000 次大约需要 500 毫秒。

    对于 PHP 7.1,ini_set() 绝对不会比加载另一个 .ini 文件慢。事实上,在带有require() 的第二个文件中运行ini_set() 比加载.ini 文件要快。

    即使是空的 .ini 文件也会有一些开销。我怀疑 .ini 文件在内部会做一些类似于 ini_set 的事情。

    # Baseline (no .ini, empty script)
    $ time for ((i=0;i<1000;i++)); do php -n empty.php; done
    real    0m21.214s
    
    # php.ini: date.timezone = Australia/Sydney
    $ time for ((i=0;i<1000;i++)); do php -c php.ini empty.php; done
    real    0m23.015s
    
    # inline.php: <?php ini_set('date.timezone', 'Australia/Sydney') 
    $ time for ((i=0;i<1000;i++)); do php -n inline.php; done
    real    0m21.150s
    

    这些数字似乎很有代表性。但是,这里的性能差异并没有那么大的意义。这可能归结为您需要什么样的环境一致性和灵活性。

    【讨论】:

      【解决方案3】:

      我认为 ini_set() 是比打开你的 ini 文件并进行更改更好的方法,因为如果你更改一次 ini 设置,它将适用于你所有的 php 项目,但在 ini_set() 中你甚至不必考虑您的其他 php 应用程序。

      【讨论】:

      • 你知道打开ini文件有多快吗?是不是已经接近微时间,甚至不用关心?
      • 从 php.ini 添加需要很短的时间。所以不必担心您的执行时间。