Пример #1
0
 public static function add_advanced()
 {
     do_action("ws_plugin__qcache_before_add_advanced", get_defined_vars());
     /**/
     if (!c_ws_plugin__qcache_advanced_cache::delete_advanced()) {
         return apply_filters("ws_plugin__qcache_add_advanced", false, get_defined_vars());
     } else {
         if (is_writable(WP_CONTENT_DIR) && (!file_exists(WP_CONTENT_DIR . "/advanced-cache.php") || is_writable(WP_CONTENT_DIR . "/advanced-cache.php")) && ($handler = file_get_contents(dirname(dirname(__FILE__)) . "/templates/handler.tpl.php"))) {
             $handler = preg_replace("/\"%%QUICK_CACHE_ENABLED%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["enabled"], $handler);
             $handler = preg_replace("/\"%%QUICK_CACHE_ENABLE_DEBUGGING%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["enable_debugging"], $handler);
             $handler = preg_replace("/\"%%QUICK_CACHE_DONT_CACHE_WHEN_LOGGED_IN%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["dont_cache_when_logged_in"], $handler);
             $handler = preg_replace("/\"%%QUICK_CACHE_DONT_CACHE_QUERY_STRING_REQUESTS%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["dont_cache_query_string_requests"], $handler);
             $handler = preg_replace("/\"%%QUICK_CACHE_EXPIRATION%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["expiration"], $handler);
             $handler = preg_replace("/\"%%QUICK_CACHE_ALLOW_BROWSER_CACHE%%\"/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["allow_browser_cache"], $handler);
             /**/
             $handler = preg_replace("/%%QUICK_CACHE_USE_FLOCK_OR_SEM%%/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["use_flock_or_sem"], $handler);
             /**/
             foreach (preg_split("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["dont_cache_these_uris"]) as $uri) {
                 if ($uri = trim($uri)) {
                     $uris .= "|" . preg_quote($uri, "/");
                 }
             }
             if ($uris = trim($uris, " \r\n\t\v|")) {
                 $uris = "/" . c_ws_plugin__qcache_utils_strings::esc_dq($uris) . "/";
             }
             $handler = preg_replace("/%%QUICK_CACHE_DONT_CACHE_THESE_URIS%%/", $uris, $handler);
             /**/
             foreach (preg_split("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["dont_cache_these_refs"]) as $ref) {
                 if ($ref = trim($ref)) {
                     $refs .= "|" . preg_quote($ref, "/");
                 }
             }
             if ($refs = trim($refs, " \r\n\t\v|")) {
                 $refs = "/" . c_ws_plugin__qcache_utils_strings::esc_dq($refs) . "/i";
             }
             $handler = preg_replace("/%%QUICK_CACHE_DONT_CACHE_THESE_REFS%%/", $refs, $handler);
             /**/
             foreach (preg_split("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["dont_cache_these_agents"]) as $agent) {
                 if ($agent = trim($agent)) {
                     $agents .= "|" . preg_quote($agent, "/");
                 }
             }
             if ($agents = trim($agents, " \r\n\t\v|")) {
                 $agents = "/" . c_ws_plugin__qcache_utils_strings::esc_dq($agents) . "/i";
             }
             $handler = preg_replace("/%%QUICK_CACHE_DONT_CACHE_THESE_AGENTS%%/", $agents, $handler);
             /**/
             if (strlen($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["version_salt"])) {
                 if (file_put_contents(WP_CONTENT_DIR . "/qcache-salt-ok.php", '<?php error_reporting(0); $v = ' . $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["version_salt"] . '; echo "ok"; ?>')) {
                     $salt_ok = ($syntax_check = c_ws_plugin__qcache_utils_urls::remote(WP_CONTENT_URL . "/qcache-salt-ok.php")) === "ok" ? true : false;
                     if (!$salt_ok) {
                         /* If we could not validate the syntax of their salt, we need to notify them that it will not be used. */
                         c_ws_plugin__qcache_admin_notices::enqueue_admin_notice("<strong>Quick Cache:</strong> Your MD5 Version Salt may contain syntax errors. Please check it and try again. Otherwise, if you are unable to correct the problem, your Salt will simply be ignored. Quick Cache will continue to function properly using its default setting.", "blog|network:ws-plugin--qcache-options", true);
                     }
                     unlink(WP_CONTENT_DIR . "/qcache-salt-ok.php");
                 }
             }
             $handler = preg_replace("/\"%%QUICK_CACHE_VERSION_SALT%%\"/", $salt_ok ? $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["version_salt"] : '""', $handler);
             /**/
             eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
             do_action("ws_plugin__qcache_during_add_advanced", get_defined_vars());
             unset($__refs, $__v);
             /* Unset defined __refs, __v. */
             /**/
             file_put_contents(WP_CONTENT_DIR . "/advanced-cache.php", trim($handler));
             /**/
             return apply_filters("ws_plugin__qcache_add_advanced", true, get_defined_vars());
         } else {
             return apply_filters("ws_plugin__qcache_add_advanced", false, get_defined_vars());
         }
     }
 }
 public static function auto_cache_engine()
 {
     do_action("ws_plugin__qcache_before_auto_cache_engine", get_defined_vars());
     /**/
     if ($GLOBALS["WS_PLUGIN__"]["qcache"]["c"]["configured"] && $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["enabled"]) {
         if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_enabled"] && $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_agent"]) {
             if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_sitemap_url"] || $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_additional_urls"]) {
                 if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["expiration"] >= 3600) {
                     $log = "";
                     clearstatcache();
                     @set_time_limit(900);
                     @ignore_user_abort(true);
                     @ini_set("memory_limit", "512M");
                     /**/
                     define("QUICK_CACHE_ALLOWED", false);
                     /**/
                     do_action("ws_plugin__qcache_before_auto_cache_engine_routines", get_defined_vars());
                     /**/
                     if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["use_flock_or_sem"] === "sem" && function_exists("sem_get") && ($mutex = @sem_get(1977, 1, 0644 | IPC_CREAT, 1)) && @sem_acquire($mutex)) {
                         $mutex_method = "sem";
                     } else {
                         if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["use_flock_or_sem"] === "flock" && ($mutex = @fopen(WP_CONTENT_DIR . "/cache/qc-l-ac.mutex.lock", "w")) && @flock($mutex, LOCK_EX)) {
                             $mutex_method = "flock";
                         }
                     }
                     /**/
                     if ($mutex && $mutex_method && is_array($urls = array())) {
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__qcache_during_auto_cache_engine_before", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_sitemap_url"]) {
                             if ($sitemap = c_ws_plugin__qcache_utils_urls::remote($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_sitemap_url"])) {
                                 preg_match_all("/\\<loc\\>(.+?)\\<\\/loc\\>/i", $sitemap, $sitemap_matches);
                                 if (is_array($sitemap_matches[1]) && !empty($sitemap_matches[1])) {
                                     foreach ($sitemap_matches[1] as $sitemap_match) {
                                         if ($url = trim($sitemap_match)) {
                                             $urls[] = $url;
                                         }
                                     }
                                 }
                             }
                         }
                         /**/
                         if ($GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_additional_urls"]) {
                             foreach (preg_split("/[\r\n\t]+/", $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_additional_urls"]) as $additional) {
                                 if ($url = trim($additional)) {
                                     $urls[] = $url;
                                 }
                             }
                         }
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__qcache_during_auto_cache_engine_before_urls", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         if (($urls = array_unique($urls)) && !empty($urls) && shuffle($urls)) {
                             foreach ($urls as $url) {
                                 if (($parsed = parse_url($url)) && ($host_uri = preg_replace("/^http(s?)\\:\\/\\//i", "", $url))) {
                                     $host_uri = preg_replace("/^(" . preg_quote($parsed["host"], "/") . ")(\\:[0-9]+)(\\/)/i", "\$1\$3", $host_uri);
                                     /**/
                                     list($cache) = (array) glob(WP_CONTENT_DIR . "/cache/qc-c-*-" . md5($host_uri) . "-*");
                                     /* Match md5_2. */
                                     /**/
                                     if (!$cache || filemtime($cache) < strtotime("-" . $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["expiration"] . " seconds")) {
                                         c_ws_plugin__qcache_utils_urls::remote($url, false, array("timeout" => 0.01, "blocking" => false, "user-agent" => $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_agent"] . " + Quick Cache ( Auto-Cache Engine )"));
                                         /**/
                                         $log .= date("M j, Y, g:i a T") . " / Auto-Cached: " . $url . "\n";
                                         /* Keeps a running log of each URL being processed. */
                                         /**/
                                         if (($processed = (int) $processed + 1) >= $GLOBALS["WS_PLUGIN__"]["qcache"]["o"]["auto_cache_max_processes"]) {
                                             break;
                                         } else {
                                             if ($processed >= 25) {
                                                 /* Hard-coded maximum; for security. */
                                                 break;
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                         /**/
                         eval('foreach(array_keys(get_defined_vars())as$__v)$__refs[$__v]=&$$__v;');
                         do_action("ws_plugin__qcache_during_auto_cache_engine_before_log", get_defined_vars());
                         unset($__refs, $__v);
                         /* Unset defined __refs, __v. */
                         /**/
                         if ($log && (is_dir(WP_CONTENT_DIR . "/cache") || is_writable(WP_CONTENT_DIR))) {
                             if (!is_dir(WP_CONTENT_DIR . "/cache")) {
                                 mkdir(WP_CONTENT_DIR . "/cache", 0777, true);
                             }
                             /**/
                             clearstatcache();
                             /* Clear stat cache before next routine. */
                             /**/
                             if (is_dir(WP_CONTENT_DIR . "/cache") && is_writable(WP_CONTENT_DIR . "/cache")) {
                                 $auto_cache_log = WP_CONTENT_DIR . "/cache/qc-l-auto-cache.log";
                                 /**/
                                 if (file_exists($auto_cache_log) && filesize($auto_cache_log) > 2097152) {
                                     if (is_writable($auto_cache_log)) {
                                         /* This is a 2MB log rotation ^. */
                                         unlink($auto_cache_log);
                                     }
                                 }
                                 /* Resets the log. */
                                 /**/
                                 clearstatcache();
                                 /* Clear stat cache before next routine. */
                                 /**/
                                 if (!file_exists($auto_cache_log) || is_writable($auto_cache_log)) {
                                     file_put_contents($auto_cache_log, $log, FILE_APPEND);
                                 }
                             }
                         }
                         /**/
                         if ($mutex_method === "sem") {
                             sem_release($mutex);
                         } else {
                             if ($mutex_method === "flock") {
                                 flock($mutex, LOCK_UN);
                             }
                         }
                         /**/
                         do_action("ws_plugin__qcache_during_auto_cache_engine_after", get_defined_vars());
                     }
                     /**/
                     do_action("ws_plugin__qcache_during_auto_cache_engine", get_defined_vars());
                 }
             }
         }
     }
     /**/
     do_action("ws_plugin__qcache_after_auto_cache_engine", get_defined_vars());
     /**/
     return;
     /* Return for uniformity. */
 }