= 5); define('W3TC_WIN', (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN')); defined('W3TC_DIR') || define('W3TC_DIR', realpath(dirname(__FILE__) . '/..')); define('W3TC_FILE', 'w3-total-cache/w3-total-cache.php'); define('W3TC_INC_DIR', W3TC_DIR . '/inc'); define('W3TC_LIB_DIR', W3TC_DIR . '/lib'); define('W3TC_LIB_W3_DIR', W3TC_LIB_DIR . '/W3'); define('W3TC_LIB_MINIFY_DIR', W3TC_LIB_DIR . '/Minify'); define('W3TC_LIB_CF_DIR', W3TC_LIB_DIR . '/CF'); define('W3TC_LIB_CSSTIDY_DIR', W3TC_LIB_DIR . '/CSSTidy'); define('W3TC_LIB_MICROSOFT_DIR', W3TC_LIB_DIR . '/Microsoft'); define('W3TC_LIB_NUSOAP_DIR', W3TC_LIB_DIR . '/Nusoap'); define('W3TC_PLUGINS_DIR', W3TC_DIR . '/plugins'); define('W3TC_INSTALL_DIR', W3TC_DIR . '/wp-content'); define('W3TC_INSTALL_MINIFY_DIR', W3TC_INSTALL_DIR . '/w3tc/min'); define('W3TC_BLOGNAMES_PATH', WP_CONTENT_DIR . '/w3-total-cache-blognames.php'); define('W3TC_BLOGNAME', w3_get_blogname()); define('W3TC_SUFFIX', (W3TC_BLOGNAME != '' ? '-' . W3TC_BLOGNAME : '')); defined('WP_CONTENT_DIR') || define('WP_CONTENT_DIR', realpath(W3TC_DIR . '/../..')); define('WP_CONTENT_DIR_PATH', dirname(WP_CONTENT_DIR)); define('WP_CONTENT_DIR_NAME', basename(WP_CONTENT_DIR)); define('W3TC_CONTENT_DIR_NAME', WP_CONTENT_DIR_NAME . '/w3tc' . W3TC_SUFFIX); define('W3TC_CONTENT_DIR', WP_CONTENT_DIR_PATH . '/' . W3TC_CONTENT_DIR_NAME); define('W3TC_CONTENT_MINIFY_DIR_NAME', W3TC_CONTENT_DIR_NAME . '/min'); define('W3TC_CONTENT_MINIFY_DIR', WP_CONTENT_DIR_PATH . '/' . W3TC_CONTENT_DIR_NAME . '/min'); define('W3TC_CACHE_FILE_DBCACHE_DIR', W3TC_CONTENT_DIR . '/dbcache'); define('W3TC_CACHE_FILE_OBJECTCACHE_DIR', W3TC_CONTENT_DIR . '/objectcache'); define('W3TC_CACHE_FILE_PGCACHE_DIR', W3TC_CONTENT_DIR . '/pgcache'); define('W3TC_CACHE_FILE_MINIFY_DIR', W3TC_CONTENT_DIR . '/min'); define('W3TC_LOG_DIR', W3TC_CONTENT_DIR . '/log'); define('W3TC_TMP_DIR', W3TC_CONTENT_DIR . '/tmp'); define('W3TC_CONFIG_PATH', WP_CONTENT_DIR . '/w3-total-cache-config' . W3TC_SUFFIX . '.php'); define('W3TC_CONFIG_PREVIEW_PATH', WP_CONTENT_DIR . '/w3-total-cache-config' . W3TC_SUFFIX . '-preview.php'); define('W3TC_CONFIG_MASTER_PATH', WP_CONTENT_DIR . '/w3-total-cache-config.php'); define('W3TC_MINIFY_LOG_FILE', W3TC_LOG_DIR . '/minify.log'); define('W3TC_CDN_COMMAND_UPLOAD', 1); define('W3TC_CDN_COMMAND_DELETE', 2); define('W3TC_CDN_COMMAND_PURGE', 3); define('W3TC_CDN_TABLE_QUEUE', 'w3tc_cdn_queue'); define('W3TC_CDN_LOG_FILE', W3TC_LOG_DIR . '/cdn.log'); define('W3TC_VARNISH_LOG_FILE', W3TC_LOG_DIR . '/varnish.log'); define('W3TC_MARKER_BEGIN_WORDPRESS', '# BEGIN WordPress'); define('W3TC_MARKER_BEGIN_PGCACHE_CORE', '# BEGIN W3TC Page Cache core'); define('W3TC_MARKER_BEGIN_PGCACHE_CACHE', '# BEGIN W3TC Page Cache cache'); define('W3TC_MARKER_BEGIN_PGCACHE_LEGACY', '# BEGIN W3TC Page Cache'); define('W3TC_MARKER_BEGIN_PGCACHE_WPSC', '# BEGIN WPSuperCache'); define('W3TC_MARKER_BEGIN_BROWSERCACHE_CACHE', '# BEGIN W3TC Browser Cache'); define('W3TC_MARKER_BEGIN_BROWSERCACHE_NO404WP', '# BEGIN W3TC Skip 404 error handling by WordPress for static files'); define('W3TC_MARKER_BEGIN_MINIFY_CORE', '# BEGIN W3TC Minify core'); define('W3TC_MARKER_BEGIN_MINIFY_CACHE', '# BEGIN W3TC Minify cache'); define('W3TC_MARKER_BEGIN_MINIFY_LEGACY', '# BEGIN W3TC Minify'); define('W3TC_MARKER_END_WORDPRESS', '# END WordPress'); define('W3TC_MARKER_END_PGCACHE_CORE', '# END W3TC Page Cache core'); define('W3TC_MARKER_END_PGCACHE_CACHE', '# END W3TC Page Cache cache'); define('W3TC_MARKER_END_PGCACHE_LEGACY', '# END W3TC Page Cache'); define('W3TC_MARKER_END_PGCACHE_WPSC', '# END WPSuperCache'); define('W3TC_MARKER_END_BROWSERCACHE_CACHE', '# END W3TC Browser Cache'); define('W3TC_MARKER_END_BROWSERCACHE_NO404WP', '# END W3TC Skip 404 error handling by WordPress for static files'); define('W3TC_MARKER_END_MINIFY_CORE', '# END W3TC Minify core'); define('W3TC_MARKER_END_MINIFY_CACHE', '# END W3TC Minify cache'); define('W3TC_MARKER_END_MINIFY_LEGACY', '# END W3TC Minify'); define('W3TC_INSTALL_FILE_ADVANCED_CACHE', W3TC_INSTALL_DIR . '/advanced-cache.php'); define('W3TC_INSTALL_FILE_DB', W3TC_INSTALL_DIR . '/db.php'); define('W3TC_INSTALL_FILE_OBJECT_CACHE', W3TC_INSTALL_DIR . '/object-cache.php'); define('W3TC_ADDIN_FILE_ADVANCED_CACHE', WP_CONTENT_DIR . '/advanced-cache.php'); define('W3TC_ADDIN_FILE_DB', WP_CONTENT_DIR . '/db.php'); define('W3TC_ADDIN_FILE_OBJECT_CACHE', WP_CONTENT_DIR . '/object-cache.php'); require_once W3TC_INC_DIR . '/functions/compat.php'; require_once W3TC_INC_DIR . '/functions/plugin.php'; @ini_set('pcre.backtrack_limit', 4194304); @ini_set('pcre.recursion_limit', 4194304); /** * Returns current microtime * * @return double */ function w3_microtime() { list ($usec, $sec) = explode(' ', microtime()); return ((double) $usec + (double) $sec); } /** * Check if content is HTML or XML * * @param string $content * @return boolean */ function w3_is_xml($content) { if (strlen($content) > 1000) { $content = substr($content, 0, 1000); } if (strstr($content, '~s', '', $content); } $content = ltrim($content, "\x00\x09\x0A\x0D\x20\xBB\xBF\xEF"); return (stripos($content, 'Database Error') !== false); } /** * Returns true if preview config exists * * @return boolean */ function w3_is_preview_config() { return file_exists(W3TC_CONFIG_PREVIEW_PATH); } /** * Retuns true if preview settings active * * @return boolean */ function w3_is_preview_mode() { return (w3_is_preview_config() && (defined('WP_ADMIN') || isset($_REQUEST['w3tc_preview']) || (isset($_SERVER['HTTP_REFERER']) && strstr($_SERVER['HTTP_REFERER'], 'w3tc_preview') !== false))); } /** * Returns true if server is Apache * * @return boolean */ function w3_is_apache() { return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'Apache') !== false); } /** * Check whether server is LiteSpeed * * @return bool */ function w3_is_litespeed() { return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'LiteSpeed') !== false); } /** * Returns true if server is nginx * * @return boolean */ function w3_is_nginx() { return (isset($_SERVER['SERVER_SOFTWARE']) && stristr($_SERVER['SERVER_SOFTWARE'], 'nginx') !== false); } /** * Check whether $engine is correct CDN engine * * @param string $engine * @return boolean */ function w3_is_cdn_engine($engine) { return in_array($engine, array('ftp', 's3', 'cf', 'cf2', 'rscf', 'azure', 'mirror', 'netdna', 'cotendo', 'edgecast')); } /** * Returns true if CDN engine is mirror * * @param string $engine * @return bool */ function w3_is_cdn_mirror($engine) { return in_array($engine, array('mirror', 'netdna', 'cotendo', 'cf2', 'edgecast')); } /** * Returns domain from host * * @param string $host * @return string */ function w3_get_domain($host) { $host = strtolower($host); if (strpos($host, 'www.') === 0) { $host = substr($host, 4); } if (($pos = strpos($host, ':')) !== false) { $host = substr($host, 0, $pos); } $host = rtrim($host, '.'); return $host; } /** * Returns array of all available blognames * * @return array */ function w3_get_blognames() { global $wpdb; $blognames = array(); $sql = sprintf('SELECT domain, path FROM %s', $wpdb->blogs); $blogs = $wpdb->get_results($sql); if ($blogs) { $base_path = w3_get_base_path(); foreach ($blogs as $blog) { $blogname = trim(str_replace($base_path, '', $blog->path), '/'); if ($blogname) { $blognames[] = $blogname; } } } return $blognames; } /** * Load blognames from file * * @return array */ function w3_load_blognames() { $blognames = include W3TC_BLOGNAMES_PATH; return $blognames; } /** * Save blognames into file * * @param string $blognames * @return boolean */ function w3_save_blognames($blognames = null) { if (!$blognames) { $blognames = w3_get_blognames(); } $strings = array(); foreach ($blognames as $blogname) { $strings[] = sprintf("'%s'", addslashes($blogname)); } $data = sprintf(' '\ ' )); return $string; } /** * Returns true if zlib output compression is enabled otherwise false * * @return boolean */ function w3_zlib_output_compression() { return w3_to_boolean(ini_get('zlib.output_compression')); } /** * Recursive strips slahes from the var * * @param mixed $var * @return mixed */ function w3_stripslashes($var) { if (is_string($var)) { return stripslashes($var); } elseif (is_array($var)) { $var = array_map('w3_stripslashes', $var); } return $var; } /** * Escapes HTML comment * * @param string $comment * @return mixed */ function w3_escape_comment($comment) { while (strstr($comment, '--') !== false) { $comment = str_replace('--', '- -', $comment); } return $comment; } /** * Returns instance of singleton class * * @param string $class * @return object */ function &w3_instance($class) { static $instances = array(); if (!isset($instances[$class])) { require_once W3TC_LIB_W3_DIR . '/' . str_replace('_', '/', substr($class, 3)) . '.php'; @$instances[$class] = & new $class(); } $v = $instances[$class]; // Don't return reference return $v; } /** * Loads plugins * * @return void */ function w3_load_plugins() { $dir = @opendir(W3TC_PLUGINS_DIR); if ($dir) { while (($entry = @readdir($dir)) !== false) { if (strrchr($entry, '.') === '.php') { require_once W3TC_PLUGINS_DIR . '/' . $entry; } } @closedir($dir); } }