php - 使用 PHP ob_start() 与 Apache Deflate/Gzip 压缩内容?

标签 php apache gzip compression

大多数网站都希望压缩其内容以节省带宽。然而,当涉及到运行 PHP 的 apache 服务器时,有两种方法可以做到 - with PHP或与 Apache 。那么在您的服务器上哪一个更快或更容易?

例如,在 PHP 中,我在页面的开头运行以下函数来启用它:

/**
 * Gzip compress page output
 * Original function came from wordpress.org
 */
function gzip_compression() {

    //If no encoding was given - then it must not be able to accept gzip pages
    if( empty($_SERVER['HTTP_ACCEPT_ENCODING']) ) { return false; }

    //If zlib is not ALREADY compressing the page - and ob_gzhandler is set
    if (( ini_get('zlib.output_compression') == 'On'
        OR ini_get('zlib.output_compression_level') > 0 )
        OR ini_get('output_handler') == 'ob_gzhandler' ) {
        return false;
    }

    //Else if zlib is loaded start the compression.
    if ( extension_loaded( 'zlib' ) AND (strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') !== FALSE) ) {
        ob_start('ob_gzhandler');
    }

}

other option是使用Apache deflate or gzip (两者都是 very close )。要启用它们,您可以在 .htaccess 文件中添加类似的内容。

AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-httpd-php

由于 PHP 是一种脚本语言(必须由 PHP 加载),我认为 apache 方法会 1)更稳定,2)更快。但是假设在现实世界中没有多大用处。

毕竟,您会认为拥有庞大的财务支持窗口...,我们不会去那里。

最佳答案

我们正在运行...很多网络服务器,每天处理 60M/uniques。通常这不值得一提,但您的问题似乎是基于经验。

我们在 apache 中运行。无论您选择哪种方法,另一端的输出都是相同的(或足够接近以至于无关紧要)。

我们选择 apache 有几个原因:

  • 零维护,我们刚刚开启。没有人需要维护某种案例结构
  • 性能,在我们的测试服务器中,Apache 完成这项工作的服务器略胜一筹。
  • Apache 会将输出过滤器应用于所有内容,而不仅仅是 PHP。在某些情况下,同一服务器上提供其他类型的内容,我们希望压缩我们的 .css 和 .js

一个警告词,一些浏览器或其他应用程序故意破坏客户端 header ,表明支持压缩。有些人这样做是为了减轻他们在客户端安全方面的工作(想想诺顿互联网安全等应用程序)。您可以忽略这一点,或者尝试添加额外的案例来重写请求以使其看起来正常(浏览器确实支持它,应用程序或代理只是为了让自己的生活更轻松而对其进行了改进)。

或者,如果您使用 flush() 命令更早地将输出发送到浏览器,并且您正在应用压缩,则可能需要在字符串的末尾填充空格以说服服务器提前发送数据。

关于php - 使用 PHP ob_start() 与 Apache Deflate/Gzip 压缩内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1862641/

相关文章:

apache - 如何让 Apache gzip 压缩发挥作用?

hadoop - 压缩 HDFS 文件时出现 IOException

php - html/php 中的多色 TD?

php - PHP 中的模拟 Ruby 符号

PHP 检查文件是否被 flock() 锁定?

java - 使用 GZIP 配置 Tomcat 8

c# - 使用 WebClient 下载时防止服务器以 gzip 编码

php - MySQL SHOW COLUMNS 意外行为

php - 共享 Apache 2.0 模块与静态 Apache 模块

在 VS2010 中编译特定的 apache 模块