核心成果: - 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的数据对接
59 lines
2.9 KiB
Markdown
59 lines
2.9 KiB
Markdown
# **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 步**。 |