Server IP : 195.201.23.43 / Your IP : 18.119.165.116 Web Server : Apache System : Linux webserver2.vercom.be 5.4.0-192-generic #212-Ubuntu SMP Fri Jul 5 09:47:39 UTC 2024 x86_64 User : kdecoratie ( 1041) PHP Version : 7.1.33-63+ubuntu20.04.1+deb.sury.org+1 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/kdecoratie/public_html/administrator/components/com_admintools/Model/ |
Upload File : |
<?php /** * @package admintools * @copyright Copyright (c)2010-2019 Nicholas K. Dionysopoulos / Akeeba Ltd * @license GNU General Public License version 3, or later */ namespace Akeeba\AdminTools\Admin\Model; defined('_JEXEC') or die; use Exception; use FOF30\Model\Model; use JSessionStorage; class DatabaseTools extends Model { /** @var float The time the process started */ private $startTime = null; /** * Returns the current timestampt in decimal seconds */ private function microtime_float() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } /** * Starts or resets the internal timer */ private function resetTimer() { $this->startTime = $this->microtime_float(); } /** * Makes sure that no more than 3 seconds since the start of the timer have * elapsed * * @return bool */ private function haveEnoughTime() { $now = $this->microtime_float(); $elapsed = abs($now - $this->startTime); return $elapsed < 3; } /** * Finds all tables using the current site's prefix * * @return array */ public function findTables() { static $ret = null; if (is_null($ret)) { $db = $this->container->db; $prefix = $db->getPrefix(); $plen = strlen($prefix); $allTables = $db->getTableList(); if (empty($prefix)) { $ret = $allTables; } else { $ret = array(); foreach ($allTables as $table) { if (substr($table, 0, $plen) == $prefix) { $ret[] = $table; } } } } return $ret; } public function repairAndOptimise($fromTable = null, $echo = false) { $this->resetTimer(); $tables = $this->findTables(); if (!empty($fromTable)) { $table = ''; while ($table != $fromTable) { $table = array_shift($tables); } } $db = $this->container->db; while (count($tables) && $this->haveEnoughTime()) { $table = array_shift($tables); // First, check the table $db->setQuery('CHECK TABLE ' . $db->qn($table)); $result = $db->loadObjectList(); $isOK = false; if (!empty($result)) { foreach ($result as $row) { if (($row->Msg_type == 'status') && ( ($row->Msg_text == 'OK') || ($row->Msg_text == 'Table is already up to date') ) ) { $isOK = true; } } } // Run a repair only if it is required if (!$isOK) { // The table needs repair if ($echo) { echo "Repairing $table\n"; } $db->setQuery('REPAIR TABLE ' . $db->qn($table)); $db->execute(); } // Finally, optimize if ($echo) { echo "Optimizing $table\n"; } $db->setQuery('OPTIMIZE TABLE ' . $db->qn($table)); $db->execute(); } if (!count($tables)) { return ''; } return $table; } /** * Asks the Joomla! session storage handler to garbage collect any open sessions. This SHOULD remove expired * sessions, as long as Joomla implements this feature for the given handler. * * @return void * * @since 5.0.0 */ public function garbageCollectSessions() { $options = array(); $conf = $this->container->platform->getConfig(); $handler = $conf->get('session_handler', 'none'); // config time is in minutes $options['expire'] = ($conf->get('lifetime')) ? $conf->get('lifetime') * 60 : 900; $storage = JSessionStorage::getInstance($handler, $options); $storage->gc($options['expire']); } /** * Clean and optimize the #__sessions table. The idea is that the sessions table may get corrupt over time due to * the number of read / write operations and / or ending up with stuck phantom session records. * * @return void */ public function purgeSessions() { $db = $this->container->db; try { $db->setQuery('TRUNCATE TABLE ' . $db->qn('#__session')); $db->execute(); $db->setQuery('DELETE FROM ' . $db->qn('#__session')); $db->execute(); $db->setQuery('OPTIMIZE TABLE ' . $db->qn('#__session')); $db->execute(); } catch (Exception $e) { return; } } }Private