Warning: fopen(/home/danestany/public_html/wp-content/plugins/wordfence/waf/../languages/wordfence.mo): failed to open stream: No such file or directory in /home/danestany/public_html/wp-content/plugins/wordfence/waf/pomo/streams.php on line 185
cache file.
* @return void
*/
private function write_cache_file( $cache_filepath, $content ) {
$gzip_filepath = $cache_filepath . '_gzip';
$temp_filepath = $cache_filepath . '_temp';
$temp_gzip_filepath = $gzip_filepath . '_temp';
if ( rocket_direct_filesystem()->exists( $temp_filepath ) ) {
return;
}
// Save the cache file.
rocket_put_content( $temp_filepath, $content );
rocket_direct_filesystem()->move( $temp_filepath, $cache_filepath, true );
if ( function_exists( 'gzencode' ) ) {
/**
* Filters the Gzip compression level to use for the cache file
*
* @param int $compression_level Compression level between 0 and 9.
*/
$compression_level = apply_filters( 'rocket_gzencode_level_compression', 6 );
rocket_put_content( $temp_gzip_filepath, gzencode( $content, $compression_level ) );
rocket_direct_filesystem()->move( $temp_gzip_filepath, $gzip_filepath, true );
}
}
/**
* Get the path to the cache file.
*
* @since 3.3
*
* @param array $args {
* A list of arguments.
*
* @type bool $webp Set to false to prevent adding the part related to webp.
* }
* @return string
*/
public function get_cache_path( $args = [] ) {
$args = array_merge(
[
'webp' => true,
],
$args
);
$cookies = $this->tests->get_cookies();
$request_uri_path = $this->get_request_cache_path( $cookies );
$filename = 'index';
$filename = $this->maybe_mobile_filename( $filename );
// Rename the caching filename for SSL URLs.
if ( is_ssl() && $this->config->get_config( 'cache_ssl' ) ) {
$filename .= '-https';
}
if ( $args['webp'] ) {
$filename = $this->maybe_webp_filename( $filename );
}
$filename = $this->maybe_dynamic_cookies_filename( $filename, $cookies );
// Ensure proper formatting of the path.
$request_uri_path = preg_replace_callback( '/%[0-9A-F]{2}/', [ $this, 'reset_lowercase' ], $request_uri_path );
// Directories in Windows can't contain question marks.
$request_uri_path = str_replace( '?', '#', $request_uri_path );
// Limit filename max length to 255 characters.
$request_uri_path .= '/' . substr( $filename, 0, 250 ) . '.html';
return $request_uri_path;
}
/** ----------------------------------------------------------------------------------------- */
/** VARIOUS TOOLS =========================================================================== */
/** ----------------------------------------------------------------------------------------- */
/**
* Declares and sets value of constant preventing Optimizations.
*
* @since 3.3
*/
private function define_donotoptimize_true() {
if ( ! defined( 'DONOTROCKETOPTIMIZE' ) ) {
define( 'DONOTROCKETOPTIMIZE', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals
}
}
/**
* Gets If-modified-since header value
*
* @since 3.3
* @return string
*/
private function get_if_modified_since() {
if ( function_exists( 'apache_request_headers' ) ) {
$headers = apache_request_headers();
return isset( $headers['If-Modified-Since'] ) ? $headers['If-Modified-Since'] : '';
}
return $this->config->get_server_input( 'HTTP_IF_MODIFIED_SINCE', '' );
}
/**
* Get WP Rocket footprint
*
* @since 3.0.5 White label footprint if WP_ROCKET_WHITE_LABEL_FOOTPRINT is defined.
* @since 2.0
*
* @param int $time UNIX timestamp when the cache file was saved.
* @return string The footprint that will be printed
*/
private function get_rocket_footprint( $time = '' ) {
$footprint = defined( 'WP_ROCKET_WHITE_LABEL_FOOTPRINT' ) ?
"\n" . '';
return $footprint;
}
/**
* Create a hidden empty file for mobile detection on NGINX with the Rocket NGINX configuration.
*
* @param string $cache_dir_path Path to the current cache directory.
* @return void
*/
private function maybe_create_nginx_mobile_file( $cache_dir_path ) {
global $is_nginx;
if ( ! $this->config->get_config( 'do_caching_mobile_files' ) ) {
return;
}
if ( ! $is_nginx ) {
return;
}
$nginx_mobile_detect = $cache_dir_path . '/.mobile-active';
if ( rocket_direct_filesystem()->exists( $nginx_mobile_detect ) ) {
return;
}
rocket_direct_filesystem()->touch( $nginx_mobile_detect );
}
/**
* Create a hidden empty file when webp is enabled but the buffer doesn’t contain webp files.
*
* @since 3.4
*
* @param string $cache_dir_path Path to the current cache directory (without trailing slah).
*/
private function maybe_create_nowebp_file( $cache_dir_path ) {
$nowebp_filepath = $cache_dir_path . DIRECTORY_SEPARATOR . '.no-webp';
if ( rocket_direct_filesystem()->exists( $nowebp_filepath ) ) {
return;
}
rocket_direct_filesystem()->touch( $nowebp_filepath );
}
/**
* Tell if generating cache files is allowed.
*
* @since 3.3
*
* @return bool
*/
public static function can_generate_caching_files() {
/**
* Allow to the generate the caching file.
*
* @since 2.5
*
* @param bool True will force the cache file generation.
*/
return (bool) apply_filters( 'do_rocket_generate_caching_files', true ); // phpcs:ignore WordPress.NamingConventions.PrefixAllGlobals
}
/**
* Gets the base cache path for the current request
*
* @since 3.3
*
* @param array $cookies Cookies for the current request.
* @return string
*/
private function get_request_cache_path( $cookies ) {
$host = $this->config->get_host();
if ( $this->config->get_config( 'url_no_dots' ) ) {
$host = str_replace( '.', '_', $host );
}
$request_uri = $this->tests->get_clean_request_uri();
$cookie_hash = $this->config->get_config( 'cookie_hash' );
$logged_in_cookie = $this->config->get_config( 'logged_in_cookie' );
$logged_in_cookie_no_hash = str_replace( $cookie_hash, '', $logged_in_cookie );
// Get cache folder of host name.
if ( $logged_in_cookie && isset( $cookies[ $logged_in_cookie ] ) && ! $this->tests->has_rejected_cookie( $logged_in_cookie_no_hash ) ) {
if ( $this->config->get_config( 'common_cache_logged_users' ) ) {
return $this->cache_dir_path . $host . '-loggedin-' . $this->config->get_config( 'secret_cache_key' ) . rtrim( $request_uri, '/' );
}
$user_key = explode( '|', $cookies[ $logged_in_cookie ] );
$user_key = reset( $user_key );
$user_key = $user_key . '-' . $this->config->get_config( 'secret_cache_key' );
// Get cache folder of host name.
return $this->cache_dir_path . $host . '-' . $user_key . rtrim( $request_uri, '/' );
}
return $this->cache_dir_path . $host . rtrim( $request_uri, '/' );
}
/**
* Modifies the filename if the request is from a mobile device.
*
* @since 3.3
*
* @param string $filename Cache filename.
* @return string
*/
private function maybe_mobile_filename( $filename ) {
$cache_mobile_files_tablet = $this->config->get_config( 'cache_mobile_files_tablet' );
if ( ! ( $this->config->get_config( 'cache_mobile' ) && $this->config->get_config( 'do_caching_mobile_files' ) ) ) {
return $filename;
}
if ( ! $cache_mobile_files_tablet ) {
return $filename;
}
if ( ! class_exists( 'WP_Rocket_Mobile_Detect' ) ) {
return $filename;
}
$detect = new \WP_Rocket_Mobile_Detect();
if ( $detect->isMobile() && ! $detect->isTablet() && 'desktop' === $cache_mobile_files_tablet || ( $detect->isMobile() || $detect->isTablet() ) && 'mobile' === $cache_mobile_files_tablet ) {
return $filename .= '-mobile';
}
return $filename;
}
/**
* Modifies the filename if the request is WebP compatible
*
* @since 3.4
*
* @param string $filename Cache filename.
* @return string
*/
private function maybe_webp_filename( $filename ) {
if ( ! $this->config->get_config( 'cache_webp' ) ) {
return $filename;
}
/**
* Force WP Rocket to disable its webp cache.
*
* @since 3.4
*
* @param bool $disable_webp_cache Set to true to disable the webp cache.
*/
$disable_webp_cache = apply_filters( 'rocket_disable_webp_cache', false );
if ( $disable_webp_cache ) {
return $filename;
}
$http_accept = $this->config->get_server_input( 'HTTP_ACCEPT', '' );
if ( ! $http_accept && function_exists( 'apache_request_headers' ) ) {
$headers = apache_request_headers();
$http_accept = isset( $headers['Accept'] ) ? $headers['Accept'] : '';
}
if ( ! $http_accept || false === strpos( $http_accept, 'webp' ) ) {
if ( preg_match( '#Firefox/(?[0-9]{2})#i', $this->config->get_server_input( 'HTTP_USER_AGENT' ), $matches ) ) {
if ( 66 <= (int) $matches['version'] ) {
return $filename . '-webp';
}
}
return $filename;
}
return $filename . '-webp';
}
/**
* Modifies the filename if dynamic cookies are set
*
* @param string $filename Cache filename.
* @param array $cookies Cookies for the request.
* @return string
*/
private function maybe_dynamic_cookies_filename( $filename, $cookies ) {
$cache_dynamic_cookies = $this->config->get_config( 'cache_dynamic_cookies' );
if ( ! $cache_dynamic_cookies ) {
return $filename;
}
foreach ( $cache_dynamic_cookies as $key => $cookie_name ) {
if ( is_array( $cookie_name ) ) {
if ( isset( $_COOKIE[ $key ] ) ) {
foreach ( $cookie_name as $cookie_key ) {
if ( '' !== $cookies[ $key ][ $cookie_key ] ) {
$cache_key = $cookies[ $key ][ $cookie_key ];
$cache_key = preg_replace( '/[^a-z0-9_\-]/i', '-', $cache_key );
$filename .= '-' . $cache_key;
}
}
}
continue;
}
if ( isset( $cookies[ $cookie_name ] ) && '' !== $cookies[ $cookie_name ] ) {
$cache_key = $cookies[ $cookie_name ];
$cache_key = preg_replace( '/[^a-z0-9_\-]/i', '-', $cache_key );
$filename .= '-' . $cache_key;
}
}
return $filename;
}
/**
* Force lowercase on encoded url strings from different alphabets to prevent issues on some hostings.
*
* @since 3.3
*
* @param array $matches Cache path.
* @return string Cache path in lowercase.
*/
protected function reset_lowercase( $matches ) {
return strtolower( $matches[0] );
}
}