在部署 WordPress、Discuz 或其他 PHP 网站时,很多人都会遇到这样一个问题:
PHP-FPM 服务已经正常启动,但访问网站时浏览器却直接显示 PHP 源代码,而不是执行 PHP 程序。
例如访问:
http://服务器IP/wordpress/wp-admin/install.php
页面却出现大量 <?php ... ?> 代码,而不是 WordPress 安装界面。
这说明 PHP-FPM 本身没有问题,真正的问题在于 Web 服务器(Apache 或 Nginx)并没有把 PHP 文件交给 PHP-FPM 处理。
本文将介绍如何快速定位问题并完成配置。
一、为什么会显示 PHP 源代码?
PHP 的工作流程实际上分为两个部分:
Web 服务器(Apache / Nginx):负责接收浏览器请求。
PHP-FPM:负责解释并执行 PHP 代码。
正常访问流程如下:
浏览器
│
▼
Apache / Nginx
│
▼
PHP-FPM
│
▼
执行 PHP
│
▼
返回 HTML 页面
如果 Web 服务器没有将 .php 文件转发给 PHP-FPM,那么它会把 PHP 文件当作普通文本直接返回给浏览器,因此页面就会显示完整的 PHP 源代码。
因此,即使 PHP-FPM 已经启动,没有配置 PHP 转发规则,PHP 页面仍然无法正常解析。
二、确认当前使用的是 Apache 还是 Nginx
首先需要确认当前到底是哪种 Web 服务器在提供服务。
执行以下命令:
ss -tlnp | grep :80
根据输出结果判断:
如果最后一列显示 httpd,说明使用的是 Apache。
如果最后一列显示 nginx,说明使用的是 Nginx。
根据实际情况选择对应的配置方法。
三、Apache 配置 PHP-FPM
如果系统使用的是 Apache,需要为 Apache 添加 PHP-FPM 转发规则。
1. 编辑 Apache 配置文件
通常配置文件位于:
vi /etc/httpd/conf/httpd.conf
2. 添加 PHP 解析规则
在配置文件末尾,或者对应的 <VirtualHost> 配置块中,加入以下内容:
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
该配置表示:
当 Apache 遇到
.php文件时,将请求转发给本机127.0.0.1:9000上运行的 PHP-FPM 服务。
3. 配置默认首页
找到 DirectoryIndex 配置,确认包含 index.php:
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
否则访问目录时,Apache 不会优先加载 index.php。
4. 重启 Apache
修改完成后执行:
systemctl restart httpd
四、Nginx 配置 PHP-FPM
如果使用的是 Nginx,则需要在网站对应的 server 配置中添加 PHP 解析规则。
1. 编辑 Nginx 配置文件
常见配置文件位置:
vi /etc/nginx/nginx.conf
或者:
vi /etc/nginx/conf.d/default.conf
根据实际环境进行修改。
2. 配置 PHP 转发
找到对应的 server {} 配置块,并加入如下内容:
server {
listen 80;
server_name localhost;
# 网站根目录(请根据实际部署路径修改)
root /usr/share/nginx/html/wordpress;
index index.php index.html index.htm;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
注意:
root必须修改为自己网站的实际目录,例如:/var/www/html或
/usr/share/nginx/html/wordpress
3. 检查配置
修改完成后先不要急着重启,建议先检查配置文件是否存在语法错误:
nginx -t
如果看到类似输出:
syntax is ok
test is successful
说明配置正确。
4. 重启 Nginx
执行:
systemctl restart nginx
使配置生效。
五、验证是否配置成功
完成配置后,可以按以下步骤进行验证:
清除浏览器缓存(或使用无痕模式)。
重新访问网站,例如:
http://服务器IP/wordpress/wp-admin/install.php
如果能够正常进入 WordPress 安装页面,而不是显示 PHP 源代码,则说明 PHP 已成功解析。
六、常见问题排查
如果仍然无法解析 PHP,可以继续检查以下几项。
1. PHP-FPM 是否正常运行
查看服务状态:
systemctl status php-fpm
如果未运行,可启动服务:
systemctl start php-fpm
systemctl enable php-fpm
2. PHP-FPM 是否监听 9000 端口
执行:
ss -lntp | grep 9000
正常情况下应看到类似输出:
LISTEN 0 128 127.0.0.1:9000
若没有监听,需要检查 PHP-FPM 配置文件中的监听地址(listen)。
3. 防火墙或 SELinux 是否影响访问
如果 Web 服务器与 PHP-FPM 通信异常,可以临时关闭防火墙或检查 SELinux 配置,确认是否阻止了 FastCGI 通信。
4. 查看错误日志
Nginx:
tail -f /var/log/nginx/error.log
Apache:
tail -f /var/log/httpd/error_log
PHP-FPM:
tail -f /var/log/php-fpm/error.log
日志通常能够提供更明确的报错信息,是定位问题的重要依据。
总结
当浏览器直接显示 PHP 源代码时,问题通常并不在 PHP-FPM,而是在 Web 服务器没有将 .php 请求转发给 PHP-FPM。
可以按照以下思路快速排查:
确认使用的是 Apache 还是 Nginx。
检查 Web 服务器是否配置了 PHP-FPM 转发规则。
确认
index.php已加入默认首页。检查 PHP-FPM 是否正常运行并监听 9000 端口。
重启服务并查看日志,验证配置是否生效。
掌握以上排查方法后,无论部署 WordPress、Laravel、ThinkPHP 还是其他 PHP 项目,都可以快速定位并解决 PHP 无法解析的问题。