前置知识
- Windows 命令行基础(
cmd/ PowerShell) - 知道什么是 Web 服务器、什么是 CGI
- 至少跑过一个 PHP 页面
为什么 2020 年还在用 PHP
2010 年代后期,Go / Node.js / Python Web 框架方兴未艾,唱衰 PHP 的声音不断——“性能差”、“语法老”、“现代特性缺”。但 PHP 7.4(2019-11 发布)做了一次关键升级:
- PHP 7.0 vs 5.6 性能提升 2 倍(WordPress 主页 QPS 从 100 涨到 300+)
- OPcache 集成(字节码缓存默认开启)
- 类型属性(class 属性可以声明
int、string) - 箭头函数(
fn($x) => $x * 2) - 预加载(PHP 7.4 新特性,把框架文件预加载到 OPCache)
WordPress 占据全球 40%+ 的网站、Magento / Laravel 长期稳居主流——PHP 工程师的需求量在 2020 年依然巨大。学 PHP 7.4 是性价比最高的后端入门选择。
一、Windows 下 PHP 7.4 + Nginx 一体化搭建
1.1 下载三件套
| |
1.2 目录规划
| |
1.3 PHP 7.4 配置(php.ini)
把 php.ini-development 复制一份改名为 php.ini:
| |
1.4 Nginx 配置
编辑 nginx-1.18.0\conf\nginx.conf:
| |
1.5 启动脚本
start.bat(双击启动):
| |
stop.bat:
| |
1.6 验证
| |
新建 <PHP_SOFT_DIR>nginx\www\index.php:
| |
看到 PHP 7.4.6 配置页 = 成功。
二、Xdebug 远程调试
Xdebug 是 PHP 调试的事实标准——和 Java 的 JDWP、Python 的 pdb 一样,可以在 IDE 里打断点、单步执行、查看变量。
2.1 下载 Xdebug
打开 https://xdebug.org/download,选对应 PHP 版本的 dll:
- PHP 7.4 NTS x64 →
php_xdebug-2.9.5-7.4-vc15-nts-x86_64.dll - PHP 7.4 TS x64 →
php_xdebug-2.9.5-7.4-vc15-ts-x86_64.dll
⚠️ NTS / TS 一定要对(NTS = Non-Thread-Safe,TS = Thread-Safe)——错版本直接起不来。
放到 php-7.4.6\ext\ 目录下。
2.2 php.ini 启用 Xdebug
| |
2.3 IDEA / PhpStorm 配置
Settings → PHP:
| 字段 | 值 |
|---|---|
| PHP language level | 7.4 |
| CLI Interpreter | <PHP_SOFT_DIR>php-7.4.6\php.exe |
Settings → PHP → Debug:
- Xdebug
- Debug port:
9001
Settings → PHP → Debug → DBGp Proxy:
- IDE key:
PHPXDEBUG - Host:
127.0.0.1 - Port:
9000
Settings → PHP → Servers:
- Name:
php7.4 Server - Host:
127.0.0.1 - Port:
80 - Debugger:
Xdebug
PHP → Debug → Start Listening(点电话图标变绿 = 监听中)。
2.4 Chrome / Postman 触发断点
方法 1:Chrome 装 Xdebug helper 插件
- 打开插件设置 → IDE key 选
PHPXDEBUG - 访问
http://localhost/index.php→ IDE 自动中断
方法 2:Postman 加 Cookie
| |
或加 query string:
| |
2.5 Xdebug 高级功能
| |
三、常见错误速查
3.1 Call to undefined function curl_init()
| |
Windows 下还要确认 php-7.4.6\ext\php_curl.dll 存在、<PHP_SOFT_DIR>php-7.4.6 目录里有 libeay32.dll ssleay32.dll(PHP 7.4 自带)。
3.2 SQLSTATE[HY000] [2002] No connection could be made
PDO / mysqli 连不上 MySQL。检查项:
- MySQL 服务在跑(
net start mysql) localhostvs127.0.0.1—— MySQL 用 socket、127.0.0.1用 TCP,新版 MySQL 默认走 socket,PDO 报 2002- 端口(默认 3306)防火墙是否放行
| |
3.3 No input file specified.
Nginx 配置的 root 路径和 PHP 文件实际路径不一致。
| |
$document_root 和 fastcgi_param SCRIPT_FILENAME 路径要完全一致。
3.4 500 Internal Server Error
打开 php.ini 错误显示:
| |
重启 php-cgi,看浏览器错误 + log 文件。
3.5 502 Bad Gateway
Nginx 收不到 PHP-CGI 的响应——PHP-CGI 没启动或挂了:
| |
四、生产环境建议
本地调试用 php-cgi.exe + Nginx 够用,但生产绝不能用这套——php-cgi 是单进程、崩溃不会自启、并发上不去。
4.1 用 PHP-FPM 替代
Linux 上一律用 PHP-FPM(FastCGI Process Manager):
| |
4.2 用 Docker 跑 PHP
| |
4.3 性能调优清单
| 项 | 默认 | 建议 |
|---|---|---|
opcache.enable | 1 | 保持开启 |
opcache.memory_consumption | 128 | 256 |
opcache.max_accelerated_files | 10000 | 20000 |
pm.max_children (FPM) | 5 | nproc × 2 |
pm.start_servers | 2 | nproc × 1 |
request_terminate_timeout | 0 | 30s(防止慢请求占资源) |
五、2024 视角:PHP 8.3 升级与 EOL 提醒
⚠️ 重要时间线:PHP 7.4 已于 2022-11-28 正式 EOL(End Of Life),不再收到任何安全更新。本文 2020 年写于 7.4 时代,今天(2024+)继续使用 7.4 = 裸奔。强烈建议升级到 PHP 8.3(2023-11 发布,当前 active branch)。
5.1 PHP 7.4 → 8.x 升级成本
好消息:8.0/8.1/8.2/8.3 都是渐进式升级,几乎没有 breaking change:
| 版本 | 发布 | EOL | 升级成本 |
|---|---|---|---|
| 7.4 | 2019-11 | 2022-11(已 EOL) | — |
| 8.0 | 2020-11 | 2023-11 | 低(Named Args、Match、Attributes) |
| 8.1 | 2021-12 | 2025-12 | 中(Enums、Fibers、Readonly Properties) |
| 8.2 | 2022-12 | 2026-12 | 低(DNF Types、Constants in Traits) |
| 8.3 | 2023-11 | 2027-12 | 低(Typed Class Constants、#[\Override]) |
5.2 PHP 8.x 关键新特性(精选 6 个)
1. 命名参数(Named Arguments)—— 8.0
| |
2. Match 表达式 —— 8.0
| |
3. 枚举(Enums) —— 8.1
| |
4. 只读属性(Readonly Properties) —— 8.1
| |
5. 纤程(Fibers) —— 8.1(类似 Go goroutine 的简化版)
| |
实战意义:让 PHP 能写真正的协程,AmPHP 3 / Revolt / ReactPHP 都基于 Fibers 重写了事件循环。
6. 类型化类常量(Typed Class Constants) —— 8.3
| |
5.3 PHP 8.x 性能
| 指标 | 7.4 | 8.0 | 8.3 |
|---|---|---|---|
| WordPress 主页 QPS | 300 | 350 | 420+ |
| Symfony Welcome 页 QPS | 1.2k | 1.5k | 1.9k |
| 内存峰值(典型 Web 请求) | 12 MB | 11 MB | 9 MB |
| JIT 编译器 | 无 | tracing JIT(可选) | function JIT(默认更智能) |
8.3 的 JIT 对纯计算密集型任务(图像处理、数值计算、规则引擎)能再涨 1.5~3 倍。
5.4 7.4 → 8.3 升级路径(最短 4 步)
- PHPCompatibility 静态扫描:
composer require --dev phpcompatibility/phpcompatibility - 修 deprecation:
{改为{$var}、each()改foreach - CI 跑通:把 7.4 跑过的测试在 8.3 跑一遍
- 生产灰度:金丝雀 5% → 25% → 50% → 100%
参考工具:PHPStan 静态分析、Psalm、Rector(自动重构 7.4 → 8.x 代码)。
5.5 如果还在用 PHP 5.x / 7.0/7.1/7.2/7.3
危险——这些版本都 EOL:
| 版本 | EOL 时间 | 风险 |
|---|---|---|
| 5.6 | 2019-01 | 已知多个未修复漏洞 |
| 7.0 | 2019-01 | 同上 |
| 7.1 | 2019-12 | 同上 |
| 7.2 | 2020-11 | 同上 |
| 7.3 | 2021-12 | 同上 |
| 7.4 | 2022-11 | 最新 EOL,建议立即升级 |
| 8.0 | 2023-11 | 需升级到 8.1+ |
| 8.3 | 2027-12 | 当前推荐版本 |
结论:2024+ 新项目直接用 PHP 8.3;老项目至少升级到 8.1+(还有 1 年多支持),最迟 2025 年前完成 8.2/8.3 升级。
六、下一步
- PHP 8.3 现代特性(命名参数、Enums、Fibers、Readonly):PHP 8 迁移指南
- 框架:Laravel 11 / Symfony 7 / ThinkPHP 8——Laravel 仍是事实标准
- Composer:PHP 包管理——
composer require vendor/package - 测试:PHPUnit 11 + Mockery + Pest(PHPUnit 之上的现代语法糖)
- 静态分析:PHPStan / Psalm(类似 TypeScript 的 tsc)
- 协程:基于 Fibers 的 AmPHP 3 / Revolt
参考资料
- PHP 官方文档:https://www.php.net/docs.php
- Xdebug 官方文档:https://xdebug.org/docs/
- Nginx 官方文档:https://nginx.org/en/docs/
- PHP The Right Way(社区最佳实践):https://phptherightway.com/
- PHP 8.3 发布公告:https://www.php.net/releases/8.3/zh.php
