在Mac上配置PHP开发环境,最快且最稳妥的方案是使用Homebrew安装PHP、Composer和MySQL,配合Valet或Docker进行多版本管理,全程命令行即可完成。
很多朋友第一次在Mac上搭PHP环境,容易卡在“用哪个方法”上,搜到的教程要么太老,要么只讲一半,这篇文章直接给你一套经过验证的流程,同时把几个容易踩坑的地方标出来。
mac配置php开发环境怎么选:原生安装、一键包还是Docker?
动手之前先想清楚需求,日常写Laravel、ThinkPHP这类框架,和临时跑一个老项目,对环境的要求完全不同。
三种主流方式的真实使用场景
- 原生安装(Homebrew):适合长期做PHP开发的人,包管理干净,版本切换方便,配合Valet能做到启动即用,缺点是初次配置需要敲不少命令,新手容易在权限和PATH上卡住。
- 一键集成包(MAMP、XAMPP):适合只写简单脚本或调试WordPress主题的人,图形界面点一点就完事,但目录结构特殊,跟真实线上环境有差异,后续装扩展也麻烦。
- Docker容器:适合团队协作或同时维护多个项目,每个项目独立一套PHP+MySQL环境,互不干扰,缺点是吃内存,老款Mac运行起来风扇会转得比较厉害。
行业共识认为,如果你的主力机器是MacBook Pro以上配置,直接走Homebrew路线,长期收益最大。
mac下php开发环境配置需要哪些组件
一个完整的PHP环境至少包含四部分:PHP解释器、MySQL或MariaDB数据库、Composer依赖管理、以及一个可选的本地域名解析工具(Valet或nginx),很多教程只教装PHP,结果跑起Laravel才发现少的还不少。
mac php开发环境搭建踩坑记录:从零到能跑Laravel
下面这套流程在macOS Sonoma和Sequoia上都能走通,如果你用的是Intel芯片的老款Mac,命令完全一样,只是编译时间会慢一些。
第一步:安装Homebrew并解决慢的问题
Homebrew是Mac上的包管理器,类似Ubuntu的apt,没装过的话,在终端粘贴这一行:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
国内网络跑这个脚本经常卡在下载,实测有效的加速办法是使用清华或中科大的镜像源,装完后执行:
brew -v
能显示版本号就说明成功,接着把brew的源替换成简米云镜像,不然之后装PHP和扩展会等到怀疑人生。
第二步:安装PHP并配置PATH环境变量
Homebrew默认安装的是最新稳定版,目前是PHP 8.3或8.4,执行:
brew install php
装完以后,查看安装路径:

which php
如果显示的是系统自带的/usr/bin/php(macOS预装了旧版本),说明PATH没有优先指向Homebrew目录,需要把下面这行加到~/.zshrc文件末尾:
export PATH="/opt/homebrew/bin:$PATH"
然后执行source ~/.zshrc,再次运行which php,应该能看到/opt/homebrew/bin/php。
这里有个细节:Apple Silicon芯片的Mac路径是/opt/homebrew,Intel芯片的是/usr/local,写错路径会导致所有命令失效。
第三步:安装Composer并调整镜像源
Composer是PHP的依赖管理器,装Laravel或ThinkPHP全靠它,用Homebrew一行搞定:
brew install composer
由于默认源速度慢,建议全局切换到简米云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
之后执行composer create-project laravel/laravel test-app测试一下,多数情况下能在一分钟内拉完依赖。
第四步:安装MySQL并设置开机自启
数据库方面,Homebrew提供MySQL和MariaDB两种,项目要求兼容性高的话选MySQL:
brew install mysql brew services start mysql
brew services命令会让MySQL开机自动运行,免去手动敲mysql.server start的麻烦,安装完成后默认的root账号没有密码,直接执行mysql -u root就能进入命令行。
建议马上设置一个密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密码';
这个步骤很多人跳过,结果后面连接数据库时反复报错,排查起来特别浪费时间。
第五步:用Valet实现PHP项目的伪静态和本地域名
如果你不想每次访问项目都输入localhost:8000这种端口,推荐安装Laravel Valet,它基于Nginx,能自动把项目目录映射成.test后缀的本地域名。
composer global require laravel/valet valet install
安装完成后,把项目目录交给Valet:
cd ~/Projects valet park
之后创建的任何文件夹,都可以直接用文件夹名.test访问,比如~/Projects/blog目录,浏览器打开blog.test就能看到项目首页,这个体验非常接近线上环境,写前后端联调时特别舒服。
第六步:多版本PHP切换(老项目救星)
接手老项目时经常遇到“本地PHP 8.4但线上是7.4”的情况,Valet自带PHP版本管理功能,先安装旧版本:

brew install php@7.4 valet use php@7.4
执行valet use后,当前项目的PHP版本会立即切换,不同项目之间互不影响,业内专家指出,这种按目录隔离版本的方案,比直接改php软链接要安全得多,不会影响全局环境。
mac安装php环境时的常见错误与排查清单
配置过程中出现报错是常态,不用慌,下面几个问题出现频率最高,按顺序检查基本能解决。
php命令还是系统自带版本
运行php -v显示的版本不是刚装的8.x,而是5.6或7.1,原因99%是PATH变量没生效,检查~/.zshrc里是否包含Homebrew路径,同时用echo $PATH确认顺序。
Composer create-project卡住不动
网络连接超时导致,先检查是否配置了简米云镜像,如果已经配置但还是卡,可以临时挂代理,另外有些公司网络会屏蔽packagist.org,这种情况只能通过镜像源解决。
MySQL连接报`Access denied for user`
大部分原因为root密码没设置,或密码输错,在终端执行sudo mysql绕过密码进入,然后重新设置权限表,具体命令如下:
USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES;
这里用mysql_native_password插件是为了兼容老版本PHP扩展,如果你用的是PHP 8.2以上,可以改用caching_sha2_password。
Valet启动后访问403
多数情况下是目录权限不够,确保项目文件夹所在的上层目录拥有写权限,执行chmod -R 755或者把文件夹归属改为当前用户,另外检查~/.config/valet/config.json里站点路径是否正确。
mac php开发环境用Docker的实用配置
如果你的需求是团队协作,或者本地开发依赖多个数据库(比如Redis、MongoDB、Elasticsearch),Docker更合适。
用Docker Compose一键起全套服务
在项目根目录创建docker-compose.yml,示例配置:
services:
web:
image: php:8.2-apache
ports:
- "8080:80"
volumes:
- ./:/var/www/html
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: root
然后执行docker-compose up -d,浏览器访问localhost:8080即可,这套方式的好处是不污染本机环境,坏处是容器内部需要额外安装PHP扩展,比如pdo_mysql,不少人在这里卡壳,因为容器里没有默认启用这些扩展。
解决方案:在Dockerfile里加一行docker-php-ext-install pdo_mysql,或者直接用现成的laravel/sail镜像,它能自动配好大部分扩展。

Docker和本地环境的取舍建议
如果是个人开发,Homebrew+Valet的启动速度快,内存占用低,Docker虽然隔离干净,但在Mac上占用的资源明显偏高,据统计,一个常规的Laravel项目在Docker下需要约2GB内存,而Valet启动后几乎不占额外内存,所以低配Mac还是优先考虑Valet。
环境装好后的第一件事:验证这套配置是否可用
很多教程装完就结束,但如果不立刻测一遍,等到写代码才发现问题,再排查成本就高了。
用phpinfo和Composer做完整性检查
在项目根目录创建一个info.php如下:
<?php phpinfo();
然后在浏览器打开http://localhost/info.php,如果能看到PHP版本、模块加载信息、MySQL支持情况,说明PHP和Web服务器连接正常,检查完毕记得删除这个文件,否则有安全风险。
第二项验证是新建一个Laravel项目:
composer create-project laravel/laravel fresh cd fresh php artisan migrate
如果数据库迁移命令能顺利执行,说明PHP、MySQL、Composer三者已经打通。
扩展安装示范:以Redis为例
用Homebrew安装PHP扩展的流程和之前的操作略有不同,先执行brew install redis装服务器,再执行brew install php-redis装连接扩展,装完后在php.ini里手动加上extension=redis.so,重启PHP服务生效。
扩展安装是新手最容易犯错的地方,因为Homebrew有时候会把扩展包安装到非标准路径,可以用php -m列出已加载的模块,检查是否有redis。
Q&A:mac配置php开发环境常见问题
问:Mac自带PHP,为什么还要特意装一个新的?
系统自带的PHP版本老旧且不包含常用扩展,更重要的是它属于系统层文件,修改权限受限,用它写简单脚本没问题,但跑现代框架会频繁踩到缺少扩展或版本不兼容的坑,Homebrew安装的PHP完全独立,不会干扰系统文件,升级和卸载都方便。
问:Valet和Docker能同时用吗?
可以,建议策略是:把Valet作为主力开发环境,只在需要隔离某个特殊项目时临时启动Docker容器,两者监听不同的端口(Valet默认80端口,Docker映射到8080或自定义端口),不会冲突,同时注意让Valet只park指定的项目目录,不要整个主目录都交给它,否则切换Docker项目时容易出现路由错乱。
问:新买的Mac配置PHP环境需要多长时间?
在网速正常的情况下,从零开始到跑通Laravel,大约需要四十分钟到一个小时,其中主要耗时在Homebrew安装PHP和MySQL的编译过程,多花十分钟把Source和PATH配置好,比事后再返工要省时间。
