.htaccess增加PHP内存限制只有当全局值较低时


.htaccess increase PHP memory limit ONLY if global is lower

我知道有一种方法可以在.htaccess文件中设置PHP内存限制:

<IfModule mod_php5.c>
    php_value memory_limit 1024M
</IfModule>

或使用mod_php7.c代替mod_php5.c,如果运行PHP7,而不是PHP5。

但是是否有一种方法(一些条件指令)只有在全局配置中设置的原始memory_limit低于.htaccess值时才能做到这一点?即确保.htaccess文件中的条目总是增加,而不是减少限制?

不,这是不可能的。但是,您可以做的是auto_prepend一个PHP文件,它可以做您想做的事情。您可以在.htaccess文件中指定此文件,它将被添加到任何PHP文件中:

raise_memory_limit.php:

// return_bytes() function directly taken from http://php.net/ini_get
function return_bytes($val) {
  $val = trim($val);
  $last = strtolower($val[strlen($val)-1]);
  switch($last) {
      // The 'G' modifier is available since PHP 5.1.0
      case 'g':
          $val *= 1024;
      case 'm':
          $val *= 1024;
      case 'k':
          $val *= 1024;
  }
  return $val;
}
if (return_bytes(ini_get('memory_limit')) < 1024 * 1024 * 1024) {
    ini_set('memory_limit', '1024M');
}

. htaccess :

php_value auto_prepend_file "./raise_memory_limit.php"

这样,您就不必触及任何PHP文件,并且仍然能够在应用程序运行之前执行PHP代码。请注意,这里指定的任何全局变量和函数都将在所有PHP文件中可用,因此要小心。