在脚本中使用 ini_set 被认为是不良实践吗?

4

我正在进行代码审查,发现有两处问题:

ini_set('memory_limit', '512M');

它被用在一个函数中。这样做可以吗?某种程度上,这种做法似乎不太正确。这被认为是一种不良实践吗?

谢谢!

7个回答

2

这没有问题。考虑一个情况,PHP的ini文件中全局设置了memory_limit,而你想仅为一个特定的脚本/请求覆盖该设置,以允许操作使用更多的内存。

在PHP脚本中调用ini_set只会在执行该特定请求时产生影响。


1

这并不是坏事。 因为你可能没有访问php.ini的权限 或者某个值你只需要在一个脚本中使用。


1

我的观点(你要求意见,我认为):

[开始观点]

当然,使用ini_set('memory_limit',...)不是一个坏习惯;

但如果脚本需要大量内存,我总是把这样的声明放在脚本顶部,而不是放在函数中...

如果你养成了在函数中更改内存要求的习惯,那么如果许多这样的函数在同一个脚本中被调用,很难弄清楚当前的设置。

因此,在代码审查中,如果只发生一两次,不是一个非常糟糕的做法,但如果你经常遇到它,我会提出警告。

[结束观点]


1

你可以将此函数调用包装在另一个被调用的函数中,这样一来,如果未来有更好的方法或者你想要轻松全局更新内存限制,就可以更改实现。

function setMemory($limit = '512M') {
    ini_set('memory_limit', $limit);
}

0

在任何情况下,使用脚本来开始任何事情都往往是一个不好的做法,但如果您正在设置诸如内存之类的属性,则并不像尝试执行其他脚本那样糟糕。


0
如果您使用需要512M的脚本,而且您没有权限更改php.ini上的设置,那么使用ini_set是可以的。

0

注意:同一 PHP 脚本可以被多个用户运行
如果您有10个用户正在运行您的脚本,则您的服务器可能会耗尽内存:10 X 512M = 5120M = 5G,所以要小心!

使用 ini_set() 函数并不被认为是一种不好的做法,但您必须遵循一些规则,以保持代码整洁:

将所有的 ini_set() 集中在同一个配置文件中
custom_ini_set.php

function custom_ini_set($script_path_name_s) {
        switch ($script_path_name_s) {
            case '/dir1/sub_dir1/script1.php' : {
                ini_set('memory_limit', '512M');
                break;
            }

            case '/dir1/sub_dir2/script2.php' : {
                ini_set('memory_limit',         '256M');
                ini_set('max_execution_time',   128);
                break;
            }
            // ...
        }
    }

并在需要更多资源的脚本中调用此函数:

require_once   ('custom_ini_set.php');
custom_ini_set (__FILE__);

最好将此内容放在XML文件中,而不是PHP文件中 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接