From 73038c47e3312b4c62c4a0a05ecd5cdcd5eb95b7 Mon Sep 17 00:00:00 2001
From: Andreas Gohr <andi@splitbrain.org>
Date: Sat, 23 Feb 2008 19:07:01 +0100
Subject: [PATCH] Check memory settings on ?do

This should help with diagnosing memory related problems

darcs-hash:20080223180701-7ad00-1308829c3d7432b1d0c23c3f1acc8228c0a41e1e.gz
---
 inc/common.php    | 27 +++++++++++++++++++++++++++
 inc/infoutils.php | 14 ++++++++++++++
 lib/exe/fetch.php | 19 ++-----------------
 3 files changed, 43 insertions(+), 17 deletions(-)

diff --git a/inc/common.php b/inc/common.php
index 00cde2e92..ce32e42cb 100644
--- a/inc/common.php
+++ b/inc/common.php
@@ -1135,4 +1135,31 @@ function unslash($string,$char="'"){
   return str_replace('\\'.$char,$char,$string);
 }
 
+/**
+ * Convert php.ini shorthands to byte
+ *
+ * @author <gilthans dot NO dot SPAM at gmail dot com>
+ * @link   http://de3.php.net/manual/en/ini.core.php#79564
+ */
+function php_to_byte($v){
+    $l = substr($v, -1);
+    $ret = substr($v, 0, -1);
+    switch(strtoupper($l)){
+        case 'P':
+            $ret *= 1024;
+        case 'T':
+            $ret *= 1024;
+        case 'G':
+            $ret *= 1024;
+        case 'M':
+            $ret *= 1024;
+        case 'K':
+            $ret *= 1024;
+        break;
+    }
+    return $ret;
+}
+
+
+
 //Setup VIM: ex: et ts=2 enc=utf-8 :
diff --git a/inc/infoutils.php b/inc/infoutils.php
index bc162d0e7..1fc55702e 100644
--- a/inc/infoutils.php
+++ b/inc/infoutils.php
@@ -89,6 +89,20 @@ function check(){
     msg('PHP version '.phpversion(),1);
   }
 
+  $mem = (int) php_to_byte(ini_get('memory_limit'));
+  if($mem){
+    if($mem < 16777216){
+        msg('PHP is limited to less than 16MB RAM ('.$mem.' bytes). Increase memory_limit in php.ini',-1);
+    }elseif($mem < 20971520){
+        msg('PHP is limited to less than 20MB RAM ('.$mem.' bytes), you might encounter problems with bigger pages. Increase memory_limit in php.ini',-1);
+    }elseif($mem < 33554432){
+        msg('PHP is limited to less than 32MB RAM ('.$mem.' bytes), but that should be enough in most cases. If not, increase memory_limit in php.ini',0);
+    }else{
+        msg('More than 32MB RAM ('.$mem.' bytes) available.',1);
+    }
+  }
+
+
   if(is_writable($conf['changelog'])){
     msg('Changelog is writable',1);
   }else{
diff --git a/lib/exe/fetch.php b/lib/exe/fetch.php
index f41339bdc..8087cbd07 100644
--- a/lib/exe/fetch.php
+++ b/lib/exe/fetch.php
@@ -425,7 +425,7 @@ function resize_imageGD($ext,$from,$from_w,$from_h,$to,$to_w,$to_h){
  * Checks if the given amount of memory is available
  *
  * If the memory_get_usage() function is not available the
- * function just assumes $used bytes of already allocated memory
+ * function just assumes $bytes of already allocated memory
  *
  * @param  int $mem  Size of memory you want to allocate in bytes
  * @param  int $used already allocated memory (see above)
@@ -437,28 +437,13 @@ function is_mem_available($mem,$bytes=1048576){
   if(empty($limit)) return true; // no limit set!
 
   // parse limit to bytes
-  $unit = strtolower(substr($limit,-1));
-  switch($unit){
-    case 'g':
-      $limit = substr($limit,0,-1);
-      $limit *= 1024*1024*1024;
-      break;
-    case 'm':
-      $limit = substr($limit,0,-1);
-      $limit *= 1024*1024;
-      break;
-    case 'k':
-      $limit = substr($limit,0,-1);
-      $limit *= 1024;
-      break;
-  }
+  $limit = php_to_byte($limit);
 
   // get used memory if possible
   if(function_exists('memory_get_usage')){
     $used = memory_get_usage();
   }
 
-
   if($used+$mem > $limit){
     return false;
   }
-- 
GitLab