$message, $path, $rules ); $exs->push( $ex ); return; } } else { // writing to own rules file in cache folder if ( !@file_exists( dirname( $path ) ) ) { Util_File::mkdir_from( dirname( $path ), W3TC_CACHE_DIR ); } if ( !@file_put_contents( $path, $data ) ) { try { Util_WpFile::delete_folder( dirname( $path ), '', isset( $_SERVER['REQUEST_URI'] ) ? sanitize_text_field( wp_unslash( $_SERVER['REQUEST_URI'] ) ) : '' ); } catch ( Util_WpFile_FilesystemOperationException $ex ) { $exs->push( $ex ); return; } } } Util_Rule::after_rules_modified(); } /** * Called when rules are modified, sets notification */ static public function after_rules_modified() { if ( Util_Environment::is_nginx() ) { $state = Dispatcher::config_state_master(); $state->set( 'common.show_note.nginx_restart_required', true ); $state->save(); } } /** * Remove rules */ static public function remove_rules( $exs, $path, $start, $end ) { if ( !file_exists( $path ) ) return; $data = @file_get_contents( $path ); if ( $data === false ) return; if ( strstr( $data, $start ) === false ) return; $data = Util_Rule::erase_rules( $data, $start, $end ); try { Util_WpFile::write_to_file( $path, $data ); } catch ( Util_WpFile_FilesystemOperationException $ex ) { $exs->push( new Util_WpFile_FilesystemModifyException( $ex->getMessage(), $ex->credentials_form(), sprintf( __( 'Edit file %s and remove all lines between and including %s and %s markers.', 'w3-total-cache' ), $path, $start, $end ), $path ) ); } } /** * Returns path of pgcache cache rules file * Moved to separate file to not load rule.php for each disk enhanced request * * @return string */ static public function get_pgcache_rules_cache_path() { switch ( true ) { case Util_Environment::is_apache(): case Util_Environment::is_litespeed(): if ( Util_Environment::is_wpmu() ) { $url = get_home_url(); $match = null; if ( preg_match( '~http(s)?://(.+?)(/)?$~', $url, $match ) ) { $home_path = $match[2]; return W3TC_CACHE_PAGE_ENHANCED_DIR . DIRECTORY_SEPARATOR . $home_path . DIRECTORY_SEPARATOR . '.htaccess'; } } return W3TC_CACHE_PAGE_ENHANCED_DIR . DIRECTORY_SEPARATOR . '.htaccess'; case Util_Environment::is_nginx(): return Util_Rule::get_nginx_rules_path(); } return false; } /** * Returns true if we can check rules * * @return bool */ static public function can_check_rules() { return Util_Environment::is_apache() || Util_Environment::is_litespeed() || Util_Environment::is_nginx() || Util_Environment::is_iis(); } /** * Support for GoDaddy servers configuration which uses. * SUBDOMAIN_DOCUMENT_ROOT variable. */ public static function apache_docroot_variable() { $document_root = isset( $_SERVER['DOCUMENT_ROOT'] ) ? esc_url_raw( wp_unslash( $_SERVER['DOCUMENT_ROOT'] ) ) : ''; $subdomain_document_root = isset( $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'] ) ? esc_url_raw( wp_unslash( $_SERVER['SUBDOMAIN_DOCUMENT_ROOT'] ) ) : ''; $php_document_root = isset( $_SERVER['PHP_DOCUMENT_ROOT'] ) ? esc_url_raw( wp_unslash( $_SERVER['PHP_DOCUMENT_ROOT'] ) ) : ''; if ( ! empty( $subdomain_document_root ) && $subdomain_document_root !== $document_root ) { return '%{ENV:SUBDOMAIN_DOCUMENT_ROOT}'; } elseif ( ! empty( $php_document_root ) && $php_document_root !== $document_root ) { return '%{ENV:PHP_DOCUMENT_ROOT}'; } else { return '%{DOCUMENT_ROOT}'; } } /** * Takes an array of extensions single per row and/or extensions delimited by | * * @param unknown $extensions * @param unknown $ext * @return array */ static public function remove_extension_from_list( $extensions, $ext ) { for ( $i = 0; $i < sizeof( $extensions ); $i++ ) { if ( $extensions[$i] == $ext ) { unset( $extensions[$i] ); return $extensions; } elseif ( strpos( $extensions[$i], $ext ) !== false && strpos( $extensions[$i], '|' ) !== false ) { $exts = explode( '|', $extensions[$i] ); $key = array_search( $ext, $exts ); unset( $exts[$key] ); $extensions[$i] = implode( '|', $exts ); return $extensions; } } return $extensions; } }