当前位置: 首页 » WordPress » AlmaLinux 9.6 + WordPress 图片上传报错?试试这个办法

AlmaLinux 9.6 + WordPress 图片上传报错?试试这个办法

最近在折腾 WordPress,准备上传张图片,结果 WordPress 直接给我来了一句:

“Web 服务器无法为该图像生成响应式图像大小。如果您尝试使用大型图像,请尝试上传较小的图像”

图片才 500KB,怎么就算”大型图像”了?

为什么会报这个错

看了半天错误日志,发现是 WordPress 在调用 ImageMagick 库生成缩略图的时候出问题了。

具体原因是这样的

没有安装 Imagick 组件,以及 php-imagick 组件;尝试安装这两个组件,安装前面一个没有问题,yum install imageick-devel imagick,但是第二个安装一直不成功;出错的原因有:

  1. 直接安装 php-imagick,提示错误:Problem: package php-pecl-imagick-3.7.0-1.el9.x86_64 from epel requires php(api) = 20200930-64, but none of the providers can be installed – package php-pecl-imagick-3.7.0-1.el9.x86_64 from epel requires php(zend-abi) = 20200930-64, but none of the providers can be installed – conflicting requests – package php-common-8.0.30-3.el9_6.x86_64 from appstream is filtered out by modular filtering (try to add ‘–skip-broken’ to skip uninstallable packages or ‘–nobest’ to use not only best candidate packages)
    这是包有冲突,系统安装的php 是83版本,但是 php-pecl-imagick,使用的不是 php83,可能是 php70;
  2. 安装 php83-php-imagick,也不行,因为这个包安装完毕后,生成的so 文件不在默认路径 /usr/lib64/php/extensions 中。

分析问题

我用的是 AlmaLinux 9.6,系统源里的 PHP 已经更新到了 8.3。但是 EPEL 源里的 php-pecl-imagick 包还停留在 PHP 8.2 时代,根本没跟上。

执行 sudo dnf install php-pecl-imagick 会提示找不到包,或者即使装上了也不兼容当前的 PHP 版本。

结果就是:系统里有 ImageMagick,但 PHP 用不了,WordPress 就只能干瞪眼。

解决办法:自己编译一个

既然 EPEL 不给力,那就自己动手。好在 PECL 可以直接编译最新版的 Imagick 扩展。

第一步:装依赖

sudo dnf install -y epel-release
sudo dnf install -y ImageMagick ImageMagick-devel php-devel php-pear gcc make autoconf

这里 ImageMagick-devel 是必须的,不然编译时会报 MagickWand.h not found 之类的错误。

第二步:通过 PECL 安装

sudo pecl install imagick

中间可能会问你一些配置选项,直接回车用默认值就行。

如果顺利的话,最后会看到:

Build process completed successfully
Installing ‘/usr/lib64/php/modules/imagick.so’

第三步:启用扩展

echo “extension=imagick.so” | sudo tee /etc/php.d/40-imagick.ini

第四步:重启 PHP-FPM

sudo systemctl restart php-fpm

验证一下

php -m | grep imagick

如果输出里有 imagick,就说明装好了。

可以再确认一下版本:

php -r ‘echo (new Imagick())->getVersion()[“versionString”], PHP_EOL;’

可能遇到的问题

  1. 编译时提示找不到 MagickWand-config 说明没装 ImageMagick-devel,回去补一下: sudo dnf install -y ImageMagick-devel
  2. PHP 还是加载不了 imagick.so 检查一下文件是不是真的在: ls -lh /usr/lib64/php/modules/imagick.so 如果不在,可能是编译失败了,回头重新 pecl install imagick。
  3. WordPress 还是报错 清一下 WordPress 缓存,或者重启一下 Nginx/Apache 和 PHP-FPM: sudo systemctl restart nginx
    sudo systemctl restart php-fpm 为什么不用 Remi 源? 网上有些教程会让你装 Remi 源,然后用 php83-php-pecl-imagick。 理论上可以,但 Remi 的包路径是 /opt/remi/php83/,和系统自带的 PHP 不在一个路径下,容易搞乱。 如果你本来就在用 Remi 的 PHP,那没问题。但如果用的是系统源的 PHP,还是老老实实用 PECL 编译比较稳

总结

AlmaLinux 9.6 + PHP 8.3 + WordPress 的组合确实有点坑,EPEL 更新慢是主要原因。 好在 PECL 可以直接编译最新版,装完就能用,也不用担心依赖冲突。 如果你也遇到类似问题,试试这个方法应该能解决。

滚动至顶部