/**
  * Returns canonical rules
  *
  * @param bool    $cdnftp
  * @return string
  */
 public static function canonical($cdnftp = false)
 {
     $rules = '';
     $mime_types = self::_get_other_types();
     $extensions = array_keys($mime_types);
     switch (true) {
         case Util_Environment::is_apache():
         case Util_Environment::is_litespeed():
             $extensions_lowercase = array_map('strtolower', $extensions);
             $extensions_uppercase = array_map('strtoupper', $extensions);
             $rules .= "<FilesMatch \"\\.(" . implode('|', array_merge($extensions_lowercase, $extensions_uppercase)) . ")\$\">\n";
             $rules .= self::canonical_without_location($cdnftp, '');
             $rules .= "</FilesMatch>\n";
             break;
         case Util_Environment::is_nginx():
             $rules .= "location ~ \\.(" . implode('|', $extensions) . ")\$ {\n";
             $rules .= self::canonical_without_location($cdnftp, '');
             $rules .= "}\n";
             break;
     }
     return $rules;
 }
 /**
  * Generates directives for file cache dir
  *
  * @param Config  $config
  * @return string
  */
 private function rules_cache_generate($config)
 {
     switch (true) {
         case Util_Environment::is_apache():
         case Util_Environment::is_litespeed():
             return $this->rules_cache_generate_apache($config);
         case Util_Environment::is_nginx():
             return $this->rules_cache_generate_nginx($config);
     }
     return '';
 }
    ?>
 disabled="disabled"<?php 
}
?>
><?php 
echo esc_textarea(implode("\r\n", $this->_config->get_array('pgcache.cache.headers')));
?>
</textarea><br />
					<span class="description"><?php 
_e('Specify additional page headers to cache.', 'w3-total-cache');
?>
</span>
				</td>
			</tr>
			<?php 
if (Util_Environment::is_nginx() && $this->_config->get_string('pgcache.engine') == 'file_generic') {
    ?>
			<tr>
				<th><label><?php 
    Util_Ui::e_config_label('pgcache.cache.nginx_handle_xml');
    ?>
</label></th>
				<td>
					<?php 
    $this->checkbox('pgcache.cache.nginx_handle_xml', true);
    ?>
 <?php 
    Util_Ui::e_config_label('pgcache.cache.nginx_handle_xml');
    ?>
</label><br />
					<span class="description"><?php 
 /**
  * Generates rules for WP dir
  *
  * @param Config  $config
  * @return string
  */
 private static function rules_generate($config)
 {
     switch (true) {
         case Util_Environment::is_apache():
         case Util_Environment::is_litespeed():
             return self::rules_generate_apache($config);
         case Util_Environment::is_nginx():
             return self::rules_generate_nginx($config);
     }
     return '';
 }
            </tr>
        </table>

        <?php 
Util_Ui::button_config_save('browsercache_html_xml');
?>
        <?php 
Util_Ui::postbox_footer();
?>

        <?php 
Util_Ui::postbox_header(__('Media &amp; Other Files', 'w3-total-cache'), '', 'media');
?>
        <table class="form-table">
            <?php 
if (!Util_Environment::is_nginx()) {
    ?>
            <tr>
                <th colspan="2">
                    <?php 
    $this->checkbox('browsercache.other.last_modified');
    ?>
 <?php 
    Util_Ui::e_config_label('browsercache.other.last_modified');
    ?>
</label>
                    <br /><span class="description"><?php 
    _e('Set the Last-Modified header to enable 304 Not Modified response.', 'w3-total-cache');
    ?>
</span>
                </th>
 /**
  * Checks if the platform running WP is supported by New Relic.
  * The verifications is based on https://newrelic.com/docs/php/new-relic-for-php
  *
  * @return array
  */
 function verify_compatibility()
 {
     $php_versions = array('5.2.x', '5.3.x', '5.4.x');
     $verified = array();
     $version = explode('.', PHP_VERSION);
     $php_version = sprintf('%s.%s.%s', $version[0], $version[1], $version[2]);
     $php_version_ok = version_compare($php_version, '5.2', '>') && version_compare($php_version, '5.5', '<');
     $supported_string = __('Supported', 'w3-total-cache');
     $verified[__('PHP version', 'w3-total-cache')] = $php_version_ok ? $supported_string : sprintf(__('Not supported: %s. Supported versions are %s.', 'w3-total-cache'), $php_version, implode(', ', $php_versions));
     $os_name = php_uname('s');
     switch ($os_name) {
         case 'Linux':
             /**
              * Any other version of Linux with kernel 2.6.13 or later
              * (2.6.26 and later highly recommended) and glibc 2.5 or later
              */
             $version = explode('.', php_uname('r'));
             $os_version = sprintf('%d.%d.%d', $version[0], $version[1], $version[2]);
             $os_check = version_compare($os_version, '2.6.13', '>=');
             break;
         case 'FreeBSD':
             /**
              * You must enable the linkthr build option so that the New Relic agent will not cause your PHP to hang.
              */
             $version = explode('.', php_uname('r'));
             $os_version = sprintf('%d.%d', $version[0], $version[1]);
             $os_check = version_compare($os_version, '7.3', '>=');
             break;
         case 'MacOS/X':
             /**
              * MacOS/X configurations do not use the standard /etc/init.d/newrelic-daemon script.
              * Instead, they use /usr/bin/newrelic-daemon-service in the same way; for example:
              * /usr/bin/newrelic-daemon-service restart.
              */
             $version = explode('.', php_uname('r'));
             $os_version = sprintf('%d.%d', $version[0], $version[1]);
             $os_check = version_compare($os_version, '10.5', '>=');
             break;
         case 'Open Solaris':
             /**
              * snv_134b or later
              */
             $version = explode('.', php_uname('r'));
             $os_version = sprintf('%d', $version[0]);
             $os_check = version_compare($os_version, '10', '==');
             break;
         default:
             $os_check = false;
             $os_name = php_uname();
             $os_version = '';
     }
     $verified[__('Operating System', 'w3-total-cache')] = $os_check ? $supported_string : sprintf(__('Not Supported. (%s %s See %s page.)', 'w3-total-cache'), $os_name, $os_version, '<a href="https://newrelic.com/docs/php/new-relic-for-php#requirements" target="_blank">
         NewRelic Requirements</a>');
     /**
      * Apache 2.2 or 2.4 via mod_php
      * Or any web server that supports FastCGI using php-fpm
      */
     $server = explode('/', $_SERVER['SERVER_SOFTWARE']);
     $ws_check = false;
     $ws_name = $_SERVER['SERVER_SOFTWARE'];
     $ws_version = '';
     if (sizeof($server) > 1) {
         $ws_name = $server[0];
         $ws_version = $server[1];
         if (sizeof($version = explode('.', $ws_version)) > 1) {
             $ws_version = sprintf('%d.%d', $version[0], $version[1]);
         }
     }
     switch (true) {
         case Util_Environment::is_apache():
             if ($ws_version) {
                 $ws_check = version_compare($ws_version, '2.2', '>=') || version_compare($ws_version, '2.4', '>=');
             }
             break;
         case Util_Environment::is_nginx():
             $ws_check = php_sapi_name() == 'fpm-fcgi';
             $ws_name .= php_sapi_name();
             break;
         default:
             $ws_check = php_sapi_name() == 'fpm-fcgi';
             $ws_name = $_SERVER['SERVER_SOFTWARE'];
             $ws_version = '';
     }
     $verified[__('Web Server', 'w3-total-cache')] = $ws_check ? $supported_string : sprintf(__('Not Supported. (%s %s See %s page.)', 'w3-total-cache'), $ws_name, $ws_version, '<a href="https://newrelic.com/docs/php/new-relic-for-php#requirements" target="_blank">
                                     NewRelic Requirements</a>');
     return $verified;
 }
Esempio n. 7
0
 /**
  * Checks whether canonical should be generated or not by browsercache plugin
  *
  * @param Config  $config
  * @param boolean $cdnftp
  * @return string|null
  */
 public static function canonical_generated_by($config, $cdnftp = false)
 {
     if (!self::_should_canonical_be_generated($config, $cdnftp)) {
         return null;
     }
     if (Util_Environment::is_nginx()) {
         // in nginx - browsercache generates canonical if its enabled,
         // since it does not allow multiple location tags
         if ($config->get_boolean('browsercache.enabled')) {
             return 'browsercache';
         }
     }
     if ($config->get_boolean('cdn.enabled')) {
         return 'cdn';
     }
     return null;
 }
 /**
  * Returns true if we can check rules
  *
  * @return bool
  */
 public static function can_check_rules()
 {
     return Util_Environment::is_apache() || Util_Environment::is_litespeed() || Util_Environment::is_nginx();
 }
 /**
  * Returns page key
  *
  * @param string  $mobile_group
  * @param string  $referrer_group
  * @param string  $encryption
  * @param string  $compression
  * @param string  $content_type
  * @param string  $request_uri
  * @return string
  */
 function _get_page_key($mobile_group = '', $referrer_group = '', $encryption = '', $compression = '', $content_type = '', $request_url = '')
 {
     if ($request_url) {
         $parts = parse_url($request_url);
         $key = $parts['host'] . (isset($parts['path']) ? $parts['path'] : '') . (isset($parts['query']) ? '?' . $parts['query'] : '');
     } else {
         $key = $this->_request_host . $this->_request_uri;
     }
     // replace fragment
     $key = preg_replace('~#.*$~', '', $key);
     $key = strtolower($key);
     // host/uri in different cases means the same page in wp
     if ($this->_enhanced_mode) {
         // URL decode
         $key = urldecode($key);
         // replace double slashes
         $key = preg_replace('~[/\\\\]+~', '/', $key);
         // replace query string
         $key = preg_replace('~\\?.*$~', '', $key);
         // replace index.php
         $key = str_replace('/index.php', '/', $key);
         // trim slash
         $key = ltrim($key, '/');
         if ($key && substr($key, -1) != '/') {
             $key .= '/';
         }
         $key .= '_index';
     } else {
         if ($this->_check_query_string()) {
             // replace query string
             $key = preg_replace('~\\?.*$~', '', $key);
         }
         $key = md5($key);
     }
     /**
      * Append mobile group
      */
     if ($mobile_group) {
         $key .= '_' . $mobile_group;
     }
     /**
      * Append referrer group
      */
     if ($referrer_group) {
         $key .= '_' . $referrer_group;
     }
     /**
      * Append encryption
      */
     if ($encryption) {
         $key .= '_' . $encryption;
     }
     if (Util_Environment::is_preview_mode()) {
         $key .= '_preview';
     }
     if ($this->_enhanced_mode) {
         /**
          * Append HTML extension.
          * For nginx - we create .xml cache entries and redirect to them
          */
         if (Util_Environment::is_nginx() && substr($content_type, 0, 8) == 'text/xml' && $this->_config->get_boolean('pgcache.cache.nginx_handle_xml')) {
             $key .= '.xml';
         } else {
             $key .= '.html';
         }
     }
     /**
      * Append compression
      */
     if ($compression) {
         $key .= '_' . $compression;
     }
     return $key;
 }