为了使用 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 = On
on /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 压缩被禁用:
有人知道为什么 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 支持。