Files
AIclinicalresearch/Redcap 问题原因排查.md
HaHafeng 38d9bf99d6 feat(redcap): REDCap 15.8.0 Docker本地开发环境部署完成
核心成果:
- REDCap 15.8.0成功部署在Docker环境
- 登录功能正常,管理员账户: Admin/Admin123!
- MySQL 8.0 + PHP 8.1 + Apache 2.4环境验证通过

问题解决:
1. 修复ERR_CONTENT_DECODING_FAILED错误
   - 强制禁用Apache deflate模块
   - PHP配置关闭zlib.output_compression
   - 自动注释REDCap源码中的压缩设置

2. 修复Base URL配置错误
   - 更新redcap_config表中的redcap_base_url
   - 统一DocumentRoot与访问路径

3. 修复登录失败问题(CRLF污染)
   - 删除database.php末尾的PHP结束标签
   - 创建.gitattributes规范换行符
   - 验证REDCap官方源码无此问题

技术改进:
- 添加密码重置工具脚本
- 完善docker-entrypoint.sh启动脚本
- 创建详细的部署问题解决记录
- 建立PHP配置文件最佳实践

部署文档:
- REDCap本地Docker开发环境部署方案
- REDCap生产环境部署决策报告(ECS vs SAE)
- 部署问题解决记录(含根因分析)

下一步:
- Day 2: 开发REDCap API Adapter
- 实现与IIT Manager Agent的数据对接
2026-01-02 10:02:46 +08:00

2.9 KiB
Raw Blame History

REDCap ERR_CONTENT_DECODING_FAILED 错误排查与修复指南

如果在浏览器访问 REDCap 时遇到 net::ERR_CONTENT_DECODING_FAILED 200 (OK),说明数据包在传输过程中被“弄脏”了。以下是按优先级排序的 4 种解决方案:

1. 禁用 PHP 的 zlib 输出压缩 (最常见原因)

REDCap 内部有时会尝试自己控制输出压缩,如果你的 php.ini 里也开启了 zlib.output_compression两者冲突就会导致解码失败。

操作步骤:

  1. 找到你挂载到 Docker 容器里的 php.ini 文件。

  2. 搜索 zlib.output_compression。

  3. 将其设置为 Off
    zlib.output_compression = Off

  4. 重启 Docker 容器docker-compose restart redcap-web。

2. 检查并清理 PHP 文件的 BOM 头

如果你编辑过 database.php 或 config.php并使用了 Windows 记事本,可能会在文件开头插入一个不可见的 UTF-8 BOM 字符。这个字符会抢在 Gzip 报文头之前发送,导致浏览器解压失败。

操作步骤:

  1. 使用 VS Code 或 Notepad++ 打开 database.php。
  2. 检查右下角的编码格式。如果是 UTF-8 with BOM请将其更改为 UTF-8 (无 BOM)。
  3. 确保 <?php 标签前面没有任何空格或换行

3. 屏蔽 PHP 报错对输出流的干扰

如果 PHP 开启了 display_errors那么在 REDCap 尝试发送压缩页面时,如果代码报了一个 Notice 或 Warning这些文字信息会直接塞进压缩流里导致整个包损坏。

操作步骤:
在 php.ini 中临时关闭报错显示,看看页面能否恢复:
display_errors = Off
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED

注:如果关闭后能访问了,说明代码里有报错,你需要去查看 docker-compose logs redcap-web 里的具体错误原因。

4. 检查临时目录 (temp) 的写入权限

REDCap 在处理输出缓冲时需要写入 temp 目录。如果权限不足PHP 会报错,进而引发上述的解码失败。

操作步骤:
在宿主机执行以下命令,确保容器内的目录可写:
docker exec -it redcap-web chown -R www-data:www-data /var/www/html/temp
docker exec -it redcap-web chmod -R 775 /var/www/html/temp

5. 常见原因总结表

可能原因 表现 解决方法
zlib 压缩冲突 页面随机性报错 关闭 zlib.output_compression
BOM 字符污染 始终报错 将 PHP 文件保存为“无 BOM 的 UTF-8”
PHP 报错混入 升级或安装后初次访问 检查日志并关闭 display_errors
文件截断 页面加载一半报错 增加 memory_limit 或 max_execution_time

快速测试

你可以尝试在浏览器中使用“无痕模式”访问。如果无痕模式依然报错,则 100% 是服务器端的配置问题,请重点执行 第 1 步