我想ZipArchive::setEncryptionName
在 Ubuntu 服务器 18.04.1 上使用 PHP 7.2.7
问题是setEncryptionName
需要至少 1.2 版的 Libzip
PHP 信息的默认配置:
- Zip 版本 1.15.2
- Libzip 版本 1.1.2
没有帮助的命令:
sudo apt-get update && sudo apt-get install libzip4
libzip4 已经是最新版本 (1.1.2-1.1)sudo apt-get install php-zip
php-zip 已经是最新版本 (1:7.2+60ubuntu1)
答案1
(1)找到较新版本的Launchpad 上的 libzip 和 libzip-dev。目前在 The Eoan Ermine 下是 1.5.1。下载正确的 deb 文件(libzip-dev_1.5.1-0ubuntu1_amd64.deb 和 libzip5_1.5.1-0ubuntu1_amd64.deb)。
(2)使用以下命令安装
sudo dpkg -i libzip-dev_1.5.1-0ubuntu1_amd64.deb libzip5_1.5.1-0ubuntu1_amd64.deb
它们可能缺少一些依赖项,您可以先尝试使用 apt 安装它们,这样您就不需要从 Launchpad 下载任何“不兼容”的软件包。然后重新运行此命令。
(3)安装 php-zip。安装 PEAR(PECL)以将 php-zip 升级到较新的版本。还安装 PECL 构建 php-zip 所需的 php-dev。
sudo apt install php-zip php-pear php-dev
(4)升级 php-zip 以支持较新的 libzip。
sudo pecl install zip
(5)您可能不再需要开发库。
sudo apt purge php-dev libzip-dev
sudo apt autoremove
(6)查看 phpinfo() 以确认你的 libzip 版本正确。你可能需要重启你的 web 服务器。
(7)您可以阻止 apt 自动升级您的 php-zip,从而破坏您的自定义安装。但您应该记得使用 pecl 手动升级 php,或者检查较新版本是否支持较新的 libzip。(使用 sudo dpkg -l | grep zip 查看已安装的版本)
sudo apt-mark hold php<installed version>-zip
要恢复原始版本(假设您已经使用了 libzip5,并且不需要以前安装的软件包):
sudo apt-mark unhold php<installed version>-zip
sudo pecl uninstall zip
sudo apt purge php-pear libzip5 php-zip
sudo apt autoremove
sudo apt install php-zip