<?php defined( 'ABSPATH' ) || die( 'Cheatin&#8217; uh?' ); define( 'SWCFPC_ADVANCED_CACHE', true ); if ( ! swcfpc_is_this_page_cachable() ) { return; } if ( isset( $_SERVER['REQUEST_METHOD'] ) && strcasecmp( $_SERVER['REQUEST_METHOD'], 'GET' ) != 0 ) { return; } $swcfpc_fallback_cache_config_path = WP_CONTENT_DIR . "/wp-cloudflare-super-page-cache/{$_SERVER['HTTP_HOST']}/"; $swcfpc_fallback_cache_path = WP_CONTENT_DIR . "/wp-cloudflare-super-page-cache/{$_SERVER['HTTP_HOST']}/fallback_cache/"; if ( ! file_exists( "{$swcfpc_fallback_cache_config_path}main_config.php" ) ) { return; } require "{$swcfpc_fallback_cache_config_path}main_config.php"; if ( ! isset( $swcfpc_config ) || ! is_string( $swcfpc_config ) ) { return; } $swcfpc_config = json_decode( stripslashes( $swcfpc_config ), true ); if ( ! is_array( $swcfpc_config ) ) { return; } $swcfpc_addon_path = WP_CONTENT_DIR . '/wp-cloudflare-super-page-cache/advanced-cache-pro-addon.php'; if ( file_exists( $swcfpc_addon_path ) ) { require $swcfpc_addon_path; } /** * Super-Page-Cache rolling HIT / MISS sampler * Drop into advanced-cache.php (runs on every request). * * wp-config.php can override behaviour with one constant: * * define( 'SPC_METRICS_CONFIG', [ * 'enabled' => true, // collect stats? (default: true) * 'window' => 24, // hours to retain (default: 24) * 'sampling' => 10, // % requests used (default: 10) * ] ); * */ $__spc_cfg = array_merge( ['enabled' => true, 'window' => 24, 'sampling' => 10], defined('SPC_METRICS_CONFIG') && is_array(SPC_METRICS_CONFIG) ? SPC_METRICS_CONFIG : [] ); $__spc_cfg['window'] = max(1, (int) $__spc_cfg['window']); $__spc_cfg['sampling'] = min(100, max(1, (int) $__spc_cfg['sampling'])); $__spc_ttl = $__spc_cfg['window'] * HOUR_IN_SECONDS; $__spc_backend = (function_exists('apcu_inc') ? 'apcu' : 'file'); if ($__spc_backend === 'file') { define( 'SPC_METRICS_DIR', WP_CONTENT_DIR . "/wp-cloudflare-super-page-cache/{$_SERVER['HTTP_HOST']}/metrics" ); if (! is_dir(SPC_METRICS_DIR)) @mkdir(SPC_METRICS_DIR, 0755, true); } $swcfpc_fallback_cache_key = swcfpc_fallback_cache_get_current_page_cache_key(); if ( swcfpc_fallback_cache_is_url_to_exclude() ) { return; } if ( swcfpc_fallback_cache_is_cookie_to_exclude() ) { return; } if ( file_exists( $swcfpc_fallback_cache_path . $swcfpc_fallback_cache_key ) && ! swcfpc_fallback_cache_is_expired_page( $swcfpc_fallback_cache_key ) ) { $cache_controller = "s-maxage={$swcfpc_config['cf_maxage']}, max-age={$swcfpc_config['cf_browser_maxage']}"; $stored_headers = swcfpc_fallback_cache_get_stored_headers( $swcfpc_fallback_cache_path, $swcfpc_fallback_cache_key ); if ( (int) $swcfpc_config['cf_maxage'] > 0 ) { header_remove( 'Set-Cookie' ); } header_remove( 'Pragma' ); header_remove( 'Expires' ); header_remove( 'Cache-Control' ); header( "Cache-Control: {$cache_controller}" ); header( 'X-WP-SPC-Disk-Cache: HIT' ); header( 'X-WP-CF-Super-Cache-Active: 1' ); header( "X-WP-CF-Super-Cache-Cache-Control: {$cache_controller}" ); if ($stored_headers) { foreach ( $stored_headers as $single_header ) { header( $single_header, false ); } } $is_debug = defined( 'WP_DEBUG' ) && WP_DEBUG; spc_store_cache_hit(); die( file_get_contents( $swcfpc_fallback_cache_path . $swcfpc_fallback_cache_key ) . ( $is_debug ? '<!-- ADVANCED CACHE -->' : '' ) ); } ob_start( 'swcfpc_fallback_cache_end' ); function swcfpc_is_this_page_cachable() { if ( swcfpc_is_api_request() || ( isset( $GLOBALS['pagenow'] ) && in_array( $GLOBALS['pagenow'], [ 'wp-login.php', 'wp-register.php' ] ) ) || ( isset( $_SERVER['REQUEST_URI'] ) && substr( $_SERVER['REQUEST_URI'], 0, 16 ) == '/wp-register.php' ) || ( isset( $_SERVER['REQUEST_URI'] ) && substr( $_SERVER['REQUEST_URI'], 0, 13 ) == '/wp-login.php' ) || ( isset( $_SERVER['REQUEST_METHOD'] ) && strcasecmp( $_SERVER['REQUEST_METHOD'], 'GET' ) != 0 ) || ( ! defined( 'SWCFPC_CACHE_BUSTER' ) && isset( $_GET['swcfpc'] ) ) || ( defined( 'SWCFPC_CACHE_BUSTER' ) && isset( $_GET[ SWCFPC_CACHE_BUSTER ] ) ) || is_admin() || ( isset( $_SERVER['HTTP_X_REQUESTED_WITH'] ) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) || ( defined( 'WP_CLI' ) && WP_CLI ) || ( defined( 'DOING_CRON' ) && DOING_CRON ) ) { return false; } return true; } function swcfpc_is_api_request() { // WordPress standard API if ( ( defined( 'REST_REQUEST' ) && REST_REQUEST ) || strcasecmp( substr( $_SERVER['REQUEST_URI'], 0, 8 ), '/wp-json' ) == 0 ) { return true; } // WooCommerce standard API if ( strcasecmp( substr( $_SERVER['REQUEST_URI'], 0, 8 ), '/wc-api/' ) == 0 ) { return true; } // WooCommerce standard API if ( strcasecmp( substr( $_SERVER['REQUEST_URI'], 0, 9 ), '/edd-api/' ) == 0 ) { return true; } return false; } function swcfpc_fallback_cache_end( $html ) { /** * The main plugin class. * * @var SW_CLOUDFLARE_PAGECACHE $sw_cloudflare_pagecache */ global $sw_cloudflare_pagecache; if ( strlen( trim( $html ) ) == 0 ) { return $html; } if ( ! is_object( $sw_cloudflare_pagecache ) ) { return $html; } $swcfpc_objects = $sw_cloudflare_pagecache->get_modules(); if ( $sw_cloudflare_pagecache->get_single_config( 'cf_fallback_cache', 0 ) == 0 ) { return $html; } if ( $swcfpc_objects['cache_controller']->is_cache_enabled() && ! $swcfpc_objects['cache_controller']->is_url_to_bypass() && ! $swcfpc_objects['cache_controller']->can_i_bypass_cache() && isset( $_SERVER['REQUEST_METHOD'] ) && strcasecmp( $_SERVER['REQUEST_METHOD'], 'GET' ) == 0 ) { if ( isset( $_SERVER['HTTP_USER_AGENT'] ) && strcasecmp( $_SERVER['HTTP_USER_AGENT'], 'ua-swcfpc-fc' ) == 0 ) { return $html; } $cache_path = $swcfpc_objects['fallback_cache']->fallback_cache_init_directory(); $cache_key = swcfpc_fallback_cache_get_current_page_cache_key(); if ( ! file_exists( $cache_path . $cache_key ) || $swcfpc_objects['fallback_cache']->fallback_cache_is_expired_page( $cache_key ) ) { // Bypass 4xx or 5xx HTTP status codes (security blocks, errors, etc.) if ( SPCServicesSettings_Store::get_instance()->get( SPCConstants::SETTING_FALLBACK_CACHE_HTTP_RESPONSE_CODE ) ) { $http_status = http_response_code(); if ( $http_status !== false && $http_status >= 400 && $http_status < 600 ) { return $html; } } if ( $sw_cloudflare_pagecache->get_single_config( 'cf_fallback_cache_ttl', 0 ) == 0 ) { $ttl = 0; } else { $ttl = time() + $sw_cloudflare_pagecache->get_single_config( 'cf_fallback_cache_ttl', 0 ); } if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) { $html .= "n<!-- Page retrieved from Super Page Cache fallback cache - page generated @ " . date( 'Y-m-d H:i:s' ) . ' - fallback cache expiration @ ' . ( $ttl > 0 ? date( 'Y-m-d H:i:s', $ttl ) : 'never expires' ) . " - cache key {$cache_key} -->"; } // Provide a filter to modify the HTML before it is cached $html = apply_filters( 'swcfpc_normal_fallback_cache_html', $html, $cache_key ); file_put_contents( $cache_path . $cache_key, $html ); // Update TTL $swcfpc_objects['fallback_cache']->fallback_cache_set_single_ttl( $cache_key, $ttl ); $swcfpc_objects['fallback_cache']->fallback_cache_update_ttl_registry(); // Store headers if ( $sw_cloudflare_pagecache->get_single_config( 'cf_fallback_cache_save_headers', 0 ) > 0 ) { swcfpc_fallback_cache_save_headers( $cache_path, $cache_key ); } spc_store_cache_miss(); } } return $html; } function swcfpc_normalize_url( $url = null ) { if ( ! is_null( $url ) ) { $parts = parse_url( strtolower( $url ) ); if ( ! $parts ) { return false; } $current_uri = isset( $parts['path'] ) ? $parts['path'] : '/'; if ( isset( $parts['query'] ) ) { $current_uri .= "?{$parts['query']}"; } if ( $current_uri == '/' ) { $current_uri = $parts['host']; } } else { $current_uri = $_SERVER['REQUEST_URI']; if ( $current_uri == '/' ) { $current_uri = $_SERVER['HTTP_HOST']; } $current_uri = trim( $current_uri, '/' ); if ( strpos( $current_uri, '?' ) === 0 ) { $current_uri = $_SERVER['HTTP_HOST'] . $current_uri; } } $current_uri = apply_filters( 'swcfpc_fc_modify_current_url', $current_uri ); return swcfpc_fallback_cache_remove_url_parameters( $current_uri ); } function swcfpc_fallback_cache_get_current_page_cache_key( $url = null ) { $replacements = [ '://', '/', '?', '#', '&', '.', ',', '@', '-', ''', '"', '%', ' ', '\', '=' ]; $cache_key = str_replace( $replacements, '_', swcfpc_normalize_url( $url ) ); $cache_key = trim( $cache_key, '_' ); $cache_key = sha1( $cache_key ); return $cache_key . '.html'; } function swcfpc_get_unparsed_url( $parsed_url ) { // PHP_URL_SCHEME $scheme = isset( $parsed_url['scheme'] ) ? $parsed_url['scheme'] . '://' : ''; $host = isset( $parsed_url['host'] ) ? $parsed_url['host'] : ''; $port = isset( $parsed_url['port'] ) ? ':' . $parsed_url['port'] : ''; $user = isset( $parsed_url['user'] ) ? $parsed_url['user'] : ''; $pass = isset( $parsed_url['pass'] ) ? ':' . $parsed_url['pass'] : ''; $pass = ( $user || $pass ) ? "$pass@" : ''; $path = isset( $parsed_url['path'] ) ? $parsed_url['path'] : ''; $query = isset( $parsed_url['query'] ) ? '?' . $parsed_url['query'] : ''; $fragment = isset( $parsed_url['fragment'] ) ? '#' . $parsed_url['fragment'] : ''; return "{$scheme}{$user}{$pass}{$host}{$port}{$path}{$query}{$fragment}"; } function swcfpc_fallback_cache_remove_url_parameters( $url ) { $url_parsed = parse_url( $url ); $url_query_params = []; if ( array_key_exists( 'query', $url_parsed ) ) { if ( $url_parsed['query'] === '' ) { // this means the URL ends with just ? i.e. /example-page/? - so just remove the last character ? from the URL $url = substr( trim( $url ), 0, - 1 ); } else { // Set the ignored query param array $ignored_query_params = [ 'Browser', 'C', 'GCCON', 'MCMP', 'MarketPlace', 'PD', 'Refresh', 'Sens', 'ServiceVersion', 'Source', 'Topic', '__WB_REVISION__', '__cf_chl_jschl_tk__', '__d', '__hsfp', '__hssc', '__hstc', '__s', '_branch_match_id', '_bta_c', '_bta_tid', '_com', '_escaped_fragment_', '_ga', '_ga-ft', '_gl', '_hsmi', '_ke', '_kx', '_paged', '_sm_byp', '_sp', '_szp', '_thumbnail_id', '3x', 'a', 'a_k', 'ac', 'acpage', 'action-box', 'action_object_map', 'action_ref_map', 'action_type_map', 'activecampaign_id', 'ad', 'ad_frame_full', 'ad_frame_root', 'ad_name', 'adclida', 'adid', 'adlt', 'adsafe_ip', 'adset_name', 'advid', 'aff_sub2', 'afftrack', 'afterload', 'ak_action', 'alt_id', 'am', 'amazingmurphybeds', 'amp;', 'amp;amp', 'amp;amp;amp', 'amp;amp;amp;amp', 'amp;utm_campaign', 'amp;utm_medium', 'amp;utm_source', 'amp%3Butm_content', 'ampStoryAutoAnalyticsLinker', 'ampstoryautoanalyticslinke', 'an', 'ap', 'ap_id', 'apif', 'apipage', 'as_occt', 'as_q', 'as_qdr', 'askid', 'atFileReset', 'atfilereset', 'aucid', 'auct', 'audience', 'author', 'awt_a', 'awt_l', 'awt_m', 'b2w', 'back', 'bannerID', 'blackhole', 'blockedAdTracking', 'blog-reader-used', 'blogger', 'body', 'br', 'bsft_aaid', 'bsft_clkid', 'bsft_eid', 'bsft_ek', 'bsft_lx', 'bsft_mid', 'bsft_mime_type', 'bsft_tv', 'bsft_uid', 'bvMethod', 'bvTime', 'bvVersion', 'bvb64', 'bvb64resp', 'bvplugname', 'bvprms', 'bvprmsmac', 'bvreqmerge', 'cacheburst', 'campaign', 'campaign_id', 'campaign_name', 'campid', 'catablog-gallery', 'channel', 'checksum', 'ck_subscriber_id', 'cmplz_region_redirect', 'cmpnid', 'cn-reloaded', 'code', 'comment', 'content_ad_widget', 'cost', 'cr', 'crl8_id', 'crlt.pid', 'crlt_pid', 'crrelr', 'crtvid', 'ct', 'cuid', 'daksldlkdsadas', 'dcc', 'dfp', 'dm_i', 'domain', 'dosubmit', 'dsp_caid', 'dsp_crid', 'dsp_insertion_order_id', 'dsp_pub_id', 'dsp_tracker_token', 'dt', 'dur', 'durs', 'e', 'ee', 'ef_id', 'el', 'emailID', 'env', 'epik', 'erprint', 'et_blog', 'exch', 'externalid', 'fb_action_ids', 'fb_action_types', 'fb_ad', 'fb_source', 'fbclid', 'fbzunique', 'fg-aqp', 'fireglass_rsn', 'firstName', 'fo', 'fp_sid', 'fpa', 'fref', 'fs', 'furl', 'fwp_lunch_restrictions', 'ga_action', 'gclid', 'gclsrc', 'gdffi', 'gdfms', 'gdftrk', 'gf_page', 'gidzl', 'goal', 'gooal', 'gpu', 'gtVersion', 'haibwc', 'hash', 'hc_location', 'hemail', 'hid', 'highlight', 'hl', 'home', 'hsa_acc', 'hsa_ad', 'hsa_cam', 'hsa_grp', 'hsa_kw', 'hsa_mt', 'hsa_net', 'hsa_src', 'hsa_tgt', 'hsa_ver', 'ias_campId', 'ias_chanId', 'ias_dealId', 'ias_dspId', 'ias_impId', 'ias_placementId', 'ias_pubId', 'ical', 'ict', 'ie', 'igshid', 'im', 'ipl', 'jw_start', 'jwsource', 'k', 'key1', 'key2', 'klaviyo', 'ksconf', 'ksref', 'l', 'label', 'lang', 'ldtag_cl', 'level1', 'level2', 'level3', 'level4', 'limit', 'lng', 'load_all_comments', 'lt', 'ltclid', 'ltd', 'lucky', 'm', 'm?sales_kw', 'matomo_campaign', 'matomo_cid', 'matomo_content', 'matomo_group', 'matomo_keyword', 'matomo_medium', 'matomo_placement', 'matomo_source', 'max-results', 'mc_cid', 'mc_eid', 'mdrv', 'mediaserver', 'memset', 'mibextid', 'mkcid', 'mkevt', 'mkrid', 'mkwid', 'mkt_tok', 'ml_subscriber', 'ml_subscriber_hash', 'mobileOn', 'mode', 'moderation-hash', 'modernpatio', 'month', 'msID', 'msclkid', 'msg', 'mtm_campaign', 'mtm_cid', 'mtm_content', 'mtm_group', 'mtm_keyword', 'mtm_medium', 'mtm_placement', 'mtm_source', 'murphybedstoday', 'mwprid', 'n', 'name', 'native_client', 'navua', 'nb', 'nb_klid', 'nowprocketcache', 'o', 'okijoouuqnqq', 'org', 'pa_service_worker', 'partnumber', 'pcmtid', 'pcode', 'pcrid', 'pfstyle', 'phrase', 'pid', 'piwik_campaign', 'piwik_keyword', 'piwik_kwd', 'pk_campaign', 'pk_keyword', 'pk_kwd', 'placement', 'plat', 'platform', 'playsinline', 'position', 'pp', 'pr', 'preview', 'preview_id', 'preview_nonce', 'prid', 'print', 'q', 'q1', 'qsrc', 'r', 'rd', 'rdt_cid', 'redig', 'redir', 'ref', 'reftok', 'relatedposts_hit', 'relatedposts_origin', 'relatedposts_position', 'remodel', 'replytocom', 'rest_route', 'reverse-paginate', 'rid', 'rnd', 'rndnum', 'robots_txt', 'rq', 'rsd', 's_kwcid', 'sa', 'safe', 'said', 'sales_cat', 'sales_kw', 'sb_referer_host', 'scrape', 'script', 'scrlybrkr', 'search', 'sellid', 'sersafe', 'sfn_data', 'sfn_trk', 'sfns', 'sfw', 'sha1', 'share', 'shared', 'showcomment', 'showComment', 'si', 'sid', 'sid1', 'sid2', 'sidewalkShow', 'sig', 'site', 'site_id', 'siteid', 'slicer1', 'slicer2', 'source', 'spref', 'spvb', 'sra', 'src', 'srk', 'srp', 'ssp_iabi', 'ssts', 'stylishmurphybeds', 'subId1 ', 'subId2 ', 'subId3', 'subid', 'swcfpc', 'tail', 'teaser', 'test', 'timezone', 'toWww', 'triplesource', 'trk_contact', 'trk_module', 'trk_msg', 'trk_sid', 'tsig', 'turl', 'u', 'unapproved', 'up_auto_log', 'upage', 'updated-max', 'uptime', 'us_privacy', 'usegapi', 'userConsent', 'usqp', 'utm', 'utm_campa', 'utm_campaign', 'utm_content', 'utm_expid', 'utm_id', 'utm_medium', 'utm_reader', 'utm_referrer', 'utm_source', 'utm_sq', 'utm_ter', 'utm_term', 'v', 'vc', 'vf', 'vgo_ee', 'vp', 'vrw', 'vz', 'wbraid', 'webdriver', 'wing', 'wpdParentID', 'wpmp_switcher', 'wref', 'wswy', 'wtime', 'x', 'zMoatImpID', 'zarsrc', 'zeffdn', ]; $ignored_query_params = apply_filters( 'swcfpc_fallback_cache_ignored_query_params', $ignored_query_params ); // First parse the query params to an array to manage it better parse_str( $url_parsed['query'], $url_query_params ); // Loop though $ignored_query_params foreach ( $ignored_query_params as $ignored_query_param ) { // Check if that query param is present in $url_query_params if ( array_key_exists( $ignored_query_param, $url_query_params ) ) { // The ignored query param is present in the $url_query_params. So, unset it from there unset( $url_query_params[ $ignored_query_param ] ); } } // Now lets check if we have any query params left in $url_query_params if ( count( $url_query_params ) > 0 ) { $new_url_query_params = http_build_query( $url_query_params ); $url_parsed['query'] = $new_url_query_params; } else { // Remove the query section from parsed URL unset( $url_parsed['query'] ); } // Get the new current URL without the marketing query params $url = swcfpc_get_unparsed_url( $url_parsed ); } } return $url; } function swcfpc_fallback_cache_is_expired_page( $cache_key ) { $config_path = WP_CONTENT_DIR . "/wp-cloudflare-super-page-cache/{$_SERVER['HTTP_HOST']}/"; if ( ! file_exists( "{$config_path}ttl_registry.json" ) ) { return false; } $swcfpc_ttl_registry = json_decode( file_get_contents( "{$config_path}ttl_registry.json" ), true ); $current_ttl = 0; if ( ! is_array( $swcfpc_ttl_registry ) || ! isset( $swcfpc_ttl_registry[ $cache_key ] ) ) { $current_ttl = 0; } elseif ( is_array( $swcfpc_ttl_registry[ $cache_key ] ) ) { $current_ttl = $swcfpc_ttl_registry[ $cache_key ]; } else { $current_ttl = (int) $swcfpc_ttl_registry[ $cache_key ]; } if ( $current_ttl > 0 && time() > $current_ttl ) { return true; } return false; } function swcfpc_fallback_cache_is_cookie_to_exclude() { global $swcfpc_config; if ( count( $_COOKIE ) == 0 ) { return false; } if ( is_array( $swcfpc_config ) && ! isset( $swcfpc_config['cf_fallback_cache_excluded_cookies'] ) ) { return false; } $excluded_cookies = $swcfpc_config['cf_fallback_cache_excluded_cookies']; if ( count( $excluded_cookies ) == 0 ) { return false; } $cookies = array_keys( $_COOKIE ); foreach ( $excluded_cookies as $single_cookie ) { if ( count( preg_grep( "#{$single_cookie}#", $cookies ) ) > 0 ) { swcfpc_bypass_reason_header( sprintf( 'Cookie - %s', $single_cookie ) ); return true; } } return false; } function swcfpc_fallback_cache_is_url_to_exclude( $url = false ) { global $swcfpc_config; if ( is_array( $swcfpc_config ) && isset( $swcfpc_config['cf_fallback_cache_prevent_cache_urls_without_trailing_slash'] ) && $swcfpc_config['cf_fallback_cache_prevent_cache_urls_without_trailing_slash'] > 0 && ! preg_match( '//$/', $_SERVER['REQUEST_URI'] ) && apply_filters( 'swcfpc_fallback_cache_skip_unslashed', true, $_SERVER['REQUEST_URI'] ) ) { swcfpc_bypass_reason_header( 'URL Without Trailing Slash' ); return true; } if ( is_array( $swcfpc_config ) && ! isset( $swcfpc_config['cf_fallback_cache_excluded_urls'] ) ) { return false; } $excluded_urls = $swcfpc_config['cf_fallback_cache_excluded_urls']; if ( is_array( $excluded_urls ) && count( $excluded_urls ) > 0 ) { if ( $url === false ) { $current_url = $_SERVER['REQUEST_URI']; if ( isset( $_SERVER['QUERY_STRING'] ) && strlen( $_SERVER['QUERY_STRING'] ) > 0 ) { $current_url .= "?{$_SERVER['QUERY_STRING']}"; } } else { $current_url = $url; } foreach ( $excluded_urls as $url_to_exclude ) { if ( swcfpc_wildcard_match( $url_to_exclude, $current_url ) ) { swcfpc_bypass_reason_header( 'Excluded URL' ); return true; } /* if( fnmatch($url_to_exclude, $current_url, FNM_CASEFOLD) ) { return true; } */ } } return false; } function swcfpc_fallback_cache_save_headers( $fallback_cache_path, $cache_key ) { $headers_file = "{$fallback_cache_path}{$cache_key}.headers.json"; $headers_list = headers_list(); $headers_count = count( $headers_list ); for ( $i = 0; $i < $headers_count; ++ $i ) { list( $header_name, $header_value ) = explode( ':', $headers_list[ $i ] ); if ( strcasecmp( $header_name, 'cache-control' ) == 0 || strcasecmp( $header_name, 'set-cookie' ) == 0 || strcasecmp( substr( $header_name, 0, 19 ), 'X-WP-CF-Super-Cache' ) == 0 ) { unset( $headers_list[ $i ] ); continue; } } if ( count( $headers_list ) == 0 ) { if ( file_exists( $headers_file ) ) { @unlink( $headers_file ); } return false; } file_put_contents( $headers_file, json_encode( $headers_list ) ); return true; } function swcfpc_fallback_cache_get_stored_headers( $fallback_cache_path, $cache_key ) { $headers_file = "{$fallback_cache_path}{$cache_key}.headers.json"; if ( file_exists( $headers_file ) ) { $swcfpc_headers = json_decode( file_get_contents( $headers_file ), true ); if ( is_array( $swcfpc_headers ) && count( $swcfpc_headers ) > 0 ) { return $swcfpc_headers; } } return false; } function swcfpc_wildcard_match( $pattern, $subject ) { // Case insensitive $pattern = '#^' . preg_quote( $pattern ) . '$#i'; $pattern = str_replace( '*', '.*', $pattern ); // $pattern = str_replace('.', '.', $pattern); if ( ! preg_match( $pattern, $subject, $regs ) ) { return false; } swcfpc_bypass_reason_header( sprintf( 'Excluded URL - %s', $pattern ) ); return true; } function swcfpc_bypass_reason_header( $reason = '' ) { if ( ! is_string( $reason ) || empty( $reason ) ) { return; } header( sprintf( 'X-WP-CF-Super-Cache-Disabled-Reason: %s', $reason ) ); } /** * Record one cache verdict in the current UTC-hour bucket. * * @param string $status 'hit' | 'miss' (case-insensitive) */ function spc_store_cache_status(string $status): void { global $__spc_cfg, $__spc_backend, $__spc_ttl; /* early outs for disabled / unsampled requests */ if (! $__spc_cfg['enabled']) return; if ( $__spc_cfg['sampling'] < 100 && mt_rand(1, 100) > $__spc_cfg['sampling'] ) return; $status = strtolower($status); if ($status !== 'hit' && $status !== 'miss') return; $bucket = gmdate('YmdH'); // e.g. 2025061213 (UTC hour) $key = "spc_{$status}_{$bucket}"; // for cache back-ends $file = "{$status}_{$bucket}.txt"; // for file back-end (fixed .txt) if ($__spc_backend === 'apcu') { if (false === apcu_inc($key)) { apcu_add($key, 1, $__spc_ttl); } return; } file_put_contents(SPC_METRICS_DIR . "/{$file}", '+', FILE_APPEND); } function spc_store_cache_hit(): void { spc_store_cache_status('hit'); } function spc_store_cache_miss(): void { spc_store_cache_status('miss'); } HOME - LambdaTek MIMsafe Skip to main content
Care2

We know you care too

MultiCage

Design shaped by knowledge

VarioCage

Safe by Choice

VarioBarrier

Secured load

VarioGate

Closed luggage compartment

Carrier

Crash-proof roof boxes

MIMsafe work with crash safety. This is why with them you’ll find the market’s safest products, both for transporting baggage and other belongings as well as dogs.

MIMsafe is available worldwide

VarioCage

Smart solutions,
for your specific needs

When a safe journey means everything

For us, the most important thing is that everyone in the car travels safely. Even the one who has his place in the back of the car.
Think for a moment. We believe you think the same as we do.

Innovation

We are not afraid to go new ways or think outside the box. Therefore, our products are characterized by innovative and smart solutions without compromising safety. We believe that everything can be improved and always looking ahead, which is why we are constantly developing our products, and we do it for your safety.

more

Security

For us, safety always goes first. We have extensive knowledge of vehicles and crash protection. Therefore, we know that our products work in a predetermined way if, after all, the accident should occur.

more

Safety

For us, safety always goes first. We have extensive knowledge of vehicles and crash protection. Therefore, we know that our products work in a predetermined way if, after all, the accident should occur.

more

Find the right product for your car!