Moodle 3.9.19升级后三类问题求助:PPT无法打开、火狐兼容异常等
环境信息
- Windows Server 2012R
- MariaDB 10.6.11
- PHP 7.4.1
- Moodle 3.9.19(升级自3.8)
问题1:仅服务器本地可打开PPTX文件,远程机器无法访问
排查步骤:
文件目录权限校验
找到Moodle配置文件config.php中的$CFG->dataroot路径,在Windows Server上给该目录及所有子目录添加IIS_IUSRS(若用IIS)或PHP运行进程账号的「读取」「列出目录内容」权限。远程访问时,Web进程需要读取文件并输出到客户端,权限不足会导致文件无法加载。Moodle文件传输配置检查
- 进入「站点管理」→「安全」→「HTTP安全」,确认「允许从web服务器发送文件」选项已勾选,且未设置IP白名单限制(若有设置,需将远程机器IP加入)。
- 进入「站点管理」→「插件」→「文件管理器」→「文件系统」,确认文件存储的根路径配置正确,无路径映射错误。
网络与防火墙验证
- 确认服务器80/443端口(根据站点协议)已在Windows防火墙和外部防火墙中开放,允许远程机器的HTTP/HTTPS请求。
- 在远程机器上用命令行执行
curl -I [PPTX文件的完整URL],查看返回状态码:若为403,大概率是权限或防火墙问题;若为404,检查文件是否真的存在于服务器的data目录中。
文件预览插件检查
如果是预览PPTX失败,确认fileconverter_unoconv等预览插件已启用且正常运行:- 检查Unoconv是否安装在服务器上,且PHP进程能调用(Windows下需将Unoconv路径加入系统环境变量)。
- 进入「站点管理」→「插件」→「文件转换器」,测试Unoconv的连接状态。
问题2:Moodle站点在Firefox浏览器中无法正常运行
排查步骤:
清除浏览器缓存与Cookie
按Ctrl+Shift+Delete打开Firefox的清除数据面板,选择「缓存Web内容」「Cookie和站点数据」,清除后重启浏览器访问站点。混合内容与HTTPS校验
打开Firefox开发者工具(F12)→「控制台」,查看是否有「混合内容被阻止」的报错:- 如果站点启用HTTPS,检查页面中是否有加载HTTP协议的资源(比如图片、脚本),需将所有资源改为HTTPS或相对路径。
- 检查Moodle的
$CFG->wwwroot配置是否为正确的HTTPS地址,避免协议不匹配。
PHP错误日志排查
修改php.ini开启错误日志:error_log = "D:\php_errors.log" # 替换为实际路径 log_errors = On保存后重启Web服务,用Firefox访问站点,查看日志文件中的错误信息,定位具体报错(比如会话初始化失败、插件加载错误)。
浏览器兼容性与主题设置
- 确认Firefox版本为60及以上(Moodle 3.9的最低兼容版本),若版本过低,升级到最新稳定版。
- 进入「站点管理」→「外观」→「主题」,切换到默认主题(比如Boost)测试,排除第三方主题的兼容性问题。
问题3:远程管理员无法上传文件,本地服务器可正常上传
排查步骤:
上传目录权限检查
确认config.php中的$CFG->dataroot和$CFG->tempdir目录,给Web进程账号添加写入「修改」权限。远程上传时,文件会先暂存到temp目录,再移动到data目录,权限不足会导致上传失败。PHP上传参数配置
修改php.ini中的以下参数:file_uploads = On upload_max_filesize = 100M # 根据实际需求调整 post_max_size = 120M # 需大于upload_max_filesize max_execution_time = 300 # 上传大文件需延长超时时间 max_input_time = 300保存后重启Web服务,同时在Moodle「站点管理」→「安全」→「站点安全设置」中,将「最大上传大小」设置为与
upload_max_filesize匹配的值。网络与代理限制排查
- 检查服务器防火墙是否拦截了POST请求(文件上传使用POST方法),确保远程机器的POST请求能到达服务器。
- 如果站点使用反向代理(如Nginx),检查代理配置中的
client_max_body_size参数,需设置为大于上传文件的大小,避免代理截断请求。
Moodle权限与会话校验
- 进入「站点管理」→「用户」→「权限」→「定义角色」,确认管理员角色拥有「上传文件」「管理文件」等核心权限。
- 在远程机器的Firefox开发者工具中,查看「存储」→「Cookie」,确认
MoodleSessionCookie存在且未过期,避免会话丢失导致权限校验失败。
内容的提问来源于stack exchange,提问作者Lyrics Studio

