1. 问题现象与背景解析
最近在维护一个PHP站点时遇到个典型问题:访问.php页面时浏览器直接显示源代码,而不是渲染后的HTML内容。这种情况在API开发场景中尤为常见——当开发者将原本设计为Web页面的PHP文件临时改造成API接口时,往往会忽略MIME类型的正确配置。服务器在接收到请求后,没有正确识别该用text/html还是application/json来响应,导致PHP解释器未被触发,源代码被原样输出。
这种故障看似简单,实则涉及服务器配置、HTTP协议、PHP运行机制三个层面的协同工作。正常情况下,当请求到达服务器时,web服务器(如Apache/Nginx)会根据文件扩展名(.php)调用PHP-FPM或mod_php进行处理,PHP引擎执行完脚本后,web服务器会自动添加Content-Type: text/html头信息。但当这个链条的任一环节出现偏差,就会出现源码泄露。
2. 核心原因深度排查
2.1 服务器配置检查清单
首先用这个快速检查表定位问题层级:
-
基础配置验证
- 检查
/etc/nginx/nginx.conf中是否包含PHP处理配置:nginx复制location ~ \.php$ { fastcgi_pass unix:/run/php/php8.1-fpm.sock; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } - 确认PHP-FPM服务状态:
systemctl status php8.1-fpm
- 检查
-
MIME类型检测
- 在Chrome开发者工具Network标签查看响应头:
- 缺失
Content-Type或值为text/plain都属异常 - API接口应显式设置
header('Content-Type: application/json')
- 缺失
- 在Chrome开发者工具Network标签查看响应头:
-
文件权限诊断
- PHP文件应具有可读权限:
chmod 644 *.php - 目录需要执行
- PHP文件应具有可读权限:
解锁全文
加入我们的会员,获取最新、最热、最精彩的开发者技术内容