Notice: require(): read of 14154 bytes failed with errno=12 Cannot allocate memory in /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/w3-total-cache-api.php on line 174
Notice: require(): read of 14154 bytes failed with errno=12 Cannot allocate memory in /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/w3-total-cache-api.php on line 174
blic static function normalize_file_minify( $file ) {
if ( self::is_url( $file ) ) {
if ( strstr( $file, '?' ) === false ) {
$domain_url_regexp = '~' . self::home_domain_root_url_regexp() . '~i';
$file = preg_replace( $domain_url_regexp, '', $file );
}
}
if ( ! self::is_url( $file ) ) {
$file = self::normalize_path( $file );
$file = str_replace( self::document_root(), '', $file );
$file = ltrim( $file, '/' );
}
return $file;
}
/**
* Normalizes file name for minify.
* Relative to document root!
*
* @static
*
* @param string $file File path.
* @return string
*/
public static function url_to_docroot_filename( $url ) {
$data = array(
'home_url' => get_home_url(),
'url' => $url,
);
$data = apply_filters( 'w3tc_url_to_docroot_filename', $data );
$home_url = $data['home_url'];
$normalized_url = $data['url'];
$normalized_url = self::remove_query_all( $normalized_url );
// Cut protocol.
$normalized_url = preg_replace( '~^http(s)?://~', '//', $normalized_url );
$home_url = preg_replace( '~^http(s)?://~', '//', $home_url );
if ( substr( $normalized_url, 0, strlen( $home_url ) ) !== $home_url ) {
// Not a home url, return unchanged since cant be converted to filename.
return null;
}
$path_relative_to_home = str_replace( $home_url, '', $normalized_url );
$home = set_url_scheme( get_option( 'home' ), 'http' );
$siteurl = set_url_scheme( get_option( 'siteurl' ), 'http' );
$home_path = rtrim( Util_Environment::site_path(), '/' );
// Adjust home_path if site is not is home.
if ( ! empty( $home ) && 0 !== strcasecmp( $home, $siteurl ) ) {
// $siteurl - $home/
$wp_path_rel_to_home = rtrim( str_ireplace( $home, '', $siteurl ), '/' );
if ( substr( $home_path, -strlen( $wp_path_rel_to_home ) ) ==
$wp_path_rel_to_home ) {
$home_path = substr( $home_path, 0, -strlen( $wp_path_rel_to_home ) );
}
}
// Common encoded characters.
$path_relative_to_home = str_replace( '%20', ' ', $path_relative_to_home );
$full_filename = $home_path . DIRECTORY_SEPARATOR .
trim( $path_relative_to_home, DIRECTORY_SEPARATOR );
$docroot = self::document_root();
if ( substr( $full_filename, 0, strlen( $docroot ) ) == $docroot ) {
$docroot_filename = substr( $full_filename, strlen( $docroot ) );
} else {
$docroot_filename = $path_relative_to_home;
}
/*
* Sometimes urls (coming from other plugins/themes)
* contain multiple "/" like "my-folder//myfile.js" which
* fails to recognize by filesystem, while url is accessible.
*/
$docroot_filename = str_replace( '//', DIRECTORY_SEPARATOR, $docroot_filename );
return ltrim( $docroot_filename, DIRECTORY_SEPARATOR );
}
/**
* Document root to full filename.
*
* @static
*
* @param string $docroot_filename Document filename.
* @return strin
*/
public static function docroot_to_full_filename( $docroot_filename ) {
return rtrim( Util_Environment::document_root(), DIRECTORY_SEPARATOR ) .
DIRECTORY_SEPARATOR . $docroot_filename;
}
/**
* Removes WP query string from URL.
*
* @static
*/
public static function remove_query( $url ) {
$url = preg_replace( '~(\?|&|&|&)+ver=[a-z0-9-_\.]+~i', '', $url );
return $url;
}
/**
* Removes all query strings from url.
*
* @static
*
* @param string $url URL.
* @return string
*/
public static function remove_query_all( $url ) {
$pos = strpos( $url, '?' );
if ( $pos === false ) {
return $url;
}
return substr( $url, 0, $pos );
}
/**
* Converts win path to unix.
*
* @static
*
* @param string $path Path.
* @return string
*/
public static function normalize_path( $path ) {
$path = preg_replace( '~[/\\\]+~', '/', $path );
$path = rtrim( $path, '/' );
return $path;
}
/**
* Returns real path of given path.
*
* @static
*
* @param string $path Path.
* @return string
*/
public static function realpath( $path ) {
$path = self::normalize_path( $path );
$parts = explode( '/', $path );
$absolutes = array();
foreach ( $parts as $part ) {
if ( '.' == $part ) {
continue;
}
if ( '..' == $part ) {
array_pop( $absolutes );
} else {
$absolutes[] = $part;
}
}
return implode( '/', $absolutes );
}
/**
* Returns real path of given path.
*
* @static
*
* @param string $path Path.
* @return string
*/
public static function path_remove_dots( $path ) {
$parts = explode( '/', $path );
$absolutes = array();
foreach ( $parts as $part ) {
if ( '.' == $part ) {
continue;
}
if ( '..' == $part ) {
array_pop( $absolutes );
} else {
$absolutes[] = $part;
}
}
return implode( '/', $absolutes );
}
/**
* Returns full URL from relative one.
*
* @static
*
* @param string $relative_url Relative URL.
* @return string
*/
public static function url_relative_to_full( $relative_url ) {
$relative_url = self::path_remove_dots( $relative_url );
if ( version_compare( PHP_VERSION, '5.4.7' ) < 0 ) {
if ( substr( $relative_url, 0, 2 ) === '//' ) {
$relative_url = ( self::is_https() ? 'https' : 'http' ) . ':' . $relative_url;
}
}
$rel = parse_url( $relative_url );
// it's full url already
if ( isset( $rel['scheme'] ) || isset( $rel['host'] ) )
return $relative_url;
if ( !isset( $rel['host'] ) ) {
$home_parsed = parse_url( get_home_url() );
$rel['host'] = $home_parsed['host'];
if ( isset( $home_parsed['port'] ) ) {
$rel['port'] = $home_parsed['port'];
}
}
$scheme = isset( $rel['scheme'] ) ? $rel['scheme'] . '://' : '//';
$host = isset( $rel['host'] ) ? $rel['host'] : '';
$port = isset( $rel['port'] ) ? ':' . $rel['port'] : '';
$path = isset( $rel['path'] ) ? $rel['path'] : '';
$query = isset( $rel['query'] ) ? '?' . $rel['query'] : '';
return "$scheme$host$port$path$query";
}
/**
* Redirects to URL.
*
* @static
*
* @param string $url URL.
* @param array $params Parameters.
*/
public static function redirect( $url = '', $params = array() ) {
$url = self::url_format( $url, $params );
if ( function_exists( 'do_action' ) ) {
do_action( 'w3tc_redirect' );
}
@header( 'Location: ' . $url ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
exit();
}
/**
* Redirects to URL.
*
* @static
*
* @param string $url URL.
* @param array $params Parameters.
* @param bool $safe_redirect Safe redirect or not.
*/
public static function safe_redirect_temp( $url = '', $params = array(), $safe_redirect = false ) {
$url = self::url_format( $url, $params );
if ( function_exists( 'do_action' ) ) {
do_action( 'w3tc_redirect' );
}
$status_code = 302;
$protocol = isset( $_SERVER['SERVER_PROTOCOL'] ) ?
htmlspecialchars( stripslashes( $_SERVER['SERVER_PROTOCOL'] ) ) : ''; // phpcs:ignore
if ( 'HTTP/1.1' === $protocol ) {
$status_code = 307;
}
$text = get_status_header_desc( $status_code );
if ( ! empty( $text ) ) {
$status_header = "$protocol $status_code $text";
@header( $status_header, true, $status_code );
}
add_action(
'wp_safe_redirect_fallback',
array( '\W3TC\Util_Environment', 'wp_safe_redirect_fallback' )
);
@header( 'Cache-Control: no-cache' ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged
wp_safe_redirect( $url, $status_code );
exit();
}
/**
* Fallback for wp_sfe_redirect().
*
* @static
*
* @param string $url URL.
* @return string
*/
public static function wp_safe_redirect_fallback( $url ) {
return home_url( '?w3tc_repeat=invalid' );
}
/**
* Detects post ID.
*
* @static
*
* @return int
*/
public static function detect_post_id() {
global $posts, $comment_post_ID, $post_ID; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
$p_val = Util_Request::get_integer( 'p' );
if ( $post_ID ) {
return $post_ID;
} elseif ( $comment_post_ID ) { // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
return $comment_post_ID; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.VariableNotSnakeCase
} elseif ( ( is_single() || is_page() ) && is_array( $posts ) && isset( $posts[0]->ID ) ) {
return $posts[0]->ID;
} elseif ( isset( $posts->ID ) ) {
return $posts->ID;
} elseif ( ! empty( $p_val ) ) {
return $p_val;
}
return 0;
}
/**
* Get W3TC instance id.
*
* @static
*
* @return int
*/
public static function instance_id() {
if ( defined( 'W3TC_INSTANCE_ID' ) ) {
return W3TC_INSTANCE_ID;
}
static $instance_id;
if ( ! isset( $instance_id ) ) {
$config = Dispatcher::config();
$instance_id = $config->get_integer( 'common.instance_id', 0 );
}
return $instance_id;
}
/**
* Get W3TC edition.
*
* @static
*
* @param Config $config Config.
* @return string
*/
public static function w3tc_edition( $config = null ) {
if ( self::is_w3tc_pro( $config ) && self::is_w3tc_pro_dev() ) {
return 'pro development';
}
if ( self::is_w3tc_pro( $config ) ) {
return 'pro';
}
return 'community';
}
/**
* Is W3TC Pro.
*
* @static
*
* @param Config $config Config.
* @return bool
*/
public static function is_w3tc_pro( $config = null ) {
if ( defined( 'W3TC_PRO' ) && W3TC_PRO ) {
return true;
}
if ( defined( 'W3TC_ENTERPRISE' ) && W3TC_ENTERPRISE ) {
return true;
}
if ( is_object( $config ) ) {
$plugin_type = $config->get_string( 'plugin.type' );
if ( 'pro' === $plugin_type || 'pro_dev' === $plugin_type ) {
return true;
}
}
return false;
}
/**
* Enable Pro Dev mode support.
*
* @static
*
* @return bool
*/
public static function is_w3tc_pro_dev() {
return defined( 'W3TC_PRO_DEV_MODE' ) && W3TC_PRO_DEV_MODE;
}
/**
* Quotes regular expression string.
*
* @static
*
* @param string $string String.
* @param string $delimiter Delimeter.
* @return string
*/
public static function preg_quote( $string, $delimiter = '~' ) {
$string = preg_quote( $string, $delimiter );
$string = strtr(
$string,
array( ' ' => '\ ' )
);
return $string;
}
/**
* Returns true if zlib output compression is enabled otherwise false.
*
* @static
*
* @return bool
*/
public static function is_zlib_enabled() {
return self::to_boolean( ini_get( 'zlib.output_compression' ) );
}
/**
* Recursive strips slahes from the var.
*
* @static
*
* @param mixed $var Value.
* @return mixed
*/
public static function stripslashes( $var ) {
if ( is_string( $var ) ) {
return stripslashes( $var );
} elseif ( is_array( $var ) ) {
$var = array_map( array( '\W3TC\Util_Environment', 'stripslashes' ), $var );
}
return $var;
}
/**
* Checks if post should be flushed or not. Returns true if it should not be flushed.
*
* @static
*
* @param object $post Post object.
* @param string $module Which cache module to check against (pgcache, varnish, dbcache or objectcache).
* @param Config $config Config.
* @return bool
*/
public static function is_flushable_post( $post, $module, $config ) {
if ( is_numeric( $post ) ) {
$post = get_post( $post );
}
$post_status = array( 'publish' );
/**
* Dont flush when we have post "attachment"
* its child of the post and is flushed always when post is published, while not changed in fact.
*/
$post_type = array( 'revision', 'attachment' );
switch ( $module ) {
case 'pgcache':
case 'varnish':
case 'posts': // Means html content of post pages.
if ( ! $config->get_boolean( 'pgcache.reject.logged' ) ) {
$post_status[] = 'private';
}
break;
case 'dbcache':
if ( ! $config->get_boolean( 'dbcache.reject.logged' ) ) {
$post_status[] = 'private';
}
break;
}
$flushable = is_object( $post ) && ! in_array( $post->post_type, $post_type, true ) && in_array( $post->post_status, $post_status, true );
return apply_filters( 'w3tc_flushable_post', $flushable, $post, $module );
}
/**
* Checks if post belongs to a custom post type.
*
* @since 2.1.7
* @static
*
* @param object $post Post object.
* @return bool
*/
public static function is_custom_post_type( $post ) {
$post_type = get_post_type_object( $post->post_type );
// post type not found belongs to default post type(s).
if ( empty( $post_type ) ) {
return false;
}
// check if custom.
if ( false === $post_type->_builtin ) {
return true;
}
return false;
}
/**
* Converts value to boolean.
*
* @static
*
* @param mixed $value Value.
* @return bool
*/
public static function to_boolean( $value ) {
if ( is_string( $value ) ) {
switch ( strtolower( $value ) ) {
case '+':
case '1':
case 'y':
case 'on':
case 'yes':
case 'true':
case 'enabled':
return true;
case '-':
case '0':
case 'n':
case 'no':
case 'off':
case 'false':
case 'disabled':
return false;
}
}
return (boolean) $value;
}
/**
* Returns the apache, nginx version.
*
* @static
*
* @return string
*/
public static function get_server_version() {
$sig = explode(
'/',
isset( $_SERVER['SERVER_SOFTWARE'] ) ?
htmlspecialchars( stripslashes( $_SERVER['SERVER_SOFTWARE'] ) ) : '' // phpcs:ignore
);
$temp = isset( $sig[1] ) ? explode( ' ', $sig[1] ) : array( '0' );
$version = $temp[0];
return $version;
}
/**
* Checks if current request is REST REQUEST.
*
* @static
*/
public static function is_rest_request( $url ) {
if ( defined( 'REST_REQUEST' ) && REST_REQUEST )
return true;
// in case when called before constant is set
// wp filters are not available in that case
return preg_match( '~' . W3TC_WP_JSON_URI . '~', $url );
}
/**
* Reset microcache.
*
* @static
*/
public static function reset_microcache() {
global $w3_current_blog_id;
$w3_current_blog_id = null;
self::$is_using_master_config = null;
}
}
Fatal error: Uncaught Error: Class 'W3TC\Util_Environment' not found in /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Config.php:118
Stack trace:
#0 /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Dispatcher.php(16): W3TC\Config->__construct()
#1 /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Dispatcher.php(26): W3TC\Dispatcher::component('Config')
#2 /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Mobile_Redirect.php(16): W3TC\Dispatcher::config()
#3 /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Dispatcher.php(16): W3TC\Mobile_Redirect->__construct()
#4 /home/richwayc/jamesyee.info/wp-content/advanced-cache.php(31): W3TC\Dispatcher::component('Mobile_Redirect')
#5 /home/richwayc/jamesyee.info/wp-settings.php(98): include('/home/richwayc/...')
#6 /home/richwayc/jamesyee.info/wp-config.php(100): require_once('/home/richwayc/...')
#7 /home/richwayc/jamesyee.info/wp-load.php(50): require_once('/home/richwayc/...')
#8 /home/richwayc/jamesyee.info/ in /home/richwayc/jamesyee.info/wp-content/plugins/w3-total-cache/Config.php on line 118