Administrator
Administrator
发布于 2026-07-16 / 0 阅读
0
0

WordPress 页面显示 PHP 源代码?一文解决 PHP-FPM 已启动但 PHP 不解析的问题

在部署 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

使配置生效。


五、验证是否配置成功

完成配置后,可以按以下步骤进行验证:

  1. 清除浏览器缓存(或使用无痕模式)。

  2. 重新访问网站,例如:

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

可以按照以下思路快速排查:

  1. 确认使用的是 Apache 还是 Nginx。

  2. 检查 Web 服务器是否配置了 PHP-FPM 转发规则。

  3. 确认 index.php 已加入默认首页。

  4. 检查 PHP-FPM 是否正常运行并监听 9000 端口。

  5. 重启服务并查看日志,验证配置是否生效。

掌握以上排查方法后,无论部署 WordPress、Laravel、ThinkPHP 还是其他 PHP 项目,都可以快速定位并解决 PHP 无法解析的问题。


评论