mac搭php环境关键在cli与web服务共用同一套php配置:需确认which php指向homebrew路径、php --ini加载正确php.ini、apache配置loadmodule php_module及addhandler php-script .php、启用pdo_sqlite等扩展并重启httpd服务。

Mac 上搭 PHP 环境不是“装完就跑”,关键在于CLI 和 Web 服务用的是同一套 PHP 配置。Homebrew 安装的 php@8.3 默认不接管系统 Apache,也不自动启用常用扩展,直接 php -v 能跑 ≠ http://localhost/info.php 能显示 —— 这是绝大多数人卡住的第一步。
确认你用的是 Homebrew PHP,不是系统自带旧版
macOS 自带 PHP(通常为 8.1 或更老),但已废弃且不更新。运行 which php,如果输出是 /usr/bin/php,说明你在用系统版本 —— 它无法加载 Homebrew 安装的扩展,也和 php@8.3 的 php.ini 完全无关。
- 必须把 Homebrew 的 bin 路径加进
~/.zshrc:echo 'export PATH="/opt/homebrew/bin:/opt/homebrew/sbin:$PATH"' >> ~/.zshrc(Apple Silicon)或echo 'export PATH="/usr/local/bin:/usr/local/sbin:$PATH"' >> ~/.zshrc(Intel) - 执行
source ~/.zshrc后,再运行which php应该返回/opt/homebrew/bin/php -
php --ini输出的 “Loaded Configuration File” 必须指向/opt/homebrew/etc/php/8.3/php.ini,否则后续扩展启用无效
Apache 加载 libphp.so 失败:路径和模块名必须严格匹配
Homebrew 安装的 Apache(httpd)默认不加载 PHP 模块,且模块路径与系统 Apache 完全不同。常见错误是照抄网上教程去改 /etc/apache2/httpd.conf,结果重启后 brew services restart httpd 报错 “Cannot load … no suitable image found”。
- 编辑的是 Homebrew Apache 的配置:
sudo nano /opt/homebrew/etc/httpd/httpd.conf - 确认加载行完整且路径准确:
LoadModule php_module /opt/homebrew/lib/httpd/modules/libphp.so(注意不是libphp8.so或libphp7.so) - 必须添加处理器声明:
AddHandler php-script .php,仅靠LoadModule不足以让.php文件被解析 - 重启命令只能用 Homebrew:
brew services restart httpd,sudo apachectl restart会操作系统 Apache,两者冲突
php.ini 扩展启用后仍报 “Call to undefined function”
扩展名写错、路径不对、或扩展本身依赖未满足,都会导致函数不可用。比如启用 extension=pdo_mysql 却没装 MySQL 客户端库,PHP 启动时静默失败,php -m 里看不到它。
- 复制模板前先确认路径:
cp /opt/homebrew/etc/php/8.3/php.ini.default /opt/homebrew/etc/php/8.3/php.ini - 启用扩展时只取消注释,不改名字:
extension=mbstring(不是mb_string或php_mbstring) -
pdo_sqlite、curl、openssl是基础依赖,必须先开;pdo_mysql需额外安装brew install mysql-client并确保mysql_config在$PATH中 - 改完
php.ini后,必须重启 Apache(brew services restart httpd)或 CLI 服务(php -v重查)才能生效
访问 localhost/info.php 显示空白或下载文件
这不是 PHP 没跑,而是 Apache 没把请求交给 PHP 解析器。典型现象:浏览器弹出下载 info.php 文件,或页面纯白无错误 —— error_log 里可能有 “No input files specified” 或 “File not found”。
- 检查
httpd.conf中是否漏了DirectoryIndex index.php index.html - 确认
DocumentRoot和对应<directory></directory>块路径一致,且权限允许读取(/var/www或/opt/homebrew/var/www) - 测试文件必须放在 Apache 的 DocumentRoot 下,比如
echo "<?php phpinfo(); ?>" > /opt/homebrew/var/www/info.php - 不要用系统 Apache 的
/Library/WebServer/Documents/目录,Homebrew Apache 默认根目录是/opt/homebrew/var/www
最容易被忽略的点:Homebrew PHP 和 Apache 是两个独立服务,它们之间没有自动绑定。你得手动把 PHP 编译成 Apache 模块、告诉 Apache 去哪加载、再让 Apache 知道哪些后缀归 PHP 处理 —— 少一步,.php 就只是个文本文件。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











