PHP 是使用 zlib 模块编译的,但 phpinfo() 显示它已禁用

PHP 是使用 zlib 模块编译的,但 phpinfo() 显示它已禁用

为了使用 Joomla! 4.3.1,我在 Oracle Linux 8.6 服务器中编译了 PHP 8.2,支持 zlib 压缩:

# php --ri zlib

zlib

ZLib Support => enabled
Stream Wrapper => compress.zlib://
Stream Filter => zlib.inflate, zlib.deflate
Compiled Version => 1.2.11
Linked Version => 1.2.11

Directive => Local Value => Master Value
zlib.output_compression => On => On
zlib.output_compression_level => -1 => -1
zlib.output_handler => no value => no value
# php -m
[PHP Modules]
bcmath
bz2
(...)
zip
zlib

我已经启用了zlib.output_compression = Onon /etc/php.ini,这是 PHP 使用的配置文件:

# php --ini
Configuration File (php.ini) Path: /etc
Loaded Configuration File:         /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed:      (none)

尽管如此,phpinfo();仍然显示 gzip 压缩被禁用: phpinfo() 输出

有人知道为什么 PHP 会出现这种行为吗?

注意:我使用以下参数进行编译:

./configure --prefix=/usr --disable-rpath --disable-debug --enable-calendar --enable-sysvshm  --enable-bcmath --with-bz2 --enable-ctype --enable-exif --enable-ftp --with-gettext --enable-mbstring --enable-shmop --enable-sockets --with-zlib=/usr --without-pgsql --disable-static --with-layout=GNU --with-curl=/usr --with-mhash=/usr --with-unixODBC=/usr --with-snmp=shared --enable-soap --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-zip --with-pdo-mysql --with-mysqli --with-openssl --enable-fpm --with-kerberos --with-xsl --enable-opcache --enable-intl --with-pear --with-oci8=instantclient,/usr/lib/oracle/21/client64/lib --with-config-file-scan-dir=/etc/php.d

先感谢您。

答案1

Phar zlib 支持与 PHP 中的 zlib 支持不同。这就是全部了 - phar 是一种代码存档格式,它没有启用 zlib 压缩支持并不表示 zlib 在 PHP 的其他部分不起作用。

PHP 错误提示和文档具有误导性并不是什么新鲜事!在这种情况下,您已经被“​​install ext/zlib”引入了歧途;这可能是一个单独的扩展,而不是 PHP 本身的 zlib 支持。

对您的努力的友好评论:我不会从头开始构建 PHP。如果推荐您

  • 启动一个 podman 容器,其中包含一个发行版,该发行版本身具有维护良好且安全更新的 PHP 8.2
  • 或者将 PHP 8.2 rpm 从此类发行版反向移植到 CentOS。

由于 PHP 8.2 还很年轻(你真的需要它?最新的前沿软件不一定是服务器应用程序的最佳选择! Joomla 的网站说任何 PHP 8.x 都足够好,因此您可以为您的发行版使用封装良好的 8.0.27,并且拥有零麻烦和经过良好测试的软件),发行版的选择可能是 fedora 38(目前未针对 CentOS 流 9/rhel9/alma9 进行打包)。

容器设置将非常简单,一个 Dockerfile 不包含任何内容,但

FROM fedora:38

RUN dnf install --refresh -y php-fpm && dnf clean all 

ENTRYPOINT php-fpm
EXPOSE 9000

使用 . 从同一目录构建它podman build Dockerfile。使用 运行它podman run,并使用-v参数与内部运行的 PHP 共享必要的目录。配置您的 nginx 或 Apache 以通过 fastcgi 连接到端口 9000 以获取 PHP 支持。

相关内容