macOS 內建 Apache 與 PHP,但版本較舊且難以客製化。使用 Homebrew 可輕鬆安裝最新版本、多版本共存、自由切換,打造高可控性的本地開發環境。
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 常用指令
brew install # 安裝
brew uninstall # 移除
brew list # 列出已安裝
brew update # 更新套件索引
brew upgrade # 升級指定套件
brew services start # 啟動服務 (nginx, mysql, php 等)
brew services stop
brew services restart
# 控制 Apache
sudo apachectl start
sudo apachectl restart
sudo apachectl stop
# 修改 DocumentRoot (編輯 /etc/apache2/httpd.conf)
DocumentRoot "/Users/你的用戶名/Sites"
<Directory "/Users/你的用戶名/Sites">
Options Indexes FollowSymLinks Multiviews
AllowOverride All
Require all granted
</Directory>
# 啟用 PHP 模組 (於 httpd.conf 末尾加入)
LoadModule php_module /usr/local/opt/php/lib/httpd/modules/libphp.so
# 或指定版本
LoadModule php_module /usr/local/Cellar/php@8.2/8.2.x/lib/httpd/modules/libphp.so
brew install nginx
# 啟動/重載/停止 (監聽 80 port 需 sudo)
sudo nginx
nginx -s reload
nginx -s stop
# 配置檔位置: /usr/local/etc/nginx/nginx.conf
# 建立站點配置目錄
mkdir -p /usr/local/etc/nginx/servers
# 站點配置範例: /usr/local/etc/nginx/servers/dev.conf
server {
listen 80;
server_name localhost;
root /Users/你的用戶名/Sites/public; # 你的專案公開目錄
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000; # PHP-FPM
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# nginx.conf 末尾加入
include /usr/local/etc/nginx/servers/*.conf;
# 加入 PHP 套件源
brew tap shivammathur/php
# 安裝多版本
brew install shivammathur/php/php@7.4
brew install shivammathur/php/php@8.1
brew install shivammathur/php/php@8.2
# 切換 CLI 版本 (需重新開啟終端機或 source ~/.zshrc)
brew unlink php@8.1 && brew link --force --overwrite php@8.2
# 或使用 php-version 切換器
brew install php-version
php-version 8.2
# 啟動對應版本的 PHP-FPM
brew services start php@8.2
# 檢查監聽端口 (預設 9000)
lsof -i :9000
# Nginx fastcgi_pass 對應修改
fastcgi_pass 127.0.0.1:9000;
brew install mysql
brew services start mysql
# 初始化與設定密碼
mysql_secure_installation
# 或手動
mysql -u root
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的密碼';
FLUSH PRIVILEGES;
# 解決 phpMyAdmin 找不到 mysql.sock
sudo mkdir -p /var/mysql
sudo ln -sf /tmp/mysql.sock /var/mysql/mysql.sock
brew install postgresql@15
brew services start postgresql@15
createuser -s postgres # 建立超級用戶
createdb myapp
brew install redis
brew services start redis
brew install mongodb-community
brew services start mongodb-community
# 以 php@8.2 為例
brew install shivammathur/php/php@8.2-xdebug
brew install shivammathur/php/php@8.2-redis
brew install shivammathur/php/php@8.2-mongodb
brew install shivammathur/php/php@8.2-igbinary
brew install shivammathur/php/php@8.2-swoole
# 查看已載入擴展
php -m
brew install composer~/Sites/phpmyadmin,執行 setup 產生 config.inc.phpadminer.php 放入專案即用,比 phpMyAdmin 輕量composer global require laravel/valet && valet install,極簡站點管理編輯 ~/.zshrc (或 ~/.bash_profile):
# Homebrew 路徑優先
export PATH="/usr/local/bin:/usr/local/sbin:$PATH"
# Composer 全域 bin
export PATH="$HOME/.composer/vendor/bin:$PATH"
# PHP 版本別名 (搭配 php-version)
alias php74="php-version 7.4"
alias php81="php-version 8.1"
alias php82="php-version 8.2"
| 問題 | 解決方案 |
|---|---|
| Nginx 80 port 權限不足 | 使用 sudo nginx 或改監聽 8080 |
| PHP-FPM 權限錯誤 | 確認 www.conf 中 user/group 為你的用戶 |
| MySQL 連線失敗 | 檢查 mysql.sock 路徑、php.ini pdo_mysql.default_socket |
| xdebug 不生效 | 確認 zend_extension 路徑、xdebug.mode=debug、IDE 端口 9003 |
| 權限寫入失敗 | chmod -R 775 storage bootstrap/cache (Laravel 專案) |
Homebrew 讓 macOS 成為優秀的 PHP 開發平台:版本自由切換、套件管理統一、配置檔案集中、服務控制標準化。建議新專案採用 Nginx + PHP-FPM + PostgreSQL/Redis 技術棧,搭配 Valet 或手動配置皆可輕鬆上手。