这是一个非常典型的服务器配置问题,根本原因在于:Web服务器(如Apache或Nginx)没有正确配置来处理和执行PHP文件,而是将其当作普通的文本文件直接输出。

下面我将为您详细解释原因,并提供从易到难、从简单到完整的解决方案。
问题根源分析
当您访问一个 .php 结尾的页面时,正常的流程是:
- 浏览器向服务器请求
index.php。 - 服务器上的PHP引擎接收到这个请求。
- PHP引擎执行
index.php文件中的代码,连接数据库,调用织梦的模板引擎,最终生成纯HTML代码。 - 服务器将生成的HTML代码返回给浏览器。
- 浏览器解析并显示HTML页面。
而您看到源代码,说明流程在第2步就中断了,服务器直接把 index.php 文件里的 <?php ... ?> 代码原封不动地发送给了浏览器,这通常由以下几种情况引起:
- PHP未安装或未启用:服务器上根本没有安装PHP,或者PHP模块没有被Web服务器加载。
- Web服务器配置错误:Apache或Nginx的配置文件中没有正确地将
.php文件交给PHP处理器。 - 文件上传错误:您通过FTP或面板上传网站文件时,选择了“ASCII”模式,导致PHP文件被损坏,服务器无法识别。
- 服务器环境问题:服务器环境(如宝塔、phpStudy等)配置有误,导致PHP服务异常。
解决方案(请按顺序尝试)
第一步:检查文件上传模式(最常见且最易解决)
这是新手最容易犯的错误,请检查您是用什么工具上传网站的。

-
FTP工具(如FileZilla):
- 请确保您在上传文件时,传输模式设置为 “二进制” (Binary) 或 “自动” (Auto)。
- 绝对不要使用“ASCII”模式上传PHP文件,ASCII模式是用来传输纯文本文件的(如
.txt,.html,.css),它会破坏PHP文件的格式,导致服务器无法解析。 - 操作:在FileZilla等工具中,通常可以在传输设置里找到这个选项,或者在上传前手动选择传输模式。
-
面板(如宝塔面板):
在宝塔面板的“文件”管理器中,直接拖拽或上传文件即可,面板通常会自动处理正确的编码,无需手动设置。
完成这一步后,清空浏览器缓存,刷新页面,看看问题是否解决。

第二步:检查服务器环境配置
如果第一步无效,那么问题出在服务器本身,这里我们分两种最常见的服务器环境来讲解:Nginx 和 Apache,您需要登录您的服务器管理面板(如阿里云ECS、腾讯云CVM、宝塔面板等)来修改配置。
使用 Nginx 服务器
Nginx本身不处理PHP,它需要通过 fastcgi_pass 指令将PHP请求转发给PHP-FPM进程。
-
找到配置文件:通常在
/usr/local/nginx/conf/vhost/目录下,找到您网站的配置文件(yourdomain.com.conf)。 -
检查
server块:在配置文件中找到server块,确保有类似下面的配置来处理PHP请求:server { listen 80; server_name yourdomain.com www.yourdomain.com; root /www/wwwroot/yourdomain.com; # 您的网站根目录 # ... 其他配置 ... # 关键部分:处理PHP文件 location ~ \.php$ { # 确保这个root和上面server的root一致 root /www/wwwroot/yourdomain.com; fastcgi_pass 127.0.0.1:9000; # 或者是 unix:/tmp/php-cgi.sock; 具体看您的PHP-FPM配置 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } -
检查关键点:
root路径是否正确指向您的网站根目录。fastcgi_pass的地址和端口是否正确,这个地址和端口必须与您服务器上运行的 PHP-FPM 的监听地址一致,您可以在PHP-FPM的配置文件(通常是/usr/local/php/etc/php-fpm.conf或在www.conf里)中找到listen = 127.0.0.1:9000或listen = /tmp/php-cgi.sock。fastcgi_param中的$document_root变量非常重要,它确保了SCRIPT_FILENAME是完整的绝对路径。
-
保存并重启:
- 保存Nginx配置文件。
- 在终端执行
nginx -t检查配置语法是否正确。 - 执行
nginx -s reload重载Nginx配置。 - 请确保您的PHP-FPM服务正在运行。
使用 Apache 服务器
Apache通常通过 mod_php 模块(集成式)或 mod_proxy_fcgi(与PHP-FPM配合)来处理PHP。
-
检查
.htaccess文件:-
进入您网站根目录,检查是否存在
.htaccess文件。 -
确保文件中没有被错误的规则阻止了PHP的执行,一个标准的织梦
.htaccess文件开头部分通常是:<IfModule mod_rewrite.c> RewriteEngine On RewriteRule ^(dede|data|special|templets|include|plus|static|images|uploads)/(.*) - [L] RewriteRule ^(.*)-htm-(.*)$ $1.php?$2 [L] RewriteRule ^(.*)/show-([0-9]+)\.html$ $1/show.php?gid=$2 [L] RewriteRule ^(.*)/list-([0-9]+)\.html$ $1/list.php?tid=$2 [L] RewriteRule ^(.*)/type-([0-9]+)\.html$ $1/type.php?tid=$2 [L] RewriteRule ^(.*)/special-([0-9]+)\.html$ $1/special.php?tid=$2 [L] RewriteRule ^(.*)/info-([0-9]+)\.html$ $1/info.php?aid=$2 [L] RewriteRule ^(.*)/index.html$ $1/index.php [L] </IfModule>
-
检查是否有类似
php_flag engine off这样的错误指令,如果有,请删除它。
-
-
检查
httpd.conf主配置文件:- 您可能需要检查Apache的主配置文件(通常是
/etc/httpd/conf/httpd.conf或/etc/apache2/apache2.conf)。 - 确保加载了PHP模块,对于集成式PHP(PHP7+),通常是这样:
LoadModule php7_module modules/libphp7.so
- 确保文件类型关联正确,找到
AddHandler指令,应该有类似下面的一行:AddHandler application/x-httpd-php .php
- 您可能需要检查Apache的主配置文件(通常是
-
保存并重启:
- 保存配置文件。
- 执行
systemctl restart httpd(CentOS) 或systemctl restart apache2(Debian/Ubuntu) 来重启Apache服务。
第三步:使用诊断工具
如果您不熟悉服务器配置,可以使用一些自动化工具来诊断。
-
宝塔面板:
- 进入您的网站设置。
- 在“网站目录”或“伪静态”设置中,宝塔通常会提供织梦CMS的伪静态规则,一键应用即可。
- 在“软件商店”中,确保您的PHP版本和Nginx/Apache版本都是正常运行的,可以尝试“重置”或“重启”PHP服务。
-
在线PHP信息页:
- 在您的网站根目录创建一个名为
info.php的文件,内容只有一行:<?php phpinfo(); ?>
- 然后通过浏览器访问
http://您的域名/info.php。 - 如果这个页面能正常显示PHP的详细信息,说明您的PHP环境是正常的,问题很可能出在Nginx/Apache的某个具体配置上(如上文提到的
fastcgi_param或.htaccess)。 - 如果这个页面也显示源代码,那说明PHP引擎根本没有被调用,问题更严重,需要从PHP-FPM和Web服务器的连接开始排查。
- 在您的网站根目录创建一个名为
总结与排查流程建议
- 先简单:检查文件上传模式,确保是二进制。
- 再检查:访问
info.php页面,判断PHP是否可用。 - 后配置:
- 如果是 Nginx,重点检查
server块中的location ~ \.php$配置,特别是fastcgi_param和fastcgi_pass。 - 如果是 Apache,重点检查
.htaccess文件和主配置文件中的LoadModule和AddHandler。
- 如果是 Nginx,重点检查
- 最后重启:修改任何配置后,务必重启相应的服务(Nginx/Apache/PHP-FPM)并清空浏览器缓存再测试。
如果以上步骤您操作起来有困难,建议直接联系您的服务器提供商或主机商的技术支持,他们通常能快速定位并解决这个问题,因为他们最清楚服务器环境的配置细节。
