/** * A method to run maintenance. */ function run() { // Print a blank line in the debug log file when maintenance starts OA::debug(); // Do not run if distributed stats are enabled if (!empty($this->aConf['lb']['enabled'])) { OA::debug('Distributed stats enabled, not running maintenance tasks', PEAR_LOG_INFO); return; } // Acquire the maintenance lock $oLock =& OA_DB_AdvisoryLock::factory(); if ($oLock->get(OA_DB_ADVISORYLOCK_MAINTENANCE)) { OA::switchLogIdent('maintenance'); OA::debug(); OA::debug('Running Maintenance Engine', PEAR_LOG_INFO); // Attempt to increase PHP memory OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('maintenance')); // Set UTC timezone OA_setTimeZoneUTC(); // Get last run $oLastRun = $this->getLastRun(); // Update the timestamp for old maintenance code and auto-maintenance $this->updateLastRun(); // Record the current time, and register with the OA_ServiceLocator $oDate = new Date(); $oServiceLocator =& OA_ServiceLocator::instance(); $oServiceLocator->register('now', $oDate); // Check the operation interval is valid $result = OX_OperationInterval::checkOperationIntervalValue($this->aConf['maintenance']['operationInterval']); if (PEAR::isError($result)) { // Unable to continue! $oLock->release(); OA::debug('Aborting maintenance: Invalid Operation Interval length', PEAR_LOG_CRIT); exit; } // Run the Maintenance Statistics Engine (MSE) process $this->_runMSE(); // Run the "midnight" tasks, if required if ($this->isMidnightMaintenance($oLastRun)) { $this->_runMidnightTasks(); } // Release lock before starting MPE $oLock->release(); // Run the Maintenance Priority Engine (MPE) process, ensuring that the // process always runs, even if instant update of priorities is disabled $this->_runMPE(); // Log the completion of the entire ME process OA::switchLogIdent('maintenance'); $oEndDate = new Date(); $oDateSpan = new Date_Span(); $oDateSpan->setFromDateDiff($oDate, $oEndDate); OA::debug('Maintenance Engine Completed (Started at ' . $oDate->format('%Y-%m-%d %H:%M:%S') . ' ' . $oDate->tz->getShortName() . ', taking ' . $oDateSpan->format('%H:%M:%S') . ')', PEAR_LOG_INFO); OA::switchLogIdent(); } else { OA::switchLogIdent('maintenance'); OA::debug('Maintenance Engine not run: could not acquire lock', PEAR_LOG_INFO); OA::switchLogIdent(); } }
function init() { $aConf = $GLOBALS['_MAX']['CONF']; $this->pathPackages = $aConf['pluginPaths']['packages']; $this->pathPlugins = $aConf['pluginPaths']['plugins']; $this->pathPluginsAdmin = $aConf['pluginPaths']['admin']; $this->pathDataObjects = $aConf['pluginPaths']['var'] . 'DataObjects/'; // Attempt to increase the memory limit when using the plugin manager OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('plugin')); $this->basePath = MAX_PATH; }
/** * A method to run distributed maintenance. */ function run() { if (empty($GLOBALS['_MAX']['CONF']['lb']['enabled'])) { OA::debug('Distributed stats disabled, not running Maintenance Distributed Engine', PEAR_LOG_INFO); return; } if (!empty($GLOBALS['_MAX']['CONF']['rawDatabase'])) { $GLOBALS['_MAX']['CONF']['database'] = $GLOBALS['_MAX']['CONF']['rawDatabase'] + $GLOBALS['_MAX']['CONF']['database']; OA::debug('rawDatabase functionality is being used, switching settings', PEAR_LOG_INFO); } $oLock =& OA_DB_AdvisoryLock::factory(); if (!$oLock->get(OA_DB_ADVISORYLOCK_DISTRIBUTED)) { OA::debug('Maintenance Distributed Engine Already Running', PEAR_LOG_INFO); return; } OA::debug('Running Maintenance Distributed Engine', PEAR_LOG_INFO); // Attempt to increase PHP memory OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('maintenance')); // Ensure the current time is registered with the OA_ServiceLocator $oServiceLocator =& OA_ServiceLocator::instance(); $oNow =& $oServiceLocator->get('now'); if (!$oNow) { // Record the current time, and register with the OA_ServiceLocator $oNow = new Date(); $oServiceLocator->register('now', $oNow); } OA::debug(' - Current time is ' . $oNow->format('%Y-%m-%d %H:%M:%S') . ' ' . $oNow->tz->getShortName(), PEAR_LOG_DEBUG); // Get the components of the deliveryLog extension $aBuckets = OX_Component::getComponents('deliveryLog'); // Copy buckets' records with "interval_start" up to and including previous OI start, // and then prune the data processed $aPreviousOperationIntervalDates = OX_OperationInterval::convertDateToPreviousOperationIntervalStartAndEndDates($oNow); OA::debug(' - Will process data for all operation intervals before and up to start', PEAR_LOG_DEBUG); OA::debug(' time of ' . $aPreviousOperationIntervalDates['start']->format('%Y-%m-%d %H:%M:%S') . ' ' . $aPreviousOperationIntervalDates['start']->tz->getShortName(), PEAR_LOG_DEBUG); foreach ($aBuckets as $sBucketName => $oBucketClass) { if ($oBucketClass->testStatisticsMigration($oBucketClass->getStatisticsMigration())) { $oBucketClass->processBucket($aPreviousOperationIntervalDates['start']); $oBucketClass->pruneBucket($aPreviousOperationIntervalDates['start']); } else { OA::debug(' - Skipping ' . $sBucketName, PEAR_LOG_DEBUG); } } $oLock->release(); OA::debug('Maintenance Distributed Engine Completed', PEAR_LOG_INFO); }
} } return $host; } function setupIncludePath() { static $checkIfAlreadySet; if (isset($checkIfAlreadySet)) { return; } $checkIfAlreadySet = true; $oxPearPath = MAX_PATH . DIRECTORY_SEPARATOR . 'lib' . DIRECTORY_SEPARATOR . 'pear'; $oxZendPath = MAX_PATH . DIRECTORY_SEPARATOR . 'lib'; set_include_path($oxPearPath . PATH_SEPARATOR . $oxZendPath . PATH_SEPARATOR . get_include_path()); } OX_increaseMemoryLimit(OX_getMinimumRequiredMemory()); if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 0); } setupServerVariables(); setupDeliveryConfigVariables(); $conf = $GLOBALS['_MAX']['CONF']; $GLOBALS['_OA']['invocationType'] = array_search(basename($_SERVER['SCRIPT_FILENAME']), $conf['file']); if (!empty($conf['debug']['production'])) { error_reporting(E_ALL & ~(E_NOTICE | E_WARNING | E_DEPRECATED | E_STRICT)); } else { error_reporting(E_ALL & ~(E_DEPRECATED | E_STRICT)); } $file = '/lib/max/Delivery/common.php'; $GLOBALS['_MAX']['FILES'][$file] = true; $file = '/lib/max/Delivery/cookie.php';
/** * Check if the original memory_limit had to be worked around to allow * OpenX to work * * @return boolean True if the original memory_limit was okay, false otherwise */ function checkOriginalMemory() { if ($this->aInfo['PHP']['actual']['original_memory_limit'] != OA_MEMORY_UNLIMITED && $this->aInfo['PHP']['actual']['original_memory_limit'] > 0 && $this->aInfo['PHP']['actual']['original_memory_limit'] < OX_getMinimumRequiredMemory()) { return false; } return true; }
phpAds_PageHeader("maintenance-index"); phpAds_MaintenanceSelection("acls"); /*-------------------------------------------------------*/ /* Main code */ /*-------------------------------------------------------*/ if (!empty($action) && $action == 'Recompile') { MAX_AclReCompileAll(); echo "<strong>{$strAllBannerChannelCompiled}</strong><br />"; } echo $strBannerChannelResult; phpAds_ShowBreak(); // Check the ACLs in the database against the compiled limitation strings... echo "<strong>" . $strChannels . ":</strong>"; phpAds_showBreak(); // Check all the channels... OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('maintenance')); $dalChannel = OA_Dal::factoryDAL('channel'); $rsChannel = $dalChannel->getChannelsAndAffiliates(); $rsChannel->find(); $allChannelsValid = true; while ($rsChannel->fetch() && ($row = $rsChannel->toArray())) { if (!MAX_AclValidate('channel-acl.php', array('channelid' => $row['channelid']))) { $allChannelsValid = false; $affiliateName = !empty($row['affiliatename']) ? $row['affiliatename'] : $strUntitled; echo "<a href='channel-acl.php?affiliateid={$row['affiliateid']}&channelid={$row['channelid']}'>{$row['name']}</a><br />"; } } if ($allChannelsValid) { echo $strChannelCompiledLimitationsValid; } phpAds_showBreak();
/** * The method to run the Maintenance Priority Engine process. * * @static * @param boolean $alwaysRun Default value is false. If true, the Maintenance * Priority Engine process will always run, even if * instant priority updates have been disabled in the * configuration. Used to ensure that the maintenance * script process can always update priorities. * @return boolean True on MPE running correctly, false otherwise. */ function run($alwaysRun = false) { OA::switchLogIdent('maintenance'); // Get the configuration $aConf = $GLOBALS['_MAX']['CONF']; // Should the MPE process run? if (!$alwaysRun) { // Is instant update for priority set? if (!$aConf['priority']['instantUpdate']) { OA::debug('Instant update of priorities disabled, not running MPE', PEAR_LOG_INFO); return false; } OA::debug(); } // Log the start of the process OA::debug('Running Maintenance Priority Engine', PEAR_LOG_INFO); // Set longer time out, and ignore user abort if (!ini_get('safe_mode')) { @set_time_limit($aConf['maintenance']['timeLimitScripts']); @ignore_user_abort(true); } // Attempt to increase PHP memory OX_increaseMemoryLimit(OX_getMinimumRequiredMemory('maintenance')); // Run the following code as the "Maintenance" user OA_Permission::switchToSystemProcessUser('Maintenance'); // Create a Maintenance DAL object $oDal = new OA_Dal_Maintenance_Priority(); // Try to get the MPE database-level lock $lock = $oDal->obtainPriorityLock(); if (!$lock) { OA::debug('Unable to obtain database-level lock, not running MPE', PEAR_LOG_ERR); return false; } // Ensure the the current time is registered with the OA_ServiceLocator $oServiceLocator =& OA_ServiceLocator::instance(); $oDate =& $oServiceLocator->get('now'); if (!$oDate) { // Record the current time, and register with the OA_ServiceLocator $oDate = new Date(); $oServiceLocator->register('now', $oDate); } // Run the MPE process for the AdServer module require_once MAX_PATH . '/lib/OA/Maintenance/Priority/AdServer.php'; $oMaintenancePriority = new OA_Maintenance_Priority_AdServer(); // TODO: OA_Maintenance_Priority_AdServer::updatePriorities // should be refactored to return a boolean we can check here. $oMaintenancePriority->updatePriorities(); // Release the MPE database-level lock $result = $oDal->releasePriorityLock(); if (PEAR::isError($result)) { // Unable to continue! OA::debug('Unable to release database-level lock', PEAR_LOG_ERR); return false; } // Return to the "normal" user OA_Permission::switchToSystemProcessUser(); // Log the end of the process OA::debug('Maintenance Priority Engine Completed (Started at ' . $oDate->format('%Y-%m-%d %H:%M:%S') . ' ' . $oDate->tz->getShortName() . ')', PEAR_LOG_INFO); OA::switchLogIdent(); return true; }
/** * Check for situation when installing or using software is eithe * imposible, or results in unformated error output, due to system * configuration. * * @param &$aErrors Array of error mesages. All errors that it is possible to * detect will be set, regardless of the function return value. * @return bool|int True on system check OK, negative int value on detected problems. * -1 => The "function_exists" built-in function doesn't exist * -2 => At least one of the "strpos" or "parse_url" built-in * functions don't exist * -3 => One of the other required built-in functions was * detected as being disabled * -4 => The amount of memory required was too low * */ function RV_checkSystemInitialRequirements(&$aErrors) { // Variables for tracking if the test has passed or not, // and if not, what value to return $isSystemOK = true; $return = true; // The general list of built in PHP functions that are required to // run Revive Adserver, apart from the functions: // // - "function_exists" // - "array_intersect" // - "explode" // - "ini_get" // - "trim" // - "parse_url" // - "strpos" // // These other functions are tested separately, as they are // required to test for the existence of the functions in the // array below! $aRequiredFunctions = array('dirname', 'empty', 'file_exists', 'ini_set', 'parse_ini_file', 'version_compare', 'set_include_path'); // Prepare error strings, in the simplest possible way $errorString1 = 'The built in PHP function "'; $errorString2 = '" is in the "disable_functions" list in your "php.ini" file.'; // Need "function_exists" to be able to test for functions required // for testing what is in the "disabled_functions" list if (!function_exists('function_exists')) { $aErrors[] = $errorString1 . 'function_exists' . $errorString2; // Cannot detect any more errors, as function_exists is // needed to detect the required functions! return -1; } // Test for existence of "parse_url" and "strpos", which are // special cases required for the display of the error message // in the event of anything failing in this test! if (!function_exists('parse_url')) { $aErrors[] = $errorString1 . 'parse_url' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -2; } } if (!function_exists('strpos')) { $aErrors[] = $errorString1 . 'strpos' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -2; } } // Test for existence of "array_intersect", "explode", "ini_get" // and "trim", which are all required as part of the code to test // which functions are in the "disabled_functions" list below... if (!function_exists('array_intersect')) { $aErrors[] = $errorString1 . 'array_intersect' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -3; } } if (!function_exists('explode')) { $aErrors[] = $errorString1 . 'explode' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -3; } } if (!function_exists('ini_get')) { $aErrors[] = $errorString1 . 'ini_get' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -3; } } if (!function_exists('trim')) { $aErrors[] = $errorString1 . 'trim' . $errorString2; $isSystemOK = false; if ($return === true) { $return = -3; } } // Test the disabled functons list with required functions list // defined above in $aRequiredFunctions $aDisabledFunctions = explode(',', ini_get('disable_functions')); foreach ($aDisabledFunctions as $key => $value) { $aDisabledFunctions[$key] = trim($value); } $aNeededFunctions = array_intersect($aDisabledFunctions, $aRequiredFunctions); if (count($aNeededFunctions) > 0) { $isSystemOK = false; if ($return === true) { $return = -3; } foreach ($aNeededFunctions as $functionName) { $aErrors[] = $errorString1 . $functionName . $errorString2; } } // Check PHP version, as use of the minimum required version of PHP > 5.5.9 // may result in parse errors, which we want to avoid $errorMessage = "PHP version 5.5.9, or greater, was not detected."; if (function_exists('version_compare')) { $result = version_compare(phpversion(), '5.5.9', '<'); if ($result) { $aErrors[] = $errorMessage; $isSystemOK = false; if ($return === true) { $return = -3; } } } // Check minimum memory requirements are okay (24MB) $minimumRequiredMemory = OX_getMinimumRequiredMemory(); $phpMemoryLimit = OX_getMemoryLimitSizeInBytes(); if ($phpMemoryLimit > 0 && $phpMemoryLimit < $minimumRequiredMemory) { // The memory limit is too low, but can it be increased? $memoryCanBeSet = OX_checkMemoryCanBeSet(); if (!$memoryCanBeSet) { $minimumRequiredMemoryInMB = $minimumRequiredMemory / 1048576; $errorMessage = 'The PHP "memory_limit" value is set to less than the required minimum of ' . $minimumRequiredMemoryInMB . 'MB, but because the built in PHP function "ini_set" ' . 'has been disabled, the memory limit cannot be automatically increased.'; $aErrors[] = $errorMessage; $isSystemOK = false; if ($return === true) { $return = -4; } } } if (!$isSystemOK) { return $return; } return true; }