Imagick 是一个原生 PHP 扩展,它为 ImageMagick[1] 库提供一个包装器,可以使 PHP 拥有利用 ImageMagick API 创建和修改图像的能力。有很多涉及到图像处理的 PHP 程序或 PHP 包依会依赖此扩展,但是该扩展未与 PHP 捆绑安装,需要额外手动安装。
本文以 imagick 扩展最新稳定版本 3.7.0 为例,详细介绍了如何通过使用 phpize
命令编译共享 PECL[2] 扩展的方式,为已经在 CentOS 上安装好的 PHP 添加 imagick 扩展。你也可以参考 imagick 的 Github 项目页面提供的安装说明进行安装。PCEL 扩展的更多安装方式可参考 PHP 官方文档中有关安装 PECL 扩展的内容。
本文假设你登录的账户已取得管理员账户(root)权限,因为文中出现的命令大部分都需要用到 root 账户权限。如果你登录的是普通账户,可运行 sudo -s
命令切换到带有 root 权限的 Shell,否则需要在每条命令前添加 sudo
命令。
本文在用到包管理器时,会统一使用 yum
命令,但是要知道在 CenOS 8、CentOS Stream 8 及更新版本的 CentOS 中,yum
命令已被 dnf
命令替代(以符号链接的形式存在),运行 yum
命令实际上是运行 dnf
命令。
一、安装 ImageMagick 开发库
要为 PHP 安装 imagick 扩展,需要确保 CentOS 系统中已安装 ImageMagick 开发库,如未安装可运行以下命令进行安装:
yum install ImageMagick-devel
注意,PHP 的 imagick 扩展要求 ImageMagick 的版本大于等于 6.5.3,因此需要确保你能够利用包管理器安装符合此条件的版本,否则你需要按照 ImageMagick 官方文档自行手动安装。
另外,安装的 imagick 扩展所能支持的格式数量完全取决于所安装 ImageMagick 支持的格式数量。比如,ImageMagick 需要 Ghostscript 来进行对 PDF 的操作。
二、下载 imagick 扩展
你可以在 PECL 发布页面或 Github 发布页面下载 imagick 扩展:
- PECL 发布页面:https://pecl.php.net/package/imagick
- Github 发布页面:https://github.com/Imagick/imagick/tags
切换到系统的源代码存放目录,在终端上运行以下命令将 imagick 扩展的源代码压缩包下载下来:
cd /usr/local/src
curl -LO https://pecl.php.net/get/imagick-3.7.0.tgz
三、编译 imagick 扩展
首先解压缩下载到的压缩包,并切换到解压缩得到的目录中(注意,除非有说明,所有操作都会在该目录下进行,切勿离开):
tar -xvf imagick-3.7.0.tgz
cd imagick-3.7.0
然后需要运行 phpize
命令为 imagick 扩展准备构建环境:
/usr/local/php/bin/phpize
最后运行以下命令编译并安装 imagick 扩展:
./configure --with-php-config=/usr/local/php/bin/php-config
make
make install
注意,这里在运行配置脚本时添加了 --with-php-config
选项,用来指定 PHP 提供的一个名为 php-config 的 Shell 脚本,其作用是获取已安装 PHP 配置的相关信息。
如果你在 CentOS 上安装了多个 PHP 版本,这个选项就很有用,能让你在编译 PHP 扩展时,通过某个版本 PHP 的 php-config 脚本为该 PHP 版本安装扩展。当然,如果你只安装了一个 PHP 版本,也可以忽略此选项。
扩展编译安装完成后,一个名为 imagick.so 的动态库文件会被创建到 PHP 扩展目录中,路径如下所示(命令行会提示扩展所存放的具体路径):
/usr/local/php/lib/php/extensions/no-debug-non-zts-20210902/
这里只需要记住修改 PHP 配置所用到的 imagick.so 这个文件名即可。
四、配置 imagick 扩展
编译安装好 imagick 扩展后还需要修改名为 php.ini 的 PHP 配置文件,将 imagick 扩展动态库文件名以指令的形式添加到 PHP 扩展中。
用你喜欢的编辑器(这里用的是 vi 编辑器)打开 php.ini 进行修改:
vi /usr/local/php/lib/php.ini
然后在文件末尾(或文件中“Dynamic Extensions”)出添加如下所示指令:
extension=imagick.so
添加完成后保存并退出(vi 编辑器先按 ESC 再输入 :wq
并回车)。
注意,php.ini 文件中的配置又称为运行时配置(Runtime Configuration),对于开启了 FPM 的 PHP,只有在启动 FPM 时才会被读取一次,因此每次修改 php.ini 文件后,都需要运行如下所示命令重新启动 FPM 才能使新的修改生效:
systemctl restart php-fpm
如何重启 PHP 的 FPM 取决于你如何安装 PHP,这里是将 FPM 作为服务添加到系统并用服务管理器 systemd 进行管理的,具体可参考安装最新版 PHP 中的相关步骤。
五、验证 imagick 扩展
配置完成后可以运行如下所示命令来验证 imagick 扩展是否已成功加载:
php8 -r 'phpinfo();' | grep 'imagick module'
如果出现如下所示提示信息就说明 imagick 已经成功加载,可以正常使用了:
imagick module => enabled
imagick module version => 3.7.0
如果你在操作的过程中遇到了任何问题,可留言提出。
[1] ImageMagick 是一个用来创建、编辑和合成数字图像的软件套装,能够读取、转换和写入多种格式(超过 200 种)的图像,包括 PNG、JPEG、GIF、WebP、HEIC、SVG、PDF、DPX、EXR 和 TIFF。via
[2] PECL(PHP Extension Community Library),即 PHP 扩展社区库,为所有已知的扩展提供了目录,以及为下载和开发 PHP 扩展的托管设施。via