检查 PHP 中的memory_limit

2022-08-30 10:13:23

我需要检查是否至少在我的脚本安装程序中。这只是PHP代码的一部分,应该工作,但可能是由于这个“M”,它没有正确读取值。如何解决这个问题?memory_limit64M

  //memory_limit
    echo "<phpmem>";
    if(key_exists('PHP Core', $phpinfo))
    {
        if(key_exists('memory_limit', $phpinfo['PHP Core']))
        {
            $t=explode(".", $phpinfo['PHP Core']['memory_limit']);
            if($t[0]>=64)
                $ok=1;
            else
                $ok=0;
            echo "<val>{$phpinfo['PHP Core']['memory_limit']}</val><ok>$ok</ok>";
        }
        else
           echo "<val></val><ok>0</ok>";
    }
    else
        echo "<val></val><ok>0</ok>";
    echo "</phpmem>\n"; 

答案 1

在命令行上检查:

php -i | grep "memory_limit"

答案 2

尝试先转换值(例如:64M -> 64 * 1024 * 1024)。之后,进行比较并打印结果。

<?php
$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
    }
}

$ok = ($memory_limit >= 64 * 1024 * 1024); // at least 64M?

echo '<phpmem>';
echo '<val>' . $memory_limit . '</val>';
echo '<ok>' . ($ok ? 1 : 0) . '</ok>';
echo '</phpmem>';

请注意,上述代码只是一个想法。不要忘记处理-1(无内存限制),纯整数值(以字节为单位的值),G(以千兆字节为单位的值),k / m / g(以千字节,兆字节,千兆字节为单位的值,因为速记不区分大小写)等。


推荐