Roundcube上传附件触发内部服务器错误 附报错日志求助排查
报错根因
该报错是Roundcube在IMAP连接已经被提前释放的场景下,执行shutdown逻辑时仍尝试关闭已经不存在的socket资源触发的类型错误,上传的附件实际已写入草稿,所以刷新后可见。
修复步骤
- 代码层兼容修复(优先执行,可快速消除报错)
编辑/var/www/roundcube/program/lib/Roundcube/rcube_imap_generic.php文件,定位到430行的fclose()调用逻辑,新增资源类型判断:
// 替换原有的 fclose($this->stream); 为以下代码 if (is_resource($this->stream)) { fclose($this->stream); }
修改后保存,重启PHP服务即可消除该报错。
- 底层配置排查(解决连接提前断开的根本问题)
- 检查PHP配置
php.ini的以下参数,确保取值大于你需要上传的附件大小:upload_max_filesize = 32M post_max_size = 32M max_execution_time = 120 memory_limit = 256M - 检查Roundcube配置
config/config.inc.php:
确认$config['max_message_size']取值和PHP上传限制匹配,同时检查$config['imap_conn_options']的超时配置是否合理,避免IMAP连接在附件上传过程中被提前断开。 - 检查Dovecot配置:
查看conf.d/10-mail.conf的mail_max_userip_connections参数不低于10,conf.d/20-imap.conf的imap_idle_timeout不低于120秒,避免单用户连接数不足、超时导致的IMAP连接提前释放。
- 附件预览异常修复
附件无法直接预览是PHP缺少fileinfo扩展导致的mime类型识别失败,执行对应系统的扩展安装命令后重启PHP服务即可:
- Debian/Ubuntu:
apt install php-fileinfo - CentOS/RHEL:
yum install php-fileinfo
安装完成后可在Roundcube配置中确认$config['mime_types']指向系统mime类型文件路径(默认/etc/mime.types即可)。
内容的提问来源于stack exchange,提问作者Matej Petric
相关产品推荐
相关产品推荐

