PHP文件在浏览器中显示源码,是因为Web服务器未将其交由PHP解释器执行,而是当作纯文本返回;正常情况应返回text/html等执行结果,源码泄露表明配置错误或PHP未启用。

不能通过 HTTP 直接“打开”远程服务器上的 .php 文件来查看源码——浏览器访问 http://example.com/script.php 时,服务器只会执行它并返回 HTML/JSON 等输出结果,除非配置出错,否则你永远看不到原始 PHP 代码。
为什么浏览器里点开 PHP 链接看不到源码?
因为 Web 服务器(Apache/Nginx)默认把 .php 文件交给 PHP 解释器执行,而不是当作纯文本返回。这是设计使然,也是基本安全要求。
常见误解是以为“URL 能访问 = 源码可读”,但真实情况是:
- 正常响应:HTTP 状态码 200 +
Content-Type: text/html(或 JSON、空响应等)→ 说明 PHP 已执行 - 异常泄露:HTTP 状态码 200 +
Content-Type: text/plain或直接显示<?php ...→ 表示 PHP 未启用或配置失效,属于严重安全隐患
真正能查看远程 PHP 源码的合法方式
前提是你有对应权限。没有权限时,任何尝试读取源码的行为都属越权,技术上可能违法。
立即学习“PHP免费学习笔记(深入)”;
可行路径只有以下几种:
-
SSH 登录后用命令行查看:比如
ssh user@server→cd /var/www/html→cat index.php或less config.php -
SFTP/FTP 下载到本地再打开:用 FileZilla 连接,导航到
public_html或htdocs目录,右键下载.php文件,用 VS Code 打开 -
主机控制面板里的文件管理器:登录 cPanel/Plesk,进“文件管理器”,找到对应
.php文件,点“编辑”或“查看”(注意:部分面板会禁用直接编辑,仅允许查看) -
Git 仓库克隆(如果开源且公开):确认项目托管在 GitHub/GitLab,运行
git clone https://github.com/user/repo.git,然后本地查源码
哪些“看似能看”的方法其实不可靠或危险?
这些操作要么无效,要么暴露风险,不建议尝试:
-
?page=php://filter/read=convert.base64-encode/resource=index.php:仅在存在未过滤的include()参数时才可能生效,属于漏洞利用范畴,无授权即违规 - 浏览器按
Ctrl+U或右键“查看网页源代码”:看到的是 PHP 执行后的 HTML 输出,不是 PHP 源码 - 用
file_get_contents('http://...')或 cURL 抓取 URL:返回的仍是执行结果,不是源文件内容(除非服务器配置错误) - 依赖
ReflectionClass获取路径:只能查已加载类的物理路径,对普通脚本文件(如index.php)无效,且需该类已被require过
最常被忽略的一点:即使你有权限,也别在生产环境随便开 expose_php = On 或改 php.ini 允许远程文件包含——这些不是“查看源码”的手段,而是制造攻击面。真要调试,走 SSH 或 SFTP,干净、可控、留痕。



















