PHP 简介
PHP 的历史、执行流程、以及它在 Web 里的位置。
Key PointsPHP 的核心竞争力是「请求-执行-销毁」模型:没有内存泄漏,也不需考虑并发。
执行流程
Text
浏览器 ──HTTP──▶ Nginx
│ 匹配 .php,交给 PHP-FPM
▼
PHP-FPM(常驻进程池)
│ 取一个空闲 worker
▼
PHP 解释器
│ 1. 读 .php 文件
│ 2. 编译成 opcode(有 opcache 就复用)
│ 3. 执行,输出 HTML
▼
返回给 Nginx ──▶ 浏览器Key point: every request starts from scratch. Globals, class definitions and connections are all destroyed at the end. The upside is no cross-request data leaks and no thread-safety concerns; the cost is rebuilding context each time.
和别的语言比
| Aspect | PHP | Node.js | Java |
|---|---|---|---|
| 执行模型 | 请求-销毁 | 常驻事件循环 | 常驻 JVM |
| 并发 | 多进程(FPM) | 单线程异步 | 多线程 |
| 内存泄漏 | 几乎不可能 | 需注意 | 需注意 |
| 启动成本 | 每请求重建 | 一次 | 一次 |
| 上手难度 | 低 | 中 | 高 |
第一个页面
PHP
<?php
// index.php
$visits = (int) ($_COOKIE['visits'] ?? 0) + 1;
setcookie('visits', (string) $visits, time() + 86400);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>示例</title></head>
<body>
<h1>你好,这是第 <?= $visits ?> 次访问</h1>
<p>服务器时间:<?= date('Y-m-d H:i:s') ?></p>
</body>
</html>Output
你好,这是第 3 次访问
服务器时间:2026-10-31 11:20:44<?= $x ?> is shorthand for <?php echo $x; ?> and is everywhere in templates. It works even with short_open_tag off — <?= has been always-on since PHP 5.4.
为什么还在用
- 部署简单 —— 上传文件就能跑,不需要编译打包
- 生态成熟 —— WordPress、Laravel、大量 CMS 和电商系统
- 招人容易 —— 会 PHP 的开发者基数大
- 共享主机友好 —— 几乎所有虚拟主机都支持
PHP's bottleneck is usually the database and I/O, not the language. With opcache, 8.x performance is close to compiled languages — do not decide based on the old "PHP is slow" impression.
执行流程
Text
浏览器 ──HTTP──▶ Nginx
│ 匹配 .php,交给 PHP-FPM
▼
PHP-FPM(常驻进程池)
│ 取一个空闲 worker
▼
PHP 解释器
│ 1. 读 .php 文件
│ 2. 编译成 opcode(有 opcache 就复用)
│ 3. 执行,输出 HTML
▼
返回给 Nginx ──▶ 浏览器关键点:每个请求都从零开始。全局变量、类定义、数据库连接,请求结束后全部销毁。好处是不会有「上一个请求的数据泄漏到下一个请求」,也不需要处理线程安全;代价是每个请求都要重建上下文。
和别的语言比
| 对比项 | PHP | Node.js | Java |
|---|---|---|---|
| 执行模型 | 请求-销毁 | 常驻事件循环 | 常驻 JVM |
| 并发 | 多进程(FPM) | 单线程异步 | 多线程 |
| 内存泄漏 | 几乎不可能 | 需注意 | 需注意 |
| 启动成本 | 每请求重建 | 一次 | 一次 |
| 上手难度 | 低 | 中 | 高 |
第一个页面
PHP
<?php
// index.php
$visits = (int) ($_COOKIE['visits'] ?? 0) + 1;
setcookie('visits', (string) $visits, time() + 86400);
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="utf-8"><title>示例</title></head>
<body>
<h1>你好,这是第 <?= $visits ?> 次访问</h1>
<p>服务器时间:<?= date('Y-m-d H:i:s') ?></p>
</body>
</html>Output
你好,这是第 3 次访问
服务器时间:2026-10-31 11:20:44<?= $x ?> 是 <?php echo $x; ?> 的简写,模板里用得极多。注意它在 php.ini 的 short_open_tag 关闭时也能用——<?= 从 PHP 5.4 起永远可用。
为什么还在用
- 部署简单 —— 上传文件就能跑,不需要编译打包
- 生态成熟 —— WordPress、Laravel、大量 CMS 和电商系统
- 招人容易 —— 会 PHP 的开发者基数大
- 共享主机友好 —— 几乎所有虚拟主机都支持
PHP 的性能瓶颈通常在数据库和 I/O,不在语言本身。开启 opcache 后 8.x 的性能已经接近很多编译型语言的水平,不要凭「PHP 慢」这个旧印象做技术选型。