【问题标题】:Check if max_execution_time and memory_limit is set to desired values检查 max_execution_time 和 memory_limit 是否设置为所需值
【发布时间】:2018-08-07 04:54:25
【问题描述】:

我有以下php函数

function allocate_resources()
{
    ini_set('max_execution_time',2700); //set maximum execution time of script
    ini_set('memory_limit','1024M'); //set memory_limit for script
}

这个函数在很多函数中被调用来分配资源,所以我想检查一下

如果 ma​​x_execution_time 未设置为 2700,则将其设置为 2700

如果 memory_limit 未设置为 1024M,则将其设置为 1024M

也欢迎任何更好的解决方案。

【问题讨论】:

    标签: php


    【解决方案1】:

    使用

    $max_time = ini_get("max_execution_time");
    $memory_limit = ini_get('memory_limit');
    

    获取max_execution_time & memory_limit。并使用if 检查是否设置了这些值,如果没有应用你的。

    获取memory_limit

    $memory_limit = ini_get('memory_limit');
    if (preg_match('/^(\d+)(.)$/', $memory_limit, $matches)) {
        if ($matches[2] == 'M') {
            $memory_limit = $matches[1] * 1024 * 1024; // nnnM -> nnn MB
        } else if ($matches[2] == 'K') {
            $memory_limit = $matches[1] * 1024; // nnnK -> nnn KB
        }
    }
    

    需要注意的是ini_set('max_execution_time', 2700);set_time_limit(2700);并不完全是同义词,因为set_time_limit()将计数器“重置”为0,而ini_set()不会。

    【讨论】:

    • 谢谢@Sinto,如何检查if ( ini_get("memory_limit") < 1024M )和避免PHP Parse error: syntax error, unexpected 'M'
    • 我函数中的值是硬编码的,为了提高效率我应该这样使用吗if ( ini_get("memory_limit") < 1048576 ) { ini_set('memory_limit','1024M'); }
    • 对,你可以直接使用
    【解决方案2】:

    使用 ini_get()

    来自http://php.net/manual/en/function.ini-get.php

    (PHP 4、PHP 5、PHP 7)

    获取配置选项的值

    例如$max_exec_time = ini_get('max_execution_time');

    【讨论】:

      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-22
      • 2013-06-04
      • 2015-10-27
      • 1970-01-01
      • 2021-01-28
      相关资源
      最近更新 更多