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

7
在phpmanual的文档中写道:

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

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

因此,正如它所说的那样,它应该只在Windows版本的PHP中默认启用。
但是我从存储库安装了PHP和Apache到我的Linux机器上,然后我发现它已经启用了。使用以下命令:
sudo apt-get install apache2
sudo apt-get install php5 php-pear

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

我尝试了不添加--with-zlib[=DIR]配置的源代码安装PHP,只是为了检查是否支持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

最后,我运行以下命令以使其与Apache配合使用:

apt-get install libapache2-mod-php5

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

如果你想知道如何检查它是否已启用,这里有答案。

我通过 phpinfo(); 进行检查,它总是显示已启用:

enter image description here

我还检查了这个库中的几个函数:

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'

我询问这个问题是因为我有一个WordPress插件。作为插件,它将安装在许多不同的服务器上。 现在我想开始使用函数gzinflate()gzdeflate()来实现一个新功能。所以我进行了一些研究和测试,但很困惑,因为文档说默认情况下不支持,但当我在我的服务器上安装PHP时,它总是默认支持。
我真的需要使用这些函数,但如果至少99%的客户服务器不支持它们,我就不想使用它们。
那么,文档是错误的还是我漏掉了什么?如果我漏掉了什么,你能帮我找到任何替代压缩函数吗?这些替代函数将在至少99%的服务器上得到支持。

你不能保证它一定会出现,但这种情况非常普遍。如果你需要它,无论如何你都别无选择,对吧? - Brad
归根结底,“默认启用”并不等同于“始终内置”。实际上,只有在编译时无法使用zlib.h时,它才会缺失。 - mario
2个回答

9

文档中的这部分似乎是不正确的。据我所知,zlib 扩展一直*默认启用。

虽然在某些系统上可能没有加载此扩展,但这种情况非常罕见。您无需添加其缺失的解决方法 - 只需将其作为要求声明并继续即可。

*:也就是说,至少从 PHP 4.0 开始。


1

几天前,我遇到了一个情况,与您所述的相反。我正在使用的aws linux ami安装了php,但没有配置zlib,因此我无法获取zlib包。

我不得不重新安装php以获取我想要的包,即--with-zlib[=DIR](不建议这样做,但这是我必须保持的官方方法)。

因此,并非总是默认可用。

希望这可以帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接