使用Wordpress REST API上传图片遇到错误码500,尝试在PHP配置中增大memory_limit,以及在wp-config.php中增大memory size,都无法解决问题。

最后发现是PHP Fatal error: gd-webp cannot allocate temporary buffer 。当上传图片时,WordPress的GD库尝试处理WebP格式图片时内存不足。

解决方法:PHP安装扩展imagick.

若可视化安装失败,可通过源码编译,步骤如下(以 PHP 7.4 为例,替换为你的 PHP 版本):
  1. 下载对应版本的 Imagick 扩展源码(推荐从 PECL 官方下载,匹配 PHP 版本):

    # 下载Imagick扩展(版本可根据PHP版本调整,如3.7.0兼容PHP 7.0+,4.0.0兼容PHP 8.0+)
    wget https://pecl.php.net/get/imagick-3.7.0.tgz
    # 解压源码包
    tar zxvf imagick-3.7.0.tgz
    cd imagick-3.7.0
  2. 配置编译参数(指定 PHP 路径,宝塔默认路径固定):

    # 调用对应PHP版本的phpize
    /www/server/php/74/bin/phpize
    # 配置编译路径
    ./configure --with-php-config=/www/server/php/74/bin/php-config
  3. 编译并安装:

    # 编译(-j 后面跟服务器CPU核心数,加快编译速度,如4核则写-j4)
    make -j2
    # 安装
    make install
  4. 启用扩展(宝塔已自动配置,若未生效手动添加):

    # 编辑对应PHP版本的php.ini文件
    vi /www/server/php/74/etc/php.ini
    # 在文件末尾添加一行(若已存在则无需重复添加)
    extension=imagick.so
    # 保存退出(vi编辑器:按Esc,输入:wq回车)
  5. 重启 PHP 并验证:

    # 宝塔重启PHP 7.4(其他版本替换74)
    /etc/init.d/php-fpm-74 restart
    # 验证扩展是否生效
    /www/server/php/74/bin/php -m | grep imagick
    # 若输出imagick,说明扩展安装并生效成功