PHP 中的 ZLIB 支持是否默认启用?

car*_*ics 6 php linux apache ubuntu zlib

在 phpmanual 的文档中它说:

默认情况下未启用 PHP 中的 Zlib 支持。您将需要配置 PHP --with-zlib[=DIR]

PHP 的 Windows 版本内置了对此扩展的支持。您无需加载任何其他扩展即可使用这些功能。

所以正如它所说的那样,它应该只在 Windows 版本的 PHP 中默认启用。

但是我从存储库在我的 linux 机器上安装了 PHP 和 Apache,然后我注意到它已经启用。使用了这些命令:

sudo apt-get install apache2
sudo apt-get install php5 php-pear
Run Code Online (Sandbox Code Playgroud)

这是否意味着如果您从存储库安装 PHP,它也会默认启用?

此外,我尝试从源代码安装 PHP,而不添加--with-zlib[=DIR]配置,只是为了检查是否zlib支持。根据 phpmanual 上的文档,它不应该。

我不是编译专家,所以我找到了从源代码安装 php 的教程,然后我做了以下步骤:

apt-get install libxml2-dev
apt-get install build-essential

wget http://in1.php.net/distributions/php-5.3.28.tar.bz
tar -xvjf php-5.3.28.tar.bz
cd php-5.3.28
./configure --prefix /usr/local/php5
------ I configure it without --with-zlib[=DIR]    ---------
make
make test
make install
Run Code Online (Sandbox Code Playgroud)

最后我运行这一行让它与 apache 一起工作:

apt-get install libapache2-mod-php5
Run Code Online (Sandbox Code Playgroud)

在以这种方式安装 PHP 后,ZLIB 支持再次默认启用。

如果你问自己我如何检查它是否启用,这里是答案。

我正在检查它phpinfo();,它总是说它已启用:

在此处输入图片说明

而且我还在检查这个库中的一些功能:

if(function_exists('gzdeflate'))
{
    echo 'ZLIB is supported';
}
else
{
    echo 'ZLIB is not supported';
}
//the result is always 'ZLIB is supported'

if(function_exists('gzencode'))
{
   echo 'ZLIB is supported';
}
else
{
    echo 'ZLIB is not supported';
}
//the result is always 'ZLIB is supported'
Run Code Online (Sandbox Code Playgroud)

我问这个是因为我有 wordpress 插件。因此,作为插件,它将安装在许多不同的服务器上。现在我想从使用函数gzinflate()gzdeflate()一个新特性开始。所以我做了研究和一些测试并且感到困惑,因为文档说它默认不支持但是当我在我的服务器上安装 PHP 时它总是默认支持。

我真的需要使用这些功能,但如果至少 99% 的客户服务器不支持它们,我不想使用它们。

那么文档是错误的还是我遗漏了什么。如果我遗漏了一些东西,那么你能帮我提供任何替代压缩功能,至少 99% 的服务器都支持这些功能。

小智 8

文档的这一部分似乎不正确。据我所知,zlib默认情况下该扩展程序始终*处于启用状态。

虽然此扩展程序可能未在某些系统上加载,但这种情况极为罕见。您不需要为它的缺失添加变通方法——只需将其声明为需求并继续。

*:也就是说,至少回到PHP 4.0。