From 80f2dd7a8a34e9eec6c1c798c911ff5baa478e47 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 09:57:08 +0900 Subject: [PATCH 1/7] Replace is_a() and is_subclass_of() with instanceof --- classes/db/DB.class.php | 4 ++-- modules/autoinstall/autoinstall.lib.php | 2 +- modules/editor/editor.controller.php | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index a852608d9..d9d2fb447 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -619,7 +619,7 @@ class DB $output = include($cache_file); - if((is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool()) + if($output instanceof Object && !$output->toBool()) { return $output; } @@ -652,7 +652,7 @@ class DB { $output = $this->getError(); } - else if(!is_a($output, 'Object') && !is_subclass_of($output, 'Object')) + elseif(!($output instanceof Object)) { $output = new Object(); } diff --git a/modules/autoinstall/autoinstall.lib.php b/modules/autoinstall/autoinstall.lib.php index d168f35ce..b4542e0c6 100644 --- a/modules/autoinstall/autoinstall.lib.php +++ b/modules/autoinstall/autoinstall.lib.php @@ -164,7 +164,7 @@ class ModuleInstaller } $output = $oModule->moduleUninstall(); - if(is_subclass_of($output, 'Object') && !$output->toBool()) + if($output instanceof Object && !$output->toBool()) { return $output; } diff --git a/modules/editor/editor.controller.php b/modules/editor/editor.controller.php index 003b81bd9..b4782b307 100644 --- a/modules/editor/editor.controller.php +++ b/modules/editor/editor.controller.php @@ -60,7 +60,7 @@ class editorController extends editor if(method_exists($oComponent, $method)) $output = $oComponent->{$method}(); else return new Object(-1,sprintf('%s method is not exists', $method)); - if((is_a($output, 'Object') || is_subclass_of($output, 'Object')) && !$output->toBool()) return $output; + if($output instanceof Object && !$output->toBool()) return $output; $this->setError($oComponent->getError()); $this->setMessage($oComponent->getMessage()); From d5a5364814f552093025769a7c04aa83e2799d21 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 10:33:15 +0900 Subject: [PATCH 2/7] Clean up some methods in DB classes --- classes/db/DB.class.php | 313 +++++++++------------------------- classes/db/DBCubrid.class.php | 6 - classes/db/DBMssql.class.php | 4 - classes/db/DBMysql.class.php | 4 - classes/db/DBMysqli.class.php | 4 - 5 files changed, 84 insertions(+), 247 deletions(-) diff --git a/classes/db/DB.class.php b/classes/db/DB.class.php index d9d2fb447..6277762c8 100644 --- a/classes/db/DB.class.php +++ b/classes/db/DB.class.php @@ -22,24 +22,18 @@ class DB * priority of DBMS * @var array */ - var $priority_dbms = array( + protected static $priority_dbms = array( 'mysqli' => 6, 'mysql' => 4, 'cubrid' => 2, 'mssql' => 1 ); - /** - * count cache path - * @var string - */ - var $count_cache_path = 'files/cache/db'; - /** * operations for condition * @var array */ - var $cond_operation = array( + protected static $cond_operation = array( 'equal' => '=', 'more' => '>=', 'excess' => '>', @@ -54,83 +48,83 @@ class DB * master database connection string * @var array */ - var $master_db = NULL; + protected $master_db = NULL; /** * array of slave databases connection strings * @var array */ - var $slave_db = NULL; - var $result = NULL; + protected $slave_db = NULL; + protected $result = NULL; /** * error code (0 means no error) * @var int */ - var $errno = 0; + protected $errno = 0; /** * error message * @var string */ - var $errstr = ''; + protected $errstr = ''; /** * query string of latest executed query * @var string */ - var $query = ''; - var $connection = ''; + protected $query = ''; + protected $connection = ''; /** * elapsed time of latest executed query * @var int */ - var $elapsed_time = 0; + protected $elapsed_time = 0; /** * elapsed time of latest executed DB class * @var int */ - var $elapsed_dbclass_time = 0; + protected $elapsed_dbclass_time = 0; /** * transaction flag * @var boolean */ - var $transaction_started = FALSE; - var $is_connected = FALSE; + protected $transaction_started = FALSE; + protected $is_connected = FALSE; /** * returns enable list in supported dbms list * will be written by classes/DB/DB***.class.php * @var array */ - var $supported_list = array(); + protected static $supported_list = array(); /** * location of query cache * @var string */ - var $cache_file = 'files/cache/queries/'; + protected $cache_file = 'files/cache/queries/'; /** * stores database type: 'mysql','cubrid','mssql' etc. or 'db' when database is not yet set * @var string */ - var $db_type; + public $db_type; /** * flag to decide if class prepared statements or not (when supported); can be changed from db.config.info * @var string */ - var $use_prepared_statements; + public $use_prepared_statements; /** * leve of transaction * @var unknown */ - private $transactionNestedLevel = 0; + protected $transactionNestedLevel = 0; /** * returns instance of certain db type @@ -189,7 +183,6 @@ class DB */ public function __construct() { - $this->count_cache_path = _XE_PATH_ . $this->count_cache_path; $this->cache_file = _XE_PATH_ . $this->cache_file; } @@ -199,10 +192,9 @@ class DB * check by instance can creatable * @return array return supported DBMS list */ - function getSupportedList() + public static function getSupportedList() { - $oDB = new DB(); - return $oDB->_getSupportedList(); + return self::_getSupportedList(); } /** @@ -210,20 +202,18 @@ class DB * this list return by child class * @return array return enable DBMS list in supported dbms list */ - function getEnableList() + public static function getEnableList() { - is_a($this, 'DB') ? $self = $this : $self = self::getInstance(); - - if(!$self->supported_list) + if(!self::$supported_list) { $oDB = new DB(); - $self->supported_list = $oDB->_getSupportedList(); + self::$supported_list = self::_getSupportedList(); } $enableList = array(); - if(is_array($self->supported_list)) + if(is_array(self::$supported_list)) { - foreach($self->supported_list AS $key => $value) + foreach(self::$supported_list AS $key => $value) { if($value->enable) { @@ -239,20 +229,18 @@ class DB * this list return by child class * @return array return disable DBMS list in supported dbms list */ - function getDisableList() + public static function getDisableList() { - is_a($this, 'DB') ? $self = $this : $self = self::getInstance(); - - if(!$self->supported_list) + if(!self::$supported_list) { $oDB = new DB(); - $self->supported_list = $oDB->_getSupportedList(); + self::$supported_list = self::_getSupportedList(); } $disableList = array(); - if(is_array($self->supported_list)) + if(is_array(self::$supported_list)) { - foreach($self->supported_list AS $key => $value) + foreach(self::$supported_list AS $key => $value) { if(!$value->enable) { @@ -265,17 +253,16 @@ class DB /** * returns list of supported dbms list - * this method is private + * * @return array return supported DBMS list */ - function _getSupportedList() + protected static function _getSupportedList() { - static $get_supported_list = ''; - if(is_array($get_supported_list)) + if(self::$supported_list) { - $this->supported_list = $get_supported_list; - return $this->supported_list; + return self::$supported_list; } + $get_supported_list = array(); $db_classes_path = _XE_PATH_ . "classes/db/"; $filter = "/^DB([^\.]+)\.class\.php/i"; @@ -303,41 +290,13 @@ class DB } // sort - @usort($get_supported_list, array($this, '_sortDBMS')); + usort($get_supported_list, function($a, $b) { + $priority_a = isset(self::$priority_dbms[$a->db_type]) ? self::$priority_dbms[$a->db_type] : 0; + $priority_b = isset(self::$priority_dbms[$b->db_type]) ? self::$priority_dbms[$b->db_type] : 0; + return $a - $b; + }); - $this->supported_list = $get_supported_list; - return $this->supported_list; - } - - /** - * sort dbms as priority - */ - function _sortDBMS($a, $b) - { - if(!isset($this->priority_dbms[$a->db_type])) - { - $priority_a = 0; - } - else - { - $priority_a = $this->priority_dbms[$a->db_type]; - } - - if(!isset($this->priority_dbms[$b->db_type])) - { - $priority_b = 0; - } - else - { - $priority_b = $this->priority_dbms[$b->db_type]; - } - - if($priority_a == $priority_b) - { - return 0; - } - - return ($priority_a > $priority_b) ? -1 : 1; + return self::$supported_list = $get_supported_list; } /** @@ -345,7 +304,7 @@ class DB * The value is set in the child class * @return boolean true: is supported, false: is not supported */ - function isSupported() + public function isSupported() { return self::$isSupported; } @@ -356,7 +315,7 @@ class DB * @param int $indx key of server list * @return boolean true: connected, false: not connected */ - function isConnected($type = 'master', $indx = 0) + public function isConnected($type = 'master', $indx = 0) { if($type == 'master') { @@ -373,7 +332,7 @@ class DB * @param string $query query string * @return void */ - function actStart($query) + public function actStart($query) { $this->setError(0, 'success'); $this->query = $query; @@ -385,7 +344,7 @@ class DB * finish recording log * @return void */ - function actFinish() + public function actFinish() { if(!$this->query) { @@ -461,7 +420,7 @@ class DB * @param array $log values set query debug * @return void */ - function setQueryLog($log) + public function setQueryLog($log) { $GLOBALS['__db_queries__'][] = $log; } @@ -472,7 +431,7 @@ class DB * @param string $errstr error message * @return void */ - function setError($errno = 0, $errstr = 'success') + public function setError($errno = 0, $errstr = 'success') { $this->errno = $errno; $this->errstr = $errstr; @@ -482,7 +441,7 @@ class DB * Return error status * @return boolean true: error, false: no error */ - function isError() + public function isError() { return ($this->errno !== 0); } @@ -491,7 +450,7 @@ class DB * Returns object of error info * @return object object of error */ - function getError() + public function getError() { $this->errstr = Context::convertEncodingStr($this->errstr); return new Object($this->errno, $this->errstr); @@ -505,7 +464,7 @@ class DB * @param array $arg_columns column list. if you want get specific colums from executed result, add column list to $arg_columns * @return object result of query */ - function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $type = NULL) + public function executeQuery($query_id, $args = NULL, $arg_columns = NULL, $type = NULL) { static $cache_file = array(); @@ -572,7 +531,7 @@ class DB * @param string $xml_file original xml query file * @return string cache file */ - function checkQueryCacheFile($query_id, $xml_file) + public function checkQueryCacheFile($query_id, $xml_file) { // first try finding cache file $cache_file = sprintf('%s%s%s.%s.%s.cache.php', _XE_PATH_, $this->cache_file, $query_id, __ZBXE_VERSION__, $this->db_type); @@ -601,7 +560,7 @@ class DB * @param array $arg_columns column list. if you want get specific colums from executed result, add column list to $arg_columns * @return object result of query */ - function _executeQuery($cache_file, $source_args, $query_id, $arg_columns, $type) + public function _executeQuery($cache_file, $source_args, $query_id, $arg_columns, $type) { global $lang; @@ -668,57 +627,9 @@ class DB * @param string $condition condition to get data * @return int count of cache data */ - function getCountCache($tables, $condition) + public function getCountCache($tables, $condition) { return FALSE; -/* - if(!$tables) - { - return FALSE; - } - if(!is_dir($this->count_cache_path)) - { - return FileHandler::makeDir($this->count_cache_path); - } - - $condition = md5($condition); - - if(!is_array($tables)) - { - $tables_str = $tables; - } - else - { - $tables_str = implode('.', $tables); - } - - $cache_path = sprintf('%s/%s%s', $this->count_cache_path, $this->prefix, $tables_str); - FileHandler::makeDir($cache_path); - - $cache_filename = sprintf('%s/%s.%s', $cache_path, $tables_str, $condition); - if(!file_exists($cache_filename)) - { - return FALSE; - } - - $cache_mtime = filemtime($cache_filename); - - if(!is_array($tables)) - { - $tables = array($tables); - } - foreach($tables as $alias => $table) - { - $table_filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table); - if(!file_exists($table_filename) || filemtime($table_filename) > $cache_mtime) - { - return FALSE; - } - } - - $count = (int) FileHandler::readFile($cache_filename); - return $count; -*/ } /** @@ -728,37 +639,9 @@ class DB * @param int $count count of cache data to save * @return void */ - function putCountCache($tables, $condition, $count = 0) + public function putCountCache($tables, $condition, $count = 0) { return FALSE; -/* - if(!$tables) - { - return FALSE; - } - if(!is_dir($this->count_cache_path)) - { - return FileHandler::makeDir($this->count_cache_path); - } - - $condition = md5($condition); - - if(!is_array($tables)) - { - $tables_str = $tables; - } - else - { - $tables_str = implode('.', $tables); - } - - $cache_path = sprintf('%s/%s%s', $this->count_cache_path, $this->prefix, $tables_str); - FileHandler::makeDir($cache_path); - - $cache_filename = sprintf('%s/%s.%s', $cache_path, $tables_str, $condition); - - FileHandler::writeFile($cache_filename, $count); -*/ } /** @@ -766,29 +649,9 @@ class DB * @param array|string $tables tables to reset cache data * @return boolean true: success, false: failed */ - function resetCountCache($tables) + public function resetCountCache($tables) { return FALSE; -/* - if(!$tables) - { - return FALSE; - } - return FileHandler::makeDir($this->count_cache_path); - - if(!is_array($tables)) - { - $tables = array($tables); - } - foreach($tables as $alias => $table) - { - $filename = sprintf('%s/cache.%s%s', $this->count_cache_path, $this->prefix, $table); - FileHandler::removeFile($filename); - FileHandler::writeFile($filename, ''); - } - - return TRUE; - */ } /** @@ -796,7 +659,7 @@ class DB * @param string $table_name * @return void */ - function dropTable($table_name) + public function dropTable($table_name) { if(!$table_name) { @@ -812,7 +675,7 @@ class DB * @param boolean $with_values * @return string */ - function getSelectSql($query, $with_values = TRUE) + public function getSelectSql($query, $with_values = TRUE) { $select = $query->getSelectString($with_values); if($select == '') @@ -881,7 +744,7 @@ class DB * * @param $queryObject */ - function getClickCountQuery($queryObject) + public function getClickCountQuery($queryObject) { $new_update_columns = array(); $click_count_columns = $queryObject->getClickCountColumns(); @@ -907,7 +770,7 @@ class DB * @param boolean $with_priority * @return string */ - function getDeleteSql($query, $with_values = TRUE, $with_priority = FALSE) + public function getDeleteSql($query, $with_values = TRUE, $with_priority = FALSE) { $sql = 'DELETE '; @@ -939,7 +802,7 @@ class DB * @param boolean $with_priority * @return string */ - function getUpdateSql($query, $with_values = TRUE, $with_priority = FALSE) + public function getUpdateSql($query, $with_values = TRUE, $with_priority = FALSE) { $columnsList = $query->getUpdateString($with_values); if($columnsList == '') @@ -971,7 +834,7 @@ class DB * @param boolean $with_priority * @return string */ - function getInsertSql($query, $with_values = TRUE, $with_priority = FALSE) + public function getInsertSql($query, $with_values = TRUE, $with_priority = FALSE) { $tableName = $query->getFirstTableName(); $values = $query->getInsertString($with_values); @@ -984,7 +847,7 @@ class DB * Return index from slave server list * @return int */ - function _getSlaveConnectionStringIndex() + public function _getSlaveConnectionStringIndex() { $max = count($this->slave_db); $indx = rand(0, $max - 1); @@ -997,7 +860,7 @@ class DB * @param int $indx if indx value is NULL, return rand number in slave server list * @return resource */ - function _getConnection($type = 'master', $indx = NULL) + public function _getConnection($type = 'master', $indx = NULL) { if($type == 'master' || $this->transactionNestedLevel) { @@ -1036,26 +899,18 @@ class DB * check db information exists * @return boolean */ - function _dbInfoExists() + public function _dbInfoExists() { - if(!$this->master_db) - { - return FALSE; - } - if(count($this->slave_db) === 0) - { - return FALSE; - } - return TRUE; + return ($this->master_db && count($this->slave_db)); } /** * DB disconnection - * this method is protected + * * @param resource $connection * @return void */ - function _close($connection) + protected function _close($connection) { } @@ -1066,7 +921,7 @@ class DB * @param int $indx number in slave dbms server list * @return void */ - function close($type = 'master', $indx = 0) + public function close($type = 'master', $indx = 0) { if(!$this->isConnected($type, $indx)) { @@ -1093,7 +948,7 @@ class DB * this method is protected * @return boolean */ - function _begin($transactionLevel = 0) + protected function _begin($transactionLevel = 0) { return TRUE; } @@ -1102,7 +957,7 @@ class DB * DB transaction start * @return void */ - function begin() + public function begin() { if(!$this->isConnected()) { @@ -1121,7 +976,7 @@ class DB * this method is protected * @return boolean */ - function _rollback($transactionLevel = 0) + protected function _rollback($transactionLevel = 0) { return TRUE; } @@ -1130,7 +985,7 @@ class DB * DB transaction rollback * @return void */ - function rollback() + public function rollback() { if(!$this->isConnected() || !$this->transaction_started) { @@ -1152,7 +1007,7 @@ class DB * this method is protected * @return boolean */ - function _commit() + protected function _commit() { return TRUE; } @@ -1162,7 +1017,7 @@ class DB * @param boolean $force regardless transaction start status or connect status, forced to commit * @return void */ - function commit($force = FALSE) + public function commit($force = FALSE) { if(!$force && (!$this->isConnected() || !$this->transaction_started)) { @@ -1186,19 +1041,19 @@ class DB * @param resource $connection * @return void */ - function __query($query, $connection) + protected function __query($query, $connection) { } /** * Execute the query - * this method is protected + * * @param string $query * @param resource $connection * @return resource */ - function _query($query, $connection = NULL) + public function _query($query, $connection = NULL) { if($connection == NULL) { @@ -1221,7 +1076,7 @@ class DB * this method is protected * @return void */ - function _setDBInfo() + protected function _setDBInfo() { $db_info = config('db'); $this->master_db = $db_info['master']; @@ -1236,7 +1091,7 @@ class DB * @param array $connection * @return void */ - function __connect($connection) + protected function __connect($connection) { } @@ -1247,7 +1102,7 @@ class DB * @param resource $connection * @return void */ - function _afterConnect($connection) + protected function _afterConnect($connection) { } @@ -1259,7 +1114,7 @@ class DB * @param int $indx number in slave dbms server list * @return void */ - function _connect($type = 'master', $indx = 0) + protected function _connect($type = 'master', $indx = 0) { if($this->isConnected($type, $indx)) { @@ -1305,7 +1160,7 @@ class DB * Start recording DBClass log * @return void */ - function actDBClassStart() + public function actDBClassStart() { $this->setError(0, 'success'); $this->act_dbclass_start = microtime(true); @@ -1316,7 +1171,7 @@ class DB * Finish recording DBClass log * @return void */ - function actDBClassFinish() + public function actDBClassFinish() { if(!$this->query) { @@ -1338,7 +1193,7 @@ class DB * @param boolean $force force load DBParser instance * @return DBParser */ - function getParser($force = FALSE) + public function getParser($force = FALSE) { static $dbParser = NULL; if(!$dbParser || $force) diff --git a/classes/db/DBCubrid.class.php b/classes/db/DBCubrid.class.php index 542d1483c..5abb979ca 100644 --- a/classes/db/DBCubrid.class.php +++ b/classes/db/DBCubrid.class.php @@ -107,12 +107,6 @@ class DBCubrid extends DB */ function addQuotes($string) { - if(version_compare(PHP_VERSION, "5.4.0", "<") && - get_magic_quotes_gpc()) - { - $string = stripslashes(str_replace("\\", "\\\\", $string)); - } - if(!is_numeric($string)) { /* diff --git a/classes/db/DBMssql.class.php b/classes/db/DBMssql.class.php index 9553d1fc6..284bcbd0d 100644 --- a/classes/db/DBMssql.class.php +++ b/classes/db/DBMssql.class.php @@ -94,10 +94,6 @@ class DBMssql extends DB */ function addQuotes($string) { - if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc()) - { - $string = stripslashes(str_replace("\\", "\\\\", $string)); - } //if(!is_numeric($string)) $string = str_replace("'","''",$string); return $string; diff --git a/classes/db/DBMysql.class.php b/classes/db/DBMysql.class.php index c19169de7..f01807fb1 100644 --- a/classes/db/DBMysql.class.php +++ b/classes/db/DBMysql.class.php @@ -116,10 +116,6 @@ class DBMysql extends DB */ function addQuotes($string) { - if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc()) - { - $string = stripslashes(str_replace("\\", "\\\\", $string)); - } if(!is_numeric($string)) { $string = @mysql_real_escape_string($string); diff --git a/classes/db/DBMysqli.class.php b/classes/db/DBMysqli.class.php index 2503bd38f..8c425be45 100644 --- a/classes/db/DBMysqli.class.php +++ b/classes/db/DBMysqli.class.php @@ -61,10 +61,6 @@ class DBMysqli extends DBMysql */ function addQuotes($string) { - if(version_compare(PHP_VERSION, "5.4.0", "<") && get_magic_quotes_gpc()) - { - $string = stripslashes(str_replace("\\", "\\\\", $string)); - } if(!is_numeric($string)) { $connection = $this->_getConnection('master'); From 25eef85d8adb537e7a941b40d3af6a48b244dcb9 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 10:44:47 +0900 Subject: [PATCH 3/7] Remove two-tier caching of template files --- classes/template/TemplateHandler.class.php | 84 ++++------------------ 1 file changed, 12 insertions(+), 72 deletions(-) diff --git a/classes/template/TemplateHandler.class.php b/classes/template/TemplateHandler.class.php index dcdd16b1b..1e8ac6ebf 100644 --- a/classes/template/TemplateHandler.class.php +++ b/classes/template/TemplateHandler.class.php @@ -117,8 +117,6 @@ class TemplateHandler */ public function compile($tpl_path, $tpl_filename, $tpl_file = '') { - $buff = false; - // store the starting time for debug information if(__DEBUG__ == 3) { @@ -143,37 +141,13 @@ class TemplateHandler $source_template_mtime = filemtime($this->file); $latest_mtime = $source_template_mtime > $this->handler_mtime ? $source_template_mtime : $this->handler_mtime; - // cache control - $oCacheHandler = CacheHandler::getInstance('template'); - - // get cached buff - if($oCacheHandler->isSupport()) + // get cached file + if(!file_exists($this->compiled_file) || filemtime($this->compiled_file) < $latest_mtime) { - $cache_key = 'template:' . $this->file; - $buff = $oCacheHandler->get($cache_key, $latest_mtime); - } - else - { - if(is_readable($this->compiled_file) && filemtime($this->compiled_file) > $latest_mtime && filesize($this->compiled_file)) - { - $buff = 'file://' . $this->compiled_file; - } + FileHandler::writeFile($this->compiled_file, $this->parse()); } - if($buff === FALSE) - { - $buff = $this->parse(); - if($oCacheHandler->isSupport()) - { - $oCacheHandler->put($cache_key, $buff); - } - else - { - FileHandler::writeFile($this->compiled_file, $buff); - } - } - - $output = $this->_fetch($buff); + $output = $this->_fetch($this->compiled_file); if($__templatehandler_root_tpl == $this->file) { @@ -358,54 +332,20 @@ class TemplateHandler * @param string $buff if buff is not null, eval it instead of including compiled template file * @return string */ - private function _fetch($buff) + private function _fetch($filename) { - if(!$buff) - { - return; - } - $__Context = Context::getInstance(); $__Context->tpl_path = $this->path; - $level = ob_get_level(); + $__ob_level_before_fetch = ob_get_level(); ob_start(); - if(substr($buff, 0, 7) == 'file://') - { - if(__DEBUG__) - { - //load cache file from disk - $eval_str = FileHandler::readFile(substr($buff, 7)); - $eval_str_buffed = "?>" . $eval_str; - @eval($eval_str_buffed); - $error_info = error_get_last(); - //parse error - if ($error_info['type'] == 4) - { - throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); - } - } - else - { - include(substr($buff, 7)); - } - } - else - { - $eval_str = "?>" . $buff; - @eval($eval_str); - $error_info = error_get_last(); - //parse error - if ($error_info['type'] == 4) - { - throw new Exception("Error Parsing Template - {$error_info['message']} in template file {$this->file}"); - } - } - + + include $filename; + $contents = ''; - while (ob_get_level() - $level > 0) { - $contents .= ob_get_contents(); - ob_end_clean(); + while (ob_get_level() > $__ob_level_before_fetch) + { + $contents .= ob_get_clean(); } return $contents; } From 4dbb0239c6eb0e56136659d04031ce515a928cca Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 10:51:45 +0900 Subject: [PATCH 4/7] Use object cache for widgets as well --- modules/widget/widget.controller.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/widget/widget.controller.php b/modules/widget/widget.controller.php index e6cf7a113..5a7fb0f5b 100644 --- a/modules/widget/widget.controller.php +++ b/modules/widget/widget.controller.php @@ -374,7 +374,7 @@ class widgetController extends widget return $widget_content; } - $oCacheHandler = CacheHandler::getInstance('template'); + $oCacheHandler = CacheHandler::getInstance('object'); if($oCacheHandler->isSupport()) { $key = 'widget_cache:' . $widget_sequence; From b8b93159e2cb330dcc44701f8c8dba231100e355 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 11:08:25 +0900 Subject: [PATCH 5/7] Clean up CacheHandler --- classes/cache/CacheHandler.class.php | 215 ++++++++++----------------- 1 file changed, 78 insertions(+), 137 deletions(-) diff --git a/classes/cache/CacheHandler.class.php b/classes/cache/CacheHandler.class.php index 895ce9c69..5e34d08dd 100644 --- a/classes/cache/CacheHandler.class.php +++ b/classes/cache/CacheHandler.class.php @@ -8,17 +8,22 @@ */ class CacheHandler extends Handler { + /** + * Instances are stored here. + */ + protected static $_instances = array(); + /** * instance of cache handler * @var CacheBase */ - var $handler = null; + protected $handler = null; /** * Version of key group * @var int */ - var $keyGroupVersions = null; + protected $keyGroupVersions = null; /** * Get a instance of CacheHandler(for singleton) @@ -28,14 +33,14 @@ class CacheHandler extends Handler * @param boolean $always_use_file If set true, use a file cache always * @return CacheHandler */ - function getInstance($target = 'object', $info = null, $always_use_file = false) + public static function getInstance($target = 'object', $info = null, $always_use_file = false) { - $cache_handler_key = $target . ($always_use_file ? '_file' : ''); - if(!$GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key]) + $key = 'object' . ($always_use_file ? '_file' : ''); + if (!isset(self::$_instances[$key])) { - $GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key] = new CacheHandler($target, $info, $always_use_file); + self::$_instances[$key] = new self($target, $info, $always_use_file); } - return $GLOBALS['__XE_CACHE_HANDLER__'][$cache_handler_key]; + return self::$_instances[$key]; } /** @@ -44,84 +49,53 @@ class CacheHandler extends Handler * Do not use this directly. You can use getInstance() instead. * * @see CacheHandler::getInstance - * @param string $target type of cache (object|template) + * @param string $target type of cache (object) * @param object $info info. of DB * @param boolean $always_use_file If set true, use a file cache always * @return CacheHandler */ - function __construct($target, $info = null, $always_use_file = false) + protected function __construct($target, $info = null, $always_use_file = false) { - if(!$info) + // Allow using custom cache info for backward compatibility. + if (is_object($info) && $info->use_object_cache) { - $info = Context::getDBInfo(); + $cache_config = $info->use_object_cache; } - - if($info) + else { - if($target == 'object') + $cache_config = config('cache'); + if (is_array($cache_config) && count($cache_config)) { - if($info->use_object_cache == 'apc') - { - $type = 'apc'; - } - else if(substr($info->use_object_cache, 0, 8) == 'memcache') - { - $type = 'memcache'; - $url = $info->use_object_cache; - } - else if(substr($info->use_object_cache, 0, 5) == 'redis') - { - $type = 'redis'; - $url = $info->use_object_cache; - } - else if($info->use_object_cache == 'wincache') - { - $type = 'wincache'; - } - else if($info->use_object_cache == 'file') - { - $type = 'file'; - } - else if($always_use_file) - { - $type = 'file'; - } - } - else if($target == 'template') - { - if($info->use_template_cache == 'apc') - { - $type = 'apc'; - } - else if(substr($info->use_template_cache, 0, 8) == 'memcache') - { - $type = 'memcache'; - $url = $info->use_template_cache; - } - else if(substr($info->use_template_cache, 0, 5) == 'redis') - { - $type = 'redis'; - $url = $info->use_template_cache; - } - else if($info->use_template_cache == 'wincache') - { - $type = 'wincache'; - } - } - - if($type) - { - $class = 'Cache' . ucfirst($type); - include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class); - $this->handler = call_user_func(array($class, 'getInstance'), $url); - $this->keyGroupVersions = $this->handler->get('key_group_versions', 0); - if(!$this->keyGroupVersions) - { - $this->keyGroupVersions = array(); - $this->handler->put('key_group_versions', $this->keyGroupVersions, 0); - } + $cache_config = array_first($cache_config); } } + + // Handle various types of cache backend. + if (preg_match('/^(apc|memcache|redis|wincache|file)/', strval($cache_config), $matches)) + { + $type = $matches[1]; + } + elseif ($always_use_file) + { + $type = 'file'; + } + else + { + return; + } + + // Create an instance of cache backend. + $class = 'Cache' . ucfirst($type); + include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class); + $this->handler = $class::getInstance($cache_config); + + // Initialize key group versions. + $this->keyGroupVersions = $this->handler->get('key_group_versions', 0); + if(!$this->keyGroupVersions) + { + $this->keyGroupVersions = array(); + $this->handler->put('key_group_versions', $this->keyGroupVersions, 0); + } } /** @@ -129,14 +103,9 @@ class CacheHandler extends Handler * * @return boolean */ - function isSupport() + public function isSupport() { - if($this->handler && $this->handler->isSupport()) - { - return true; - } - - return false; + return ($this->handler && $this->handler->isSupport()); } /** @@ -145,11 +114,9 @@ class CacheHandler extends Handler * @param string $key The key that will be associated with the item. * @return string Returns cache name */ - function getCacheKey($key) + public function getCacheKey($key) { - $key = str_replace('/', ':', $key); - - return __XE_VERSION__ . ':' . $key; + return RX_VERSION . ':' . str_replace('/', ':', $key); } /** @@ -160,16 +127,9 @@ class CacheHandler extends Handler * If stored time is older then modified time, return false. * @return false|mixed Return false on failure or older then modified time. Return the string associated with the $key on success. */ - function get($key, $modified_time = 0) + public function get($key, $modified_time = 0) { - if(!$this->handler) - { - return false; - } - - $key = $this->getCacheKey($key); - - return $this->handler->get($key, $modified_time); + return $this->handler ? $this->handler->get($this->getCacheKey($key), $modified_time) : false; } /** @@ -182,16 +142,9 @@ class CacheHandler extends Handler * If no ttl is supplied, use the default valid time. * @return bool|void Returns true on success or false on failure. If use CacheFile, returns void. */ - function put($key, $obj, $valid_time = 0) + public function put($key, $obj, $valid_time = 0) { - if(!$this->handler && !$key) - { - return false; - } - - $key = $this->getCacheKey($key); - - return $this->handler->put($key, $obj, $valid_time); + return $this->handler ? $this->handler->put($this->getCacheKey($key), $obj, $valid_time) : false; } /** @@ -200,16 +153,9 @@ class CacheHandler extends Handler * @param string $key Cache key * @return void */ - function delete($key) + public function delete($key) { - if(!$this->handler) - { - return false; - } - - $key = $this->getCacheKey($key); - - return $this->handler->delete($key); + return $this->handler ? $this->handler->delete($this->getCacheKey($key)) : false; } /** @@ -220,16 +166,9 @@ class CacheHandler extends Handler * If stored time is older then modified time, the data is invalid. * @return bool Return true on valid or false on invalid. */ - function isValid($key, $modified_time) + public function isValid($key, $modified_time = 0) { - if(!$this->handler) - { - return false; - } - - $key = $this->getCacheKey($key); - - return $this->handler->isValid($key, $modified_time); + return $this->handler ? $this->handler->isValid($this->getCacheKey($key), $modified_time) : false; } /** @@ -237,14 +176,9 @@ class CacheHandler extends Handler * * @return bool|void Returns true on success or false on failure. If use CacheFile, returns void. */ - function truncate() + public function truncate() { - if(!$this->handler) - { - return false; - } - - return $this->handler->truncate(); + return $this->handler ? $this->handler->truncate() : false; } /** @@ -263,7 +197,7 @@ class CacheHandler extends Handler * @param string $key Cache key * @return string */ - function getGroupKey($keyGroupName, $key) + public function getGroupKey($keyGroupName, $key) { if(!$this->keyGroupVersions[$keyGroupName]) { @@ -280,12 +214,11 @@ class CacheHandler extends Handler * @param string $keyGroupName Group name * @return void */ - function invalidateGroupKey($keyGroupName) + public function invalidateGroupKey($keyGroupName) { $this->keyGroupVersions[$keyGroupName]++; $this->handler->put('key_group_versions', $this->keyGroupVersions, 0); } - } /** @@ -299,7 +232,7 @@ class CacheBase * Default valid time * @var int */ - var $valid_time = 36000; + public $valid_time = 36000; /** * Get cached data @@ -309,7 +242,7 @@ class CacheBase * If stored time is older then modified time, return false. * @return false|mixed Return false on failure or older then modified time. Return the string associated with the $key on success. */ - function get($key, $modified_time = 0) + public function get($key, $modified_time = 0) { return false; } @@ -324,10 +257,18 @@ class CacheBase * If no ttl is supplied, use the default valid time. * @return bool|void Returns true on success or false on failure. If use CacheFile, returns void. */ - function put($key, $obj, $valid_time = 0) + public function put($key, $obj, $valid_time = 0) { return false; } + + /** + * Alias of put() + */ + public function set($key, $obj, $valid_time = 0) + { + return $this->put($key, $obj, $valid_time = 0); + } /** * Return whether cache is valid or invalid @@ -337,7 +278,7 @@ class CacheBase * If stored time is older then modified time, the data is invalid. * @return bool Return true on valid or false on invalid. */ - function isValid($key, $modified_time = 0) + public function isValid($key, $modified_time = 0) { return false; } @@ -347,7 +288,7 @@ class CacheBase * * @return boolean */ - function isSupport() + public function isSupport() { return false; } @@ -357,7 +298,7 @@ class CacheBase * * @return bool|void Returns true on success or false on failure. If use CacheFile, returns void. */ - function truncate() + public function truncate() { return false; } From 225f02cac233d082feab328d94114e8e21cced85 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 13:05:28 +0900 Subject: [PATCH 6/7] Also update sites table when default_url is updated --- modules/admin/admin.admin.controller.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 24d14da1a..858cfb85d 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -651,6 +651,10 @@ class adminAdminController extends admin Rhymix\Framework\Config::set('url.http_port', $vars->http_port ?: null); Rhymix\Framework\Config::set('url.https_port', $vars->https_port ?: null); Rhymix\Framework\Config::set('url.ssl', $use_ssl); + getController('module')->updateSite((object)array( + 'site_srl' => 0, + 'domain' => preg_replace('@^https?://@', '', $default_url), + )); // Other settings Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y'); From f3d312278715dc8ce8143e3350ba582250d7c1b2 Mon Sep 17 00:00:00 2001 From: Kijin Sung Date: Thu, 11 Feb 2016 13:32:55 +0900 Subject: [PATCH 7/7] Make object cache configurable via the admin UI --- classes/cache/CacheHandler.class.php | 18 ++++++++++++++++-- classes/cache/CacheMemcache.class.php | 5 +++-- classes/cache/CacheRedis.class.php | 4 ++-- modules/admin/admin.admin.controller.php | 22 ++++++++++++++++++++++ modules/admin/admin.admin.view.php | 21 +++++++++++++++++++++ modules/admin/lang/en.php | 5 +++++ modules/admin/lang/ja.php | 5 +++++ modules/admin/lang/ko.php | 5 +++++ modules/admin/tpl/config_advanced.html | 13 +++++++++++++ modules/admin/tpl/js/config.js | 21 +++++++++++++++++++++ 10 files changed, 113 insertions(+), 6 deletions(-) diff --git a/classes/cache/CacheHandler.class.php b/classes/cache/CacheHandler.class.php index 5e34d08dd..f91d7d1cb 100644 --- a/classes/cache/CacheHandler.class.php +++ b/classes/cache/CacheHandler.class.php @@ -103,9 +103,19 @@ class CacheHandler extends Handler * * @return boolean */ - public function isSupport() + public function isSupport($type = null, $cache_config = null) { - return ($this->handler && $this->handler->isSupport()); + if ($type === null) + { + return ($this->handler && $this->handler->isSupport()); + } + else + { + $class = 'Cache' . ucfirst(str_replace('memcached', 'memcache', $type)); + include_once sprintf('%sclasses/cache/%s.class.php', _XE_PATH_, $class); + $handler = $class::getInstance($cache_config, true); + return $handler->isSupport(); + } } /** @@ -129,6 +139,7 @@ class CacheHandler extends Handler */ public function get($key, $modified_time = 0) { + if (!$key) return false; return $this->handler ? $this->handler->get($this->getCacheKey($key), $modified_time) : false; } @@ -144,6 +155,7 @@ class CacheHandler extends Handler */ public function put($key, $obj, $valid_time = 0) { + if (!$key) return false; return $this->handler ? $this->handler->put($this->getCacheKey($key), $obj, $valid_time) : false; } @@ -155,6 +167,7 @@ class CacheHandler extends Handler */ public function delete($key) { + if (!$key) return false; return $this->handler ? $this->handler->delete($this->getCacheKey($key)) : false; } @@ -168,6 +181,7 @@ class CacheHandler extends Handler */ public function isValid($key, $modified_time = 0) { + if (!$key) return false; return $this->handler ? $this->handler->isValid($this->getCacheKey($key), $modified_time) : false; } diff --git a/classes/cache/CacheMemcache.class.php b/classes/cache/CacheMemcache.class.php index b37019ab6..6fdecea3f 100644 --- a/classes/cache/CacheMemcache.class.php +++ b/classes/cache/CacheMemcache.class.php @@ -21,11 +21,12 @@ class CacheMemcache extends CacheBase * @param string $url url of memcache * @return CacheMemcache instance of CacheMemcache */ - function getInstance($url) + function getInstance($url, $force_new_instance = false) { - if(!$GLOBALS['__CacheMemcache__']) + if(!$GLOBALS['__CacheMemcache__'] || $force_new_instance) { $GLOBALS['__CacheMemcache__'] = new CacheMemcache($url); + unset($GLOBALS['XE_MEMCACHE_SUPPORT']); } return $GLOBALS['__CacheMemcache__']; } diff --git a/classes/cache/CacheRedis.class.php b/classes/cache/CacheRedis.class.php index 0c8742ba5..91c59beaa 100644 --- a/classes/cache/CacheRedis.class.php +++ b/classes/cache/CacheRedis.class.php @@ -21,9 +21,9 @@ class CacheRedis extends CacheBase * @param string $url url of Redis * @return CacheRedis instance of CacheRedis */ - function getInstance($url) + function getInstance($url, $force_new_instance = false) { - if(!$GLOBALS['__CacheRedis__']) + if(!$GLOBALS['__CacheRedis__'] || $force_new_instance) { $GLOBALS['__CacheRedis__'] = new CacheRedis($url); } diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 858cfb85d..09580f1d8 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -656,6 +656,28 @@ class adminAdminController extends admin 'domain' => preg_replace('@^https?://@', '', $default_url), )); + // Object cache + if ($vars->object_cache_type) + { + if ($vars->object_cache_type === 'memcached' || $vars->object_cache_type === 'redis') + { + $cache_config = $vars->object_cache_type . '://' . $vars->object_cache_host . ':' . intval($vars->object_cache_port); + } + else + { + $cache_config = $vars->object_cache_type; + } + if (!CacheHandler::isSupport($vars->object_cache_type, $cache_config)) + { + return new Object(-1, 'msg_cache_handler_not_supported'); + } + Rhymix\Framework\Config::set('cache', array($cache_config)); + } + else + { + Rhymix\Framework\Config::set('cache', array()); + } + // Other settings Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y'); Rhymix\Framework\Config::set('use_sso', $vars->use_sso === 'Y'); diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 0d1c403b3..45880c1df 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -450,6 +450,27 @@ class adminAdminView extends admin Context::set('http_port', Rhymix\Framework\Config::get('url.http_port')); Context::set('https_port', Rhymix\Framework\Config::get('url.https_port')); + // Object cache + $object_cache_config = Rhymix\Framework\Config::get('cache'); + if (is_array($object_cache_config)) + { + $object_cache_config = array_first($object_cache_config); + } + $object_cache_types = array('apc', 'file', 'memcached', 'redis', 'wincache'); + $object_cache_type = preg_match('/^(' . implode('|', $object_cache_types) . ')/', $object_cache_config, $matches) ? $matches[1] : ''; + Context::set('object_cache_types', $object_cache_types); + Context::set('object_cache_type', $object_cache_type); + if ($object_cache_type) + { + Context::set('object_cache_host', parse_url($object_cache_config, PHP_URL_HOST) ?: null); + Context::set('object_cache_port', parse_url($object_cache_config, PHP_URL_PORT) ?: null); + } + else + { + Context::set('object_cache_host', null); + Context::set('object_cache_port', null); + } + // Other settings Context::set('use_mobile_view', Rhymix\Framework\Config::get('use_mobile_view')); Context::set('use_rewrite', Rhymix\Framework\Config::get('use_rewrite')); diff --git a/modules/admin/lang/en.php b/modules/admin/lang/en.php index 0a746264e..11aa984a3 100644 --- a/modules/admin/lang/en.php +++ b/modules/admin/lang/en.php @@ -86,6 +86,11 @@ $lang->about_minify_scripts = 'Automatically minify all CSS and JS scripts in th $lang->use_gzip = 'gzip Compression'; $lang->delay_session = 'Delay session start'; $lang->about_delay_session = 'To improve performance when using a caching proxy server such as Varnish, do not issue sessions to visitors until they log in.
Selecting this option may cause view counts and visitor counts to become inaccurate.'; +$lang->use_object_cache = 'Use Object Cache'; +$lang->use_object_cache_do_not_use = 'none'; +$lang->cache_host = 'Host'; +$lang->cache_port = 'Port'; +$lang->msg_cache_handler_not_supported = 'Your server does not support the selected cache method, or Rhymix is unable to use the cache with the given settings.'; $lang->msg_invalid_default_url = 'The default URL is invalid.'; $lang->msg_default_url_ssl_inconsistent = 'In order to use SSL always, the default URL must also begin with https://'; $lang->msg_default_url_http_port_inconsistent = 'In order to change the HTTP port, the default URL must also include the port number.'; diff --git a/modules/admin/lang/ja.php b/modules/admin/lang/ja.php index e7a686b32..9717c89fd 100644 --- a/modules/admin/lang/ja.php +++ b/modules/admin/lang/ja.php @@ -86,6 +86,11 @@ $lang->about_minify_scripts = 'コアとすべてのモジュールに含まれ $lang->use_gzip = 'gzip 圧縮'; $lang->delay_session = 'セッションの開始を遅延'; $lang->about_delay_session = 'Varnishなどのプロキシキャッシュサーバ使用時のパフォーマンスを向上させるために、ログインしていないユーザーには、認証セッションを付与しません。
このオプションを選択した場合、訪問者数とヒット集計が正確でない場合があります。'; +$lang->use_object_cache = 'オブジェクトキャッシュ'; +$lang->use_object_cache_do_not_use = '使用していない'; +$lang->cache_host = 'ホスト'; +$lang->cache_port = 'ポート'; +$lang->msg_cache_handler_not_supported = '選択したキャッシュ方式をサーバーでサポートされていないか、与えられた情報でキャッシュにアクセスすることができません。'; $lang->msg_invalid_default_url = '基本URLが正しくありません。'; $lang->msg_default_url_ssl_inconsistent = 'SSLを常に使用する場合、基本URLもhttps://で始まる必要があります。'; $lang->msg_default_url_http_port_inconsistent = 'HTTPポートを変更する場合、基本URLも同じポートが含まれている必要があります。'; diff --git a/modules/admin/lang/ko.php b/modules/admin/lang/ko.php index cc0c838d0..7d7093e5e 100644 --- a/modules/admin/lang/ko.php +++ b/modules/admin/lang/ko.php @@ -86,6 +86,11 @@ $lang->about_minify_scripts = '코어와 모든 모듈에 포함된 CSS, JS 파 $lang->use_gzip = 'gzip 압축'; $lang->delay_session = '세션 시작 지연'; $lang->about_delay_session = 'Varnish 등의 프록시 캐싱 서버 사용시 성능 개선을 위해, 로그인하지 않은 사용자에게는 인증 세션을 부여하지 않습니다.
이 옵션을 선택할 경우 방문자 수 및 조회수 집계가 정확하게 이루어지지 않을 수 있습니다.'; +$lang->use_object_cache = '오브젝트 캐시 사용'; +$lang->use_object_cache_do_not_use = '사용하지 않음'; +$lang->cache_host = '호스트'; +$lang->cache_port = '포트'; +$lang->msg_cache_handler_not_supported = '선택하신 캐시 방식을 서버에서 지원하지 않거나, 주어진 정보로 캐시에 접속할 수 없습니다.'; $lang->msg_invalid_default_url = '기본 URL이 올바르지 않습니다.'; $lang->msg_default_url_ssl_inconsistent = 'SSL을 항상 사용하실 경우 기본 URL도 https://로 시작해야 합니다.'; $lang->msg_default_url_http_port_inconsistent = 'HTTP 포트를 변경하실 경우 기본 URL에도 동일한 포트가 포함되어야 합니다.'; diff --git a/modules/admin/tpl/config_advanced.html b/modules/admin/tpl/config_advanced.html index b33a0b6be..f295d4772 100644 --- a/modules/admin/tpl/config_advanced.html +++ b/modules/admin/tpl/config_advanced.html @@ -58,6 +58,19 @@ +
+ +
+ + +
+
diff --git a/modules/admin/tpl/js/config.js b/modules/admin/tpl/js/config.js index 013da7388..af2d62a3a 100644 --- a/modules/admin/tpl/js/config.js +++ b/modules/admin/tpl/js/config.js @@ -2,6 +2,27 @@ jQuery(function($){ $('.tgContent ul').bind('click', function(){ $('#sitefind_addBtn').css('display',''); }); + if ($("#object_cache_type").size()) { + $("#object_cache_type").on("change", function() { + if ($(this).val().match(/memcache|redis/)) { + $("#object_cache_additional_config").show(); + if (!$("#object_cache_host").val()) { + $("#object_cache_host").val('127.0.0.1'); + } + if (!$("#object_cache_port").val()) { + $("#object_cache_port").val($(this).val().match(/memcache/) ? '11211' : '6379'); + } + if ($(this).val().match(/memcache/) && $("#object_cache_port").val() == '6379') { + $("#object_cache_port").val('11211'); + } + if ($(this).val().match(/redis/) && $("#object_cache_port").val() == '11211') { + $("#object_cache_port").val('6379'); + } + } else { + $("#object_cache_additional_config").hide(); + } + }).triggerHandler("change"); + } }); function setStartModule(){