$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;
}
}