Docker环境下Apache部署PHP站点仅显示文本无法加载CSS、JS资源
问题排查结论
根本原因
site.php未被正常引入,该文件中定义的HTML头部(包含CSS引用、基础页面结构)完全没有输出,浏览器无法识别完整的HTML文档结构,因此不会主动加载页面后续的CSS、JS等静态资源,也不会产生对应的加载/报错日志。
具体排查方向
检查Apache自定义配置的DocumentRoot路径
Dockerfile中复制的deploy/apache/default.conf如果DocumentRoot参数值不是/var/www/html,$_SERVER['DOCUMENT_ROOT']会返回配置的其他路径,导致$_SERVER['DOCUMENT_ROOT']."/site.php"指向的路径下不存在对应文件,引入失败。
可在PHP代码中加入<?php echo $_SERVER['DOCUMENT_ROOT']; ?>打印该值,确认是否和站点文件实际存放的/var/www/html路径一致。开启PHP错误显示验证引入状态
默认关闭前端错误输出的配置会掩盖文件引入错误,可在代码开头临时加入以下配置,即可直观看到是否存在文件引入报错:
<?php ini_set('display_errors', 1); error_reporting(E_ALL); ?>
如果出现Warning: include(xxx/site.php): failed to open stream: No such file or directory类报错,即可直接确认是路径匹配问题。
- 替换为更稳定的文件引入写法
避免依赖$_SERVER['DOCUMENT_ROOT']这类受服务端配置影响的变量,改用基于当前文件路径的写法引入,兼容性更高:
include __DIR__ . '/site.php'; include __DIR__ . '/inc/functions.php';
粘贴内容正常的原因
直接粘贴site.php内容后,无需走文件引入逻辑,文件内的HTML头部、CSS引用等内容会正常输出,浏览器识别到完整HTML结构后就会正常加载后续静态资源。
内容的提问来源于stack exchange,提问作者Murakami
相关产品推荐
相关产品推荐

