晋太元中,武陵人捕鱼为业。缘溪行,忘路之远近。忽逢桃花林,夹岸数百步,中无杂树,芳草鲜美,落英缤纷。渔人甚异之,复前行,欲穷其林。 林尽水源,便得一山,山有小口,仿佛若有光。便舍船,从口入。初极狭,才通人。复行数十步,豁然开朗。土地平旷,屋舍俨然,有良田、美池、桑竹之属。阡陌交通,鸡犬相闻。其中往来种作,男女衣着,悉如外人。黄发垂髫,并怡然自乐。 见渔人,乃大惊,问所从来。具答之。便要还家,设酒杀鸡作食。村中闻有此人,咸来问讯。自云先世避秦时乱,率妻子邑人来此绝境,不复出焉,遂与外人间隔。问今是何世,乃不知有汉,无论魏晋。此人一一为具言所闻,皆叹惋。余人各复延至其家,皆出酒食。停数日,辞去。此中人语云:“不足为外人道也。”(间隔 一作:隔绝) 既出,得其船,便扶向路,处处志之。及郡下,诣太守,说如此。太守即遣人随其往,寻向所志,遂迷,不复得路。 南阳刘子骥,高尚士也,闻之,欣然规往。未果,寻病终。后遂无问津者。
|
Server : Apache System : Linux srv.rainic.com 4.18.0-553.47.1.el8_10.x86_64 #1 SMP Wed Apr 2 05:45:37 EDT 2025 x86_64 User : rainic ( 1014) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/rainic/www/oldTZh/wp-content/plugins/wp-rocket/inc/ThirdParty/Plugins/Optimization/ |
Upload File : |
<?php
namespace WP_Rocket\ThirdParty\Plugins\Optimization;
use WP_Rocket\Admin\Options_Data;
use WP_Rocket\Engine\CDN\Subscriber;
use WP_Rocket\Event_Management\Subscriber_Interface;
/**
* Subscriber for compatibility with AMP
*
* @since 3.5.2
*/
class AMP implements Subscriber_Interface {
const QUERY = 'amp';
const AMP_OPTIONS = 'amp-options';
/**
* WP Rocket CDN Subscriber.
*
* @var Subscriber_Interface
*/
private $cdn_subscriber;
/**
* WP Rocket Options instance
*
* @var Options_Data
*/
private $options;
/**
* Constructor
*
* @param Options_Data $options WP Rocket Options instance.
* @param Subscriber_Interface $cdn_subscriber WP Rocket CDN Subscriber.
*/
public function __construct( Options_Data $options, Subscriber_Interface $cdn_subscriber ) {
$this->options = $options;
$this->cdn_subscriber = $cdn_subscriber;
}
/**
* Subscribed events for AMP.
*
* @since 3.5.2
*/
public static function get_subscribed_events() {
$events = [
'activate_amp/amp.php' => 'generate_config_file',
'deactivate_amp/amp.php' => 'generate_config_file',
'wp' => [ 'disable_options_on_amp', 20 ],
'rocket_cache_query_strings' => 'is_amp_compatible_callback',
];
if ( function_exists( 'is_amp_endpoint' ) ) {
$events['update_option_amp-options'] = 'generate_config_file';
$events['rocket_delay_js_exclusions'] = 'exclude_script_from_delay_js';
}
return $events;
}
/**
* Regenerate config file on plugin activation / deactivation.
*
* @since 3.5.2
*/
public function generate_config_file() {
rocket_generate_config_file();
}
/**
* Add compatibility with AMP query string by adding it as a cached query string.
*
* @since 3.5.2
*
* @param array $value WP Rocket cache_query_strings value.
* @return array
*/
public function is_amp_compatible_callback( $value ) {
if ( ! function_exists( 'is_amp_endpoint' ) ) {
return $value;
}
$options = get_option( self::AMP_OPTIONS, [] );
$query_strings = array_diff( $value, [ static::QUERY ] );
if ( empty( $options['theme_support'] ) ) {
return $query_strings;
}
if ( in_array( $options['theme_support'], [ 'transitional', 'reader' ], true ) ) {
$query_strings[] = static::QUERY;
}
return $query_strings;
}
/**
* Removes Minification, DNS Prefetch, LazyLoad, Defer JS when on an AMP document.
*
* This covers AMP documents as output by the official AMP plugin for WordPress
* (https://amp-wp.org/) as well as Web Stories for WordPress (https://wp.stories.google/),
* which both support the `is_amp_endpoint` function checks.
*
* However, in the case of Web Stories, `is_amp_endpoint` is only defined on
* the `wp` action, not earlier. Hence doing the `function_exists` check at this stage
* instead of in the `get_subscribed_events()` method.
*
* @since 3.5.2
*/
public function disable_options_on_amp() {
// No endpoint function means we're not running amp here.
if ( ! function_exists( 'is_amp_endpoint' ) ) {
return;
}
// We can get a false negative from is_amp_endpoint when web stories is active, so we have to make sure neither is in play.
if (
! is_amp_endpoint()
&&
! ( is_singular( 'web-story' ) && ! is_embed() && ! post_password_required() )
) {
return;
}
global $wp_filter;
remove_filter( 'wp_resource_hints', 'rocket_dns_prefetch', 10, 2 );
add_filter( 'do_rocket_lazyload', '__return_false' );
add_filter( 'do_rocket_lazyload_iframes', '__return_false' );
add_filter( 'pre_get_rocket_option_async_css', '__return_false' );
add_filter( 'pre_get_rocket_option_delay_js', '__return_false' );
add_filter( 'pre_get_rocket_option_preload_links', '__return_false' );
add_filter( 'pre_get_rocket_option_minify_js', '__return_false' );
add_filter( 'pre_get_rocket_option_minify_google_fonts', '__return_false' );
add_filter( 'pre_get_rocket_option_lazyload_css_bg_img', '__return_false' );
add_filter( 'pre_get_cloudflare_protocol_rewrite', '__return_false' );
add_filter( 'do_rocket_protocol_rewrite', '__return_false' );
unset( $wp_filter['rocket_buffer'] );
$options = get_option( self::AMP_OPTIONS, [] );
if ( ! empty( $options['theme_support'] )
&&
in_array( $options['theme_support'], [ 'transitional', 'reader' ], true ) ) {
add_filter( 'rocket_cdn_reject_files', [ $this, 'reject_files' ], PHP_INT_MAX );
add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite' ] );
add_filter( 'rocket_buffer', [ $this->cdn_subscriber, 'rewrite_srcset' ] );
}
}
/**
* Adds all CSS and JS files to the list of excluded CDN files.
*
* @since 3.5.5
*
* @param array $files List of excluded files.
* @return array List of excluded files.
*/
public function reject_files( $files ) {
return array_merge(
$files,
[
'(.*).css',
'(.*).js',
]
);
}
/**
* Adds the switching script from AMP to delay JS excluded files
*
* @since 3.11.1
*
* @param array $excluded List of excluded files.
* @return array List of excluded files.
*/
public function exclude_script_from_delay_js( $excluded ) {
$excluded[] = 'amp-mobile-version-switcher';
return $excluded;
}
}