卸载 PHP 正在使用的 Imagick 版本

Uninstall Imagick Version that PHP is using

我通过 apt-get install 安装了 Imagick。然而,它安装的版本是旧的 (6.9.7),并且没有内置我需要的所有委托。

所以我想我使用 apt-get remove --purge imagemagick 卸载了它并从源代码重新安装了它。

目前 identify -version 给我刚安装的正确版本 (6.9.12) 但是 php -r "print_r(Imagick::getVersion());" 仍然显示 v 6.9.7。

facepalm
      .-'---`-.
    ,'          `.
    |             \
    |              \
    \           _  \
    ,\  _    ,'-,/-)\
    ( * \ \,' ,' ,'-)
     `._,)     -',-')
       \/         ''/
        )        / /
       /       ,'-'

我的问题是

ImageMagick 分为几个包,php-imagick 扩展包和前置 imagemagick 包都使用 libmagick* 包提供的库。

如果您已经安装了 ImageMagick 的编译版本,最简单的方法是删除 imagick 的打包版本,然后编译 imagick 扩展,配置它使用您新编译的 ImageMagick 版本。

根据说明 here,您可以执行以下操作:

sudo apt-get purge -y php-imagick
git clone https://github.com/Imagick/imagick.git
pushd imagick
phpize
./configure --with-imagick=${IMAGEMAGICK_PREFIX_DIR}
make
sudo cp modules/imagick.so ${PHP_EXTENSION_DIR}
echo extension=imagick.so | sudo tee ${PHP_CONFIGURATION_FILE_PATH}/conf.d/30-imagick.ini

其中:

  • IMAGEMAGICK_PREFIX_DIR 是您安装 ImageMagick 的前缀(这样 MagickWand-config 可以在 ${IMAGEMAGICK_PREFIX_DIR}/bin/MagickWand-config 处找到)。
  • PHP_EXTENSION_DIR 是 PHP 查找其扩展的目录,可以通过 php -i | grep extension_dir 找到。这看起来像 /usr/lib/php/20190902.
  • PHP_CONFIGURATION_FILE_PATH 是特定 SAPI 配置的基本目录,可以通过 php -i | grep 'Configuration File (php.ini) Path'(对于 cli SAPI)或 Configuration File (php.ini) Path 下列出的值找到在通过网络服务器的 phpinfo() 输出中。这看起来像 /etc/php/7.4/${SAPI},其中 SAPI 是 cli,或 apache2,等等