跳到主要内容
macOS PHP 7.4 开发环境完整配置教程 | 极客日志
PHP
macOS PHP 7.4 开发环境完整配置教程 macOS PHP 7.4 开发环境配置教程涵盖 Homebrew 安装、PHP 7.4 及扩展部署、MySQL 8.4 数据库配置、Nginx Web 服务器设置、Redis 缓存服务集成以及域名 hosts 配置。内容包括环境搭建步骤、配置文件修改、测试页面验证、常用命令速查及故障排除指南,旨在帮助开发者快速构建本地多项目开发与调试环境。
未来可期 发布于 2026/2/23 更新于 2026/7/20 44 浏览环境概览
技术栈版本
组件 版本 说明 PHP 7.4.33 使用 shivammathur/php tap 安装 MySQL 8.4.x Homebrew 官方版本 Redis 8.4.x 缓存服务器 Nginx 1.29.x Web 服务器
目录结构
~/Sites/
├── localhost/
│ ├── index.php
│ ├── phpinfo.php
│ ├── db_test.php
│ ├── redis_test.php
│ └── final_verification.php
├── projects/
│ ├── blog/
│ ├── shop/
│ ├── admin/
│ └── api/
├── logs/
│ ├── php/
│ └── nginx/
└── ssl/
/opt/homebrew/
├── etc/
│ ├── php/7.4/
│ ├── nginx/
│ └── [email protected] /
└── var/
├── [email protected] /
└── log /
前置准备
检查系统环境
which brew
brew --version
uname -m
更新 Homebrew
brew update
brew upgrade
阶段 1:安装 Homebrew 和基础组件
1.1 安装 Homebrew(如未安装)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) "
>> ~/.zprofile
echo
'eval "$(/opt/homebrew/bin/brew shellenv)"'
eval
"$(/opt/homebrew/bin/brew shellenv) "
1.2 安装基础依赖
brew install curl
brew install wget
brew install git
阶段 2:安装 PHP 7.4
2.1 添加 PHP 扩展仓库 macOS 的 Homebrew 官方仓库不再提供 PHP 7.4,需要使用 shivammathur/php tap:
brew tap shivammathur/php
brew update
2.2 安装 PHP 7.4 PHP 7.4.33 (cli) (built: Dec 19 2025 22:33:57) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.33, Copyright (c), by Zend Technologies
2.3 配置环境变量
2.4 验证 PHP 安装
php --version
php -m
php -i
阶段 3:安装和配置 MySQL
3.1 安装 MySQL 8.4
3.2 MySQL 安全配置
3.3 创建开发数据库和用户
mysql -u root -p
CREATE DATABASE IF NOT EXISTS dev_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS 'dev_user' @'localhost' IDENTIFIED BY '你的密码' ;
GRANT ALL PRIVILEGES ON dev_database.* TO 'dev_user' @'localhost' ;
FLUSH PRIVILEGES;
EXIT;
3.4 验证 MySQL 连接
mysql -u root -p -e "SELECT VERSION();"
mysql -u dev_user -p -e "USE dev_database; SHOW TABLES;"
3.5 MySQL 配置优化(可选)
vi /opt/homebrew/etc/mysql/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
innodb_buffer_pool_size = 256M
innodb_log_file_size = 64M
max_connections = 100
wait_timeout = 28800
slow_query_log = 1
slow_query_log_file = /opt/homebrew/var/log/mysql/slow.log
long_query_time = 2
阶段 4:安装和配置 Nginx
4.1 安装 Nginx
brew install nginx
brew services start nginx
brew services list | grep nginx
nginx -t
4.2 配置 Nginx 虚拟主机
4.2.1 创建主开发环境配置
mkdir -p ~/Sites/localhost
mkdir -p ~/Sites/logs/{php,nginx}
chmod 755 ~/Sites
vi /opt/homebrew/etc/nginx/servers/local.dev.conf
server {
listen 80;
server_name local.test;
# 网站根目录
root /Users/你的用户名/Sites/localhost;
index index.php index.html index.htm;
# 日志配置
access_log /Users/你的用户名/Sites/logs/nginx/local.test.access.log;
error_log /Users/你的用户名/Sites/logs/nginx/local.test.error.log;
# PHP 处理
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
# URL 重写(支持 Laravel 等框架)
location / {
try_files $uri $uri/ /index.php?$query_string;
}
# 隐藏文件保护
location ~ /\. {
deny all;
}
# 静态文件缓存
location ~* \.(js|css|png|jpg|jpeg|gif|ico|woff|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
4.2.2 创建多项目配置
mkdir -p ~/Sites/projects/{blog,shop,admin,api}
chmod 755 ~/Sites
vi /opt/homebrew/etc/nginx/servers/multi_test.conf
# 博客项目
server {
listen 80;
server_name blog.test;
root /Users/你的用户名/Sites/projects/blog;
index index.php index.html;
access_log /Users/你的用户名/Sites/logs/nginx/blog.test.access.log;
error_log /Users/你的用户名/Sites/logs/nginx/blog.test.error.log;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 商城项目
server {
listen 80;
server_name shop.test;
root /Users/你的用户名/Sites/projects/shop;
index index.php index.html;
access_log /Users/你的用户名/Sites/logs/nginx/shop.test.access.log;
error_log /Users/你的用户名/Sites/logs/nginx/shop.test.error.log;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
# 管理后台
server {
listen 80;
server_name admin.test;
root /Users/你的用户名/Sites/projects/admin;
index index.php index.html;
access_log /Users/你的用户名/Sites/logs/nginx/admin.test.access.log;
error_log /Users/你的用户名/Sites/logs/nginx/admin.test.error.log;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4.3 重启 Nginx
nginx -t
brew services restart nginx
brew services list
阶段 5:安装和配置 Redis 服务器
5.1 安装 Redis 服务器
brew install redis
brew services start redis
brew services list | grep redis
redis-cli ping
5.2 Redis 基本配置
vi /opt/homebrew/etc/redis.conf
bind 127.0.0.1
port 6379
daemonize no
maxmemory 256mb
maxmemory-policy allkeys-lru
loglevel notice
logfile /opt/homebrew/var/log/redis.log
save 900 1
save 300 10
save 60 10000
阶段 6:PHP 扩展配置(Redis 相关) 本阶段将安装和配置与 Redis 相关的 PHP 扩展,包括 igbinary 序列化加速和 LZF 压缩扩展。
6.1 安装前的系统依赖
brew update
brew install autoconf automake libtool
6.2 安装 igbinary 扩展 igbinary 是一个高性能的二进制序列化扩展,比 PHP 标准序列化快 30-50%,用于提升 Redis 数据序列化的性能。
PECL 会从 pecl.php.net 下载最新稳定版本
编译过程会自动完成,无需额外配置
安装完成后扩展会自动添加到 php.ini
6.3 安装 LZF 压缩扩展 LZF 是一个轻量级的压缩算法,用于 Redis 数据压缩,可以显著减少内存占用。
LZF 压缩解压速度极快
适合实时数据压缩场景
与 igbinary 配合使用效果最佳
6.4 安装 Redis 扩展(整合版) Redis 扩展 是 PHP 连接 Redis 服务器的客户端库,支持所有 Redis 命令。
enable igbinary serializer support? [yes ] : yes
enable lzf compression support? [yes ] : yes
enable zstd compression support? [no ] : no
enable msgpack serializer support? [no ] : no
enable lz4 compression support? [no ] : no
选项 推荐 说明 igbinary yes 二进制序列化,比标准序列化快 30-50% LZF yes 轻量级压缩,CPU 开销小,适合缓存数据 Zstd no 高压缩率算法,但增加复杂度,开发环境不需要 MessagePack no 跨语言序列化,纯 PHP 项目不需要 LZ4 no 极速压缩,已有 LZF 足够
6.5 验证扩展安装
php -m | grep -E "(redis|igbinary|lzf)"
6.6 PHP.ini 基础配置
vi /opt/homebrew/etc/php/7.4/php.ini
display_errors = On
error_reporting = E_ALL
log_errors = On
error_log = /Users/你的用户名/Sites/logs/php/php_errors.log
memory_limit = 256M
max_execution_time = 300
upload_max_filesize = 64M
post_max_size = 64M
extension =igbinary.so
extension =lzf.so
extension =redis.so
6.7 PHP-FPM 配置
vi /opt/homebrew/etc/php/7.4/php-fpm.d/www.conf
[www]
user = 你的用户名
group = staff
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 2
pm.max_spare_servers = 8
php_admin_value[error_log]= /Users/你的用户名/Sites/logs/php/php-fpm.error.log
php_admin_flag[log_errors]= on
6.8 重启 PHP-FPM 服务
阶段 7:域名配置
7.1 为什么使用 .test 域名 Chrome 浏览器从 2021 年开始对所有 .dev 域名实施 HSTS(HTTP 严格传输安全)策略:
❌ .dev 域名会强制重定向到 HTTPS
❌ 本地开发环境无法提供 HTTPS 证书
❌ 即使修改 hosts 文件也无法访问
✅ .test 域名专为本地开发设计
✅ 无 HSTS 限制
✅ 所有浏览器兼容
✅ RFC 规范推荐
7.2 配置 hosts 文件
sudo vi /etc/hosts
127.0.0.1 local.test
127.0.0.1 blog.test
127.0.0.1 shop.test
127.0.0.1 admin.test
127.0.0.1 api.test
7.3 验证域名解析
ping local.test
curl -I http://local.test
阶段 8:服务管理和验证
8.1 服务管理命令
brew services list
lsof -i :80,9000,3306,6379
8.2 创建测试页面
8.2.1 PHP 信息页面
8.2.2 数据库连接测试 <?php
echo "<h1>数据库连接测试</h1>" ;
try {
$pdo = new PDO ("mysql:host=localhost;dbname=dev_database" , "dev_user" , "你的密码" );
echo "✅ MySQL 连接成功<br>" ;
$stmt = $pdo ->query ("SELECT VERSION() as version" );
$row = $stmt ->fetch (PDO::FETCH_ASSOC );
echo "MySQL 版本:" . $row ['version' ] . "<br>" ;
} catch (PDOException $e ) {
echo "❌ MySQL 连接失败:" . $e ->getMessage () . "<br>" ;
}
8.2.3 Redis 连接测试 <?php
echo "<h1>Redis 连接测试</h1>" ;
try {
$redis = new Redis ();
$redis ->connect ('127.0.0.1' , 6379 );
echo "✅ Redis 连接成功<br>" ;
$redis ->set ('test_key' , 'Hello Redis!' );
$value = $redis ->get ('test_key' );
echo "Redis 读写测试:$value <br>" ;
if (extension_loaded ('igbinary' )) {
$data = ['test' => 'data' ];
$serialized = igbinary_serialize ($data );
$redis ->set ('igbinary_test' , $serialized );
$result = igbinary_unserialize ($redis ->get ('igbinary_test' ));
echo "igbinary 序列化:" . ($data === $result ? "✅ 成功" : "❌ 失败" ) . "<br>" ;
}
} catch (Exception $e ) {
echo "❌ Redis 连接失败:" . $e ->getMessage () . "<br>" ;
}
8.2.4 完整环境验证 <?php
echo "<h1>🎉 PHP 7.4 开发环境完整验证</h1>" ;
echo "<h2>PHP 版本:" . phpversion () . "</h2>" ;
$extensions = ['pdo_mysql' , 'mysqli' , 'redis' , 'curl' , 'gd' , 'mbstring' , 'openssl' , 'igbinary' , 'lzf' ];
echo "<h3>扩展状态:</h3>" ;
foreach ($extensions as $ext ) {
$status = extension_loaded ($ext ) ? "✅" : "❌" ;
echo "$status $ext <br>" ;
}
echo "<h3>服务状态:</h3>" ;
$ports = [80 => 'Nginx' , 9000 => 'PHP-FPM' , 3306 => 'MySQL' , 6379 => 'Redis' ];
foreach ($ports as $port => $service ) {
$fp = @fsockopen ('127.0.0.1' , $port , $errno , $errstr , 1 );
$status = $fp ? "✅" : "❌" ;
echo "$status $service (端口 $port )<br>" ;
if ($fp ) fclose ($fp );
}
echo "<h3>数据库连接:</h3>" ;
try {
$pdo = new PDO ("mysql:host=localhost;dbname=dev_database" , "dev_user" , "你的密码" );
echo "✅ MySQL 连接成功<br>" ;
} catch (PDOException $e ) {
echo "❌ MySQL 连接失败<br>" ;
}
echo "<h3>Redis 连接:</h3>" ;
try {
$redis = new Redis ();
$redis ->connect ('127.0.0.1' , 6379 );
echo "✅ Redis 连接成功<br>" ;
} catch (Exception $e ) {
echo "❌ Redis 连接失败<br>" ;
}
8.3 浏览器访问测试
http://local.test/final_verification.php
http://local.test/phpinfo.php
http://local.test/db_test.php
http://local.test/redis_test.php
http://blog.test
http://shop.test
http://admin.test
常用命令速查
服务管理
PHP 相关
php --version
php -m
php -i
php --ini
php -r "echo phpversion('redis');"
MySQL 相关
mysql -u root -p
mysql -u dev_user -p
SHOW DATABASES;
USE dev_database;
SHOW TABLES;
mysql -V
brew services restart [email protected]
Redis 相关
redis-cli ping
redis-cli
redis-cli SET key value
redis-cli GET key
redis-cli KEYS *
redis-cli DEL key
redis-cli INFO
redis-cli FLUSHALL
Nginx 相关
nginx -t
nginx -s reload
nginx -s stop
nginx -v
nginx -T
日志查看
tail -f ~/Sites/logs/php/php_errors.log
tail -f ~/Sites/logs/nginx/local.test.error.log
tail -50 ~/Sites/logs/php/php-fpm.error.log
tail -50 ~/Sites/logs/nginx/local.test.error.log
tail -50 ~/Sites/logs/nginx/local.test.access.log
故障排除
问题 1:Nginx 启动失败 nginx: [emerg] unknown "user" variable
nginx -t
tail -f /opt/homebrew/var/log/nginx/error.log
问题 2:PHP 扩展未加载 PHP Fatal error : Uncaught Error : Class
问题 3:MySQL 连接失败 SQLSTATE[HY000] [1045] Access denied for user
brew services list | grep mysql
brew services restart [email protected]
tail -f /opt/homebrew/var/mysql/*.err
mysql -u dev_user -p
问题 4:.dev 域名无法访问 问题原因 :
Chrome 对 .dev 域名实施了 HSTS 策略
127.0.0.1 local.test
127.0.0.1 blog.test
问题 5:端口被占用 nginx: [emerg] bind () to 0 .0 .0 .0 :80 failed (48 : Address already in use )
问题 6:PHP-FPM 未运行
brew services list | grep php
brew services start shivammathur/php/[email protected]
tail -f ~/Sites/logs/php/php-fpm.error.log
/opt/homebrew/opt/[email protected] /sbin/php-fpm -t
问题 7:Redis 连接失败 RedisException: Redis server went away
brew services list | grep redis
brew services start redis
redis-cli ping
tail -f /opt/homebrew/var/log/redis.log
最佳实践
1. 定期维护
brew services list
tail -f ~/Sites/logs/php/*.log
tail -f ~/Sites/logs/nginx/*.log
find ~/Sites/logs -name "*.log" -mtime +7 -delete
2. 性能优化
PHP 优化
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 16
opcache.max_accelerated_files = 10000
opcache.validate_timestamps = 1
opcache.revalidate_freq = 2
MySQL 优化
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
max_connections = 200
query_cache_size = 64M
Redis 优化
maxmemory 512mb
maxmemory-policy allkeys-lru
appendonly yes
appendfsync everysec
3. 安全管理
MySQL 安全
CREATE USER 'user' @'localhost' IDENTIFIED BY 'StrongP@ssw0rd!' ;
mysqldump - u root - p dev_database > backup_$(date + % Y% m% d).sql
文件权限
chmod 755 ~/Sites/localhost
chmod 644 ~/Sites/localhost/*.php
chmod 755 ~/Sites/logs
chmod 644 ~/Sites/logs/**/*.log
location ~ /\. {
deny all;
}
4. 开发工作流
本地开发
部署前测试
5. 备份和恢复
数据库备份
mysqldump -u root -p --all-databases > full_backup_$(date +%Y%m%d).sql
mysqldump -u root -p dev_database > dev_database_backup_$(date +%Y%m%d).sql
mysql -u root -p < backup_file.sql
配置备份
cp -r /opt/homebrew/etc/nginx ~/backup/nginx_config_$(date +%Y%m%d)
cp -r /opt/homebrew/etc/php/7.4 ~/backup/php_config_$(date +%Y%m%d)
cp -r /opt/homebrew/etc/mysql ~/backup/mysql_config_$(date +%Y%m%d)
附录
A. Homebrew 常用命令
brew install <package_name>
brew uninstall <package_name>
brew search <package_name>
brew list
brew upgrade <package_name>
brew cleanup
brew info <package_name>
B. 常用文件位置 用途 路径 PHP 配置 /opt/homebrew/etc/php/7.4/php.iniPHP-FPM 配置 /opt/homebrew/etc/php/7.4/php-fpm.d/www.confNginx 配置 /opt/homebrew/etc/nginx/nginx.confNginx 虚拟主机 /opt/homebrew/etc/nginx/servers/MySQL 配置 /opt/homebrew/etc/mysql/my.cnfRedis 配置 /opt/homebrew/etc/redis.confPHP 错误日志 ~/Sites/logs/php/php_errors.logNginx 访问日志 ~/Sites/logs/nginx/*.access.log项目根目录 ~/Sites/
C. 参考资源
总结 恭喜!你已经成功在 macOS 上配置了完整的 PHP 7.4 开发环境,包括:
✅ PHP 7.4.33 - 完整的 PHP 开发环境
✅ MySQL 8.4.x - 关系型数据库
✅ Redis 8.4.x - 高性能缓存系统
✅ Nginx 1.29.x - Web 服务器
✅ igbinary - 二进制序列化加速
✅ LZF - 轻量级压缩
✅ .test 域名 - 专业的本地开发域名
下一步建议 相关免费在线工具 curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online