You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drupal 10编辑图片样式触发DivisionByZeroError问题求助

Drupal 10图片样式编辑/创建时DivisionByZeroError问题解决

问题核心定位

这个错误的本质是:生成图片样式预览时,代码尝试读取$variables['preview']['derivative']中的宽高值进行除法运算,但该键不存在导致宽高值为0,触发了除以零的PHP错误。

原因及对应修复方案

1. 默认预览示例图片缺失或权限异常

Drupal默认依赖core/modules/image/sample.png生成样式预览,若该文件损坏、丢失或权限不足,会导致无法生成派生预览图(即derivative键缺失)。

  • 检查文件是否存在:进入Drupal根目录,执行ls core/modules/image/sample.png确认文件存在
  • 修复权限:执行sudo chmod 644 core/modules/image/sample.png,确保Web服务用户(www-data)可读
  • 文件丢失的话,从官方Drupal 10安装包中重新提取该文件替换

2. PHP GD扩展未启用或配置异常

图片样式的生成依赖GD库处理图片,若GD扩展未安装或配置错误,会导致无法生成派生图。

  • 检查GD扩展状态:执行php -m | grep gd,若无输出则表示未启用
  • 安装并启用:执行sudo apt install php8.2-gd,然后重启服务:sudo systemctl restart nginx php8.2-fpm
  • 验证配置:查看php.ini(路径通常为/etc/php/8.2/fpm/php.ini),确保gd.enable = On等相关配置正常

3. 文件系统目录权限不足

Drupal需要写入权限到默认文件目录(sites/default/files)来存储生成的图片派生文件,权限不足会导致生成失败。

  • 设置正确权限:执行sudo chown -R www-data:www-data sites/default/files和sudo chmod -R 755 sites/default/files

临时应急修复(不推荐长期使用)

若以上方案暂时无法生效,可临时修改核心文件避免错误(注意:修改核心文件会影响后续Drupal更新,问题解决后务必还原):
打开core/modules/image/image.admin.inc,找到第77行附近的代码,增加非空和非零判断:

// 原代码
$width = $variables['preview']['derivative']['width'];
$height = $variables['preview']['derivative']['height'];
$scale = min(100 / $width, 100 / $height);

// 修改后
if (!empty($variables['preview']['derivative']) && $variables['preview']['derivative']['width'] > 0 && $variables['preview']['derivative']['height'] > 0) {
  $width = $variables['preview']['derivative']['width'];
  $height = $variables['preview']['derivative']['height'];
  $scale = min(100 / $width, 100 / $height);
} else {
  $scale = 1;
}

内容的提问来源于stack exchange,提问作者Josh Cronin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 01:12:41