打开网易新闻 查看精彩图片

做 Web 安全的人,最后几乎都会走到一条路上:看代码、懂逻辑、找漏洞

而在这条路上,PHP 是很多人绕不过去的一站。

不少人学 PHP 语法时,总觉得太基础、太简单,甚至有点“没必要”。但真到了渗透测试、代码审计、漏洞分析现场,你会发现,很多高危漏洞的起点,恰恰就是这些最基础的东西:

  • PHP 代码到底在哪里执行?
  • 为什么浏览器里看不到 PHP 源码?
  • 为什么文件后缀一变,代码就不执行了?
  • 为什么少一个分号,整个页面直接报错?
  • 为什么注释有时候会影响代码测试和排错?

今天这篇文章,就从网络安全视角,把PHP 的基础语法重新讲一遍。不是死讲概念,而是结合代码和运行结果,讲清楚它在真实 Web 场景中的意义。

一、先弄明白:PHP 到底是前端还是后端?

这个问题看起来简单,但很多初学者一开始真容易混。

前端语言有哪些?

通常浏览器直接解析的内容,主要包括:

  • HTML
  • CSS
  • JavaScript

这些内容会被浏览器拿到之后直接解释执行,所以你在浏览器里“查看源代码”,通常是能看到这些东西的。

PHP 属于什么?

PHP 属于后端脚本语言

它不是在浏览器里跑,而是在服务器端执行
浏览器最终拿到的,不是 PHP 源码,而是 PHP 执行后的结果。

你可以这样理解:

浏览器负责“显示” 服务器负责“处理”

这也是为什么做 Web 安全时,分析 PHP 程序必须具备一点“后端思维”。

一个最简单的例子代码浏览器看到的结果

2

注意,浏览器看到的是 2,不是:

这说明计算过程已经在服务器端完成了,浏览器只拿到了最终结果。

二、PHP 的基本语法结构,先记住这两个标记

PHP 代码通常写在下面这对标记之间:

也就是说:

  • ?> 表示 PHP 代码结束

这是最标准、最常见的写法。

代码示例:Hello World运行结果

Hello World

这也是很多人第一次跑通 PHP 时最经典的一段代码。

三、一个页面里能不能写多个 PHP 代码块?

当然可以。

很多人刚开始以为一个页面只能写一段 PHP,其实完全不是。
只要语法正确,一个 .php 页面里可以放多个 PHP 代码块,也可以和 HTML 混着写。

示例:同一个页面中写两段 PHP

";
运行结果

Hello World 1Hello World 2

这在实际开发里很常见,比如:

  • 页头一段 PHP
  • 内容区一段 PHP
  • 页脚再来一段 PHP

从安全角度讲,你在审计代码时,也要习惯这种“HTML 和 PHP 交叉出现”的结构。

四、文件后缀为什么必须是 .php

这是一个非常基础、但又非常关键的点。

如果文件里写了 PHP 代码,但文件后缀是 .html,大多数情况下服务器不会把它当成 PHP 解析。
结果就是:

  • PHP 代码不会执行
  • 甚至可能被当作普通文本直接输出
正常情况:.php 文件可以执行文件名

index.php
代码浏览器结果

我是PHP执行后的结果
如果改成 .html 呢?文件名

index.html
代码常见结果

或者页面直接没有任何 PHP 执行效果。

原因很简单:

服务器通常只会把 .php 后缀的文件交给 PHP 解释器处理。

这也是文件上传漏洞里,为什么攻击者总是想办法让上传文件被“当成 PHP 解析”的根本原因。

五、PHP 和 HTML 能不能混着写?

不但能,而且这恰恰是 PHP 最常见的使用方式。

真实业务页面里,通常不会只有纯 PHP,更多时候是:

  • HTML 负责页面结构
  • PHP 负责输出动态内容
示例:HTML 和 PHP 混合使用

charset="UTF-8">PHP Demo我的第一个 PHP 页面
运行结果

我的第一个 PHP 页面Hello World

页面中的标题

是 HTML 输出的,
而 Hello World 是 PHP 在服务器执行后生成的内容。
浏览器里能看到 PHP 源码吗?

正常情况下,看不到。

你在浏览器里查看页面源代码,通常只能看到类似这样的结果:

PHP Demo我的第一个 PHP 页面Hello World

会发现:

  • HTML 标签还在
  • PHP 代码没了
  • PHP 只留下了执行结果

这就是后端语言和前端语言最大的区别之一。

六、别小看分号:少一个,页面就可能直接报错

初学者最常见的语法错误之一,就是漏掉分号

在 PHP 中,大多数语句都必须以英文分号 ; 结尾。
不是中文分号,也不是不写。

正确示例运行结果

HelloAA
错误示例:漏掉分号常见报错结果

Parse error: syntax error, unexpected variable "$a" in /var/www/html/test.php on line 3

这个错误提示的意思大致就是:

  • 语法错误
  • 在第 3 行附近发现了不该出现的变量 $a
  • 真正原因往往是上一行少了分号
还有一个坑:中文分号

下面这种写法也不行:

注意最后那个是中文输入法下的分号。
PHP 解释器不认这个,照样报错。

常见报错

Parse error: syntax error, unexpected token "echo"

所以这个细节一定要记住:

PHP 里语句结束符,必须是英文半角分号 ;
七、变量怎么写?这是后面所有业务逻辑的基础

PHP 变量以 $ 开头,这一点很有辨识度。

示例:定义变量并输出运行结果

AA
再来一个组合示例

";echo "角色:" . $role;?>
运行结果

用户名:admin角色:administrator

为什么这个基础知识对安全人员重要?

因为你在看代码审计时,很多漏洞点都和变量来源有关:

  • $id = $_GET['id'];
  • $file = $_POST['file'];
  • $cmd = $_REQUEST['cmd'];

只要变量能被用户控制,就必须警惕后续的使用方式。

八、注释不是摆设,安全测试时经常用得上

PHP 里常用两种注释:

1、单行注释

// 这是单行注释
2、多行注释

/*这是多行注释这里的内容不会执行*/
示例:单行注释

";// echo "第二行
";echo "第三行";?>
运行结果

第一行第三行

因为第二行被注释掉了,所以不会执行。

示例:多行注释

";echo "这段不会执行
";echo "这段也不会执行
";echo "结束";?>
运行结果

开始结束
注释在安全工作里有什么用?

很多人只知道注释是“给人看的”,其实在安全分析里,注释非常有价值:

1. 阅读业务逻辑

开发者常常会在代码里写下注释说明,比如:

  • 这个函数是做登录校验的
  • 这里处理上传文件
  • 这里拼接 SQL
  • 这里校验管理员权限

这些信息对审计人员很有帮助。

2. 临时屏蔽代码做测试

调试漏洞、复现问题时,经常需要先注释掉一段逻辑,看程序行为有什么变化。

3. 发现敏感残留信息

真实项目里,有时注释里还会残留:

  • 测试账号密码
  • 数据库地址
  • 接口说明
  • 历史逻辑

这些内容有时候比代码本身还敏感。

九、HTML 注释和 PHP 注释不要混用

这是新手常犯的错误。

HTML 注释写法PHP 注释写法

// 这是PHP单行注释

或者:

/* 这是PHP多行注释 */
错误示例

有人会把 PHP 代码写成这样:

?>

这不是规范的 PHP 注释写法,容易引发解析问题。
该用哪种注释,就用哪种,不要混着来。

十、为什么浏览器里“查看源代码”看不到 PHP?

这个问题在安全场景里非常重要。

因为很多刚接触 Web 的同学会有错觉:
“既然页面是服务器发给我的,那服务器代码是不是也能看到?”

实际上正常情况下你看到的是:

  • HTML
  • CSS
  • JavaScript
  • PHP 执行后的输出内容

而不是 PHP 程序本身。

示例服务器上的 PHP 文件

Hello World";?>
浏览器查看源代码时看到的内容

Hello World

这说明:

  • PHP 在服务端已经执行完了
  • 浏览器拿到的是结果,不是源码

这也是很多源码泄露漏洞为什么危险的原因。
因为一旦服务器配置错误,PHP 文件没被正确解析,而是被当成文本下载,攻击者就可能直接拿到源代码。

十一、从安全角度看,这些基础语法为什么很重要?

很多人学语法时觉得琐碎,但你做网络安全,必须把这些“基础细节”和“漏洞成因”连起来。

1. 后缀名影响解析

为什么上传一个 .php 文件危险?
因为服务器可能会把它当脚本执行。

2. 变量决定输入来源

为什么 $_GET、$_POST 危险?
因为这些变量往往来自用户,可控输入一旦进入危险函数,就可能触发漏洞。

3. 语句错误会暴露信息

为什么报错信息不能随便对外显示?
因为一个分号写错,报错页面可能直接泄露:

  • 服务器路径
  • 文件名
  • 代码行号
  • 组件版本

这些都是攻击者喜欢的信息。

4. 注释可能带来敏感泄露

为什么代码审计时要看注释?
因为很多开发者习惯把调试信息、账号、路径写在注释里。

十二、再给你一个综合示例:把基础语法串起来

下面这段代码,基本把今天讲的几个点串起来了。

综合示例

PHP基础语法示例PHP基础语法演示echo "年龄:" . $age . "
";下面这行代码被注释掉了,所以不会执行// echo "这是一行测试代码";
这是普通的HTML内容。
运行结果

PHP基础语法演示用户名:admin年龄:18这是普通的HTML内容。
浏览器查看源代码时常见效果

PHP基础语法示例PHP基础语法演示用户名:admin
年龄:18
这是普通的HTML内容。

PHP 注释、变量定义这些内容都不会原样出现在浏览器里。

十三、初学 PHP 语法时,最容易踩的几个坑

最后顺手帮你避几个坑。

1. 文件后缀写错

写了 PHP 代码,却保存成 .html,结果死活不执行。

2. 路径访问错了

你改的是一个文件,浏览器访问的是另一个文件,结果看起来像“代码没生效”。

3. 漏掉分号

尤其是变量赋值、连续 echo 输出时,非常容易出错。

4. 引号不匹配

字符串一定要注意单双引号成对出现。

5. 中文符号混进代码

中文分号、中文引号、中文括号,都是高频报错源头。

6. 把 HTML 注释当成 PHP 注释

两套语法不是一个体系,不能混着用。

十四、总结

如果你是从网络安全角度学 PHP,那今天这部分基础语法千万别跳过去。
因为后面你看到的很多漏洞代码,其实都是在这些基础之上长出来的。

你至少要彻底搞明白下面几件事:

  • PHP 是服务器端执行的语言
  • 浏览器拿到的是执行结果,不是 PHP 源码
  • PHP 代码通常写在 中
  • 一个页面里可以有多个 PHP 代码块
  • 含有 PHP 代码的文件通常要用 .php 后缀
  • 每条 PHP 语句基本都要以英文分号结束
  • 注释分为单行注释和多行注释
  • HTML 和 PHP 可以混合使用,但注释语法不能混用

别觉得这些只是语法小知识。
在真实攻防里,它们对应的是:

  • 文件解析
  • 源码保护
  • 错误信息泄露
  • 用户输入流向
  • 调试与测试方法

基础越扎实,后面你看漏洞、做审计、写 PoC 才越顺。