settings = $settings; } /** * Register hooks. * * @return void */ public function register() { add_action( 'send_headers', array( $this, 'send_headers' ), 20 ); } /** * Add vary header for compression compatibility. * * @return void */ public function send_headers() { if ( $this->settings->get( 'compression.enabled', 1 ) && ! headers_sent() ) { header( 'Vary: Accept-Encoding', false ); } } /** * Compression status. * * @return array */ public function status() { $accept = isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ? sanitize_text_field( wp_unslash( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) : ''; return array( 'gzip_php' => extension_loaded( 'zlib' ), 'gzip_requested' => false !== stripos( $accept, 'gzip' ), 'brotli_loaded' => extension_loaded( 'brotli' ), 'brotli_requested' => false !== stripos( $accept, 'br' ), 'server' => isset( $_SERVER['SERVER_SOFTWARE'] ) ? sanitize_text_field( wp_unslash( $_SERVER['SERVER_SOFTWARE'] ) ) : '', ); } }