}
$oldmemlimit = get_real_size($oldmemlimit);
//now lets change the memory limit to something unique below 128M==134217728
- @ini_set('memory_limit', 134217720);
+ if (empty($CFG->memorylimit)) {
+ raise_memory_limit('128M');
+ } else {
+ raise_memory_limit($CFG->memorylimit);
+ }
$testmemlimit = get_real_size(@ini_get('memory_limit'));
//verify the change had any effect at all
if ($oldmemlimit == $testmemlimit) {
return false;
}
}
- @ini_set('memory_limit', $oldmemlimit);
+ reduce_memory_limit($oldmemlimit);
return false;
}
function severity() {
// "performance" settingpage
$temp = new admin_settingpage('performance', get_string('performance', 'admin'));
+
+$temp->add(new admin_setting_special_selectsetup('memorylimit', get_string('memorylimit', 'admin'),
+ get_string('configmemorylimit', 'admin'), '128M',
+ array( '64M' => '64M',
+ '128M' => '128M',
+ '256M' => '256M',
+ '1024M' => '1024M'
+ )));
$temp->add(new admin_setting_special_selectsetup('cachetype', get_string('cachetype', 'admin'),
get_string('configcachetype', 'admin'), '',
array( '' => get_string('none'),
mtrace($debuginfo.'Required function check failed (see backup_required_functions)');
return false;
}
-
@ini_set("max_execution_time","3000");
- raise_memory_limit("192M");
+ if (empty($CFG->memorylimit)) {
+ raise_memory_limit('128M');
+ } else {
+ raise_memory_limit($CFG->memorylimit);
+ }
if (!$backup_unique_code = restore_precheck($destinationcourse,$pathtofile,$errorstr,true)) {
mtrace($debuginfo.'Failed restore_precheck (error was '.$errorstr.')');
//Adjust some php variables to the execution of this script
@ini_set("max_execution_time","3000");
- raise_memory_limit("192M");
+ if (empty($CFG->memorylimit)) {
+ raise_memory_limit('128M');
+ } else {
+ raise_memory_limit($CFG->memorylimit);
+ }
//Call the form, depending the step we are
//Adjust some php variables to the execution of this script
@ini_set("max_execution_time","3000");
- raise_memory_limit("192M");
+ if (empty($CFG->memorylimit)) {
+ raise_memory_limit('128M');
+ } else {
+ raise_memory_limit($CFG->memorylimit);
+ }
echo "<pre>\n";
$string['configmaxevents'] = 'Events to Lookahead';
$string['configmemcachedhosts'] = 'For memcached. Comma-separated list of hosts that are running the memcached daemon. Use IP addresses to avoid DNS latency. memcached does not behave well if you add/remove hosts on a running setup.';
$string['configmemcachedpconn'] = 'For memcached. Use persistent connections. Use carefully -- it can make Apache/PHP crash after a restart of the memcached daemon.';
+$string['configmemorylimit'] = 'This sets the maximum amount of memory that a script is allowed to allocate. This option is applied to search indexing, backup/restore and admin/health scripts.';
$string['configmessaging'] = 'Should the messaging system between site users be enabled?';
$string['configminpassworddigits'] = 'Passwords must have at least these many digits.';
$string['configminpasswordlength'] = 'Passwords must be at least these many characters long.';
$string['mediapluginwmv'] = 'Enable .wmv filter';
$string['memcachedhosts'] = 'memcached hosts';
$string['memcachedpconn'] = 'memcached use persistent connections';
+$string['memorylimit'] = 'PHP memory limit';
$string['messaging'] = 'Enable messaging system';
$string['minpasswordlength'] = 'Password Length';
$string['minpassworddigits'] = 'Digits';
return false;
}
+/**
+ * Function to reduce the memory limit to a new value.
+ * Will respect the memory limit if it is lower, thus allowing
+ * settings in php.ini, apache conf or command line switches
+ * to override it
+ *
+ * The memory limit should be expressed with a string (eg:'64M')
+ *
+ * @param string $newlimit the new memory limit
+ * @return bool
+ */
+function reduce_memory_limit ($newlimit) {
+ if (empty($newlimit)) {
+ return false;
+ }
+ $cur = @ini_get('memory_limit');
+ if (empty($cur)) {
+ // if php is compiled without --enable-memory-limits
+ // apparently memory_limit is set to ''
+ $cur=0;
+ } else {
+ if ($cur == -1){
+ return true; // unlimited mem!
+ }
+ $cur = get_real_size($cur);
+ }
+
+ $new = get_real_size($newlimit);
+ // -1 is smaller, but it means unlimited
+ if ($new < $cur && $new != -1) {
+ ini_set('memory_limit', $newlimit);
+ return true;
+ }
+ return false;
+}
+
/**
* Converts numbers like 10M into bytes.
*
*/
try{
- // overrides php limits
- $maxtimelimit = ini_get('max_execution_time');
- ini_set('max_execution_time', 600);
- $maxmemoryamount = ini_get('memory_limit');
- ini_set('memory_limit', '96M');
+ ini_set('max_execution_time', 300);
+ if (empty($CFG->memorylimit)) {
+ raise_memory_limit('128M');
+ } else {
+ raise_memory_limit($CFG->memorylimit);
+ }
mtrace("\n--DELETE----");
require_once($CFG->dirroot.'/search/delete.php');
mtrace("------------");
//mtrace("cron finished.</pre>");
mtrace('done');
-
- // set back normal values for php limits
- ini_set('max_execution_time', $maxtimelimit);
- ini_set('memory_limit', $maxmemoryamount);
}
catch(Exception $ex){
mtrace('Fatal exception from Lucene subsystem. Search engine may not have been updated.');
mtrace($ex);
}
-?>
\ No newline at end of file
+?>