新手用XAMPP,5分钟即可运行phpinfo();进阶用Docker解决环境一致性问题;macOS用户优先用Homebrew一键安装PHP及扩展;手动编译仅适合深入理解Apache模块加载机制。

直接说结论:新手用 XAMPP,进阶用 Docker,macOS 用户优先试 Homebrew,别碰纯手动编译除非你真想搞懂 Apache 加载模块的底层逻辑。
XAMPP 装完 5 分钟就能跑 phpinfo();Docker 能解决“在我机器上能跑”的协作灾难;Homebrew 在 macOS 上装 PHP + 扩展 + FPM 是一条命令的事;而手动配 Apache + PHP 模块,90% 的失败都卡在 php8apache2_4.dll 路径写错、PHPIniDir 指向了错误目录,或扩展没启用就重启服务。
为什么 XAMPP 是新手唯一合理起点
它不是“简陋”,而是把所有易错点提前封死了:Apache 和 PHP 版本严格匹配、httpd.conf 已预设好 AddHandler application/x-httpd-php .php、php.ini 默认开启 display_errors = On,连 mysqli 和 curl 都默认启用。
常见错误现象:
立即学习“PHP免费学习笔记(深入)”;
- 访问
http://localhost显示空白页 → Apache 没启动,或端口被 Skype/IIS 占用(改 XAMPP 控制面板里 Apache 的 Port 为8080) -
http://localhost/info.php下载文件而不是执行 →.php后缀没被识别,检查 XAMPP 控制面板中 Apache 状态是否为Running,不是Stopped - 调用
mysqli_connect()报错 Class 'mysqli' not found → 没重启 Apache(改了php.ini必须重启服务才生效)
实操建议:
- 安装路径选
C: mpp,别用中文或空格路径,否则LoadModule会静默失败 - 测试文件就放
C: mpphtdocsinfo.php,内容只写<?php phpinfo(); ?>,别加任何 HTML - 需要改配置?直接点 XAMPP 控制面板里 Apache 行的
Config → php.ini,比自己找路径靠谱十倍
Docker 部署时最常漏掉的三件事
很多人写完 docker-compose.yml 就跑 docker-compose up -d,结果浏览器打不开,或者连不上数据库——不是镜像问题,是配置断层。
容易踩的坑:
-
web服务依赖db,但没加depends_on+healthcheck→ PHP 容器启动太快,MySQL 还没初始化完,PDO 直接报Connection refused -
php-fpm容器里没装pdo_mysql扩展 →php -m | grep pdo看不到,连本地mysql命令都执行不了 - 宿主机
/etc/hosts没加127.0.0.1 myapp.local,却在nginx.conf里写了server_name myapp.local→ 浏览器根本发不出请求
实操建议:
- 用官方镜像
php:8.2-apache,别自己从debian:bookworm一层层编译,浪费时间且易出错 - 数据库连接地址写
host: db(不是127.0.0.1),因为容器间靠服务名通信 - 第一次启动后,进容器执行
docker exec -it <container_id> php -m | grep mysqli,确认扩展真实加载
macOS 上 Homebrew 装 PHP 的隐藏陷阱
Homebrew 装得快,但默认不启 php-fpm,也不自动配 nginx 或 apache,新手以为 php -v 成功就万事大吉,结果 http://localhost 404。
关键差异:
-
brew install php装的是 CLI + FPM,**不带 Web 服务器**;要跑网页必须另配 Nginx 或 Apache - PHP 配置文件路径是
/opt/homebrew/etc/php/8.2/php.ini(Apple Silicon)或/usr/local/etc/php/8.2/php.ini(Intel),和 XAMPP 完全不同 -
extension_dir默认指向/opt/homebrew/lib/php/pecl/20220829这类带 ABI 号的路径,手改错一个数字就导致扩展加载失败
实操建议:
- 先运行
brew services start php,让 FPM 后台运行 - 用
brew install nginx,再配nginx.conf把.php请求转发给127.0.0.1:9000 - 改
php.ini后,必须执行brew services restart php,不是sudo apachectl restart
手动配置 Apache + PHP 时,LoadModule 为什么总报错
错误信息通常是:Cannot load C:/php/php8apache2_4.dll into server: The specified module could not be found. —— 表面是 DLL 找不到,实际 80% 是这四个原因。
核心判断点:
- PHP 下载的是
Thread Safe (TS)版本吗?非 TS 版本没有php8apache2_4.dll - Apache 是 2.4.x 吗?用 2.2 或 3.0 会找不到对应 DLL
-
LoadModule路径用了反斜杠却没转义 → 必须写成"C:/php/php8apache2_4.dll"或"C:\php\php8apache2_4.dll" -
PHPIniDir指向的是C:/php,但php.ini其实放在C:/php/php.ini,少这一层就加载失败
实操建议:
- 下载 PHP ZIP 包后,进解压目录直接双击运行
php.exe,如果弹窗报错“VCRUNTIME140.dll 丢失”,说明缺 VS 运行库,去微软官网下vc_redist.x64.exe - 在
httpd.conf末尾加三行,顺序不能错:LoadModule→AddHandler→PHPIniDir - 验证 Apache 配置是否合法:命令行执行
httpd -t,返回Syntax OK再重启服务
真正卡住人的从来不是技术本身,是路径拼错、服务没重启、扩展名少写一个字母、或者误以为 php -v 成功就等于 Web 环境就绪。环境这东西,跑通第一行 phpinfo() 之前,全是细节。



















