Mac M1/M2跑ThinkPHP需三步:①用Homebrew安装ARM64原生PHP并确保which php输出/opt/homebrew/bin/php;②Apache的DocumentRoot必须指向public目录且启用mod_rewrite;③storage和runtime目录需sudo chown -R _www:staff,禁用chmod 777。

在 M1/M2 芯片 Mac 上跑 ThinkPHP 项目,常卡在 PHP 扩展缺失、Web 服务找不到 public 入口、runtime 目录死活写不进日志这三步,不是代码问题,是环境没对齐 Apple Silicon 的运行逻辑。
确认并切换到 Homebrew ARM64 原生 PHP
先执行 which php,输出必须是 /opt/homebrew/bin/php;如果不是,说明你正在用系统残留 PHP 或 Rosetta 转译的 Intel 版本,后续所有操作都会触发 illegal instruction: 4。
若输出错误路径,运行 brew install php 安装原生 ARM64 版(Homebrew 默认装最新稳定版,如 PHP 8.3)。
安装完检查 ~/.zshrc 是否含 export PATH="/opt/homebrew/bin:$PATH",没有就手动添加,然后执行 source ~/.zshrc。
立即学习“PHP免费学习笔记(深入)”;
验证扩展是否就位:php -m | grep -E '^(mbstring|openssl|pdo|curl|opcache)$',缺任意一个,ThinkPHP 启动即报 Call to undefined function mb_strlen() 或路由加载失败。
用 Composer 创建 ThinkPHP 项目
方法一:直接拉取官方骨架
执行 composer create-project topthink/think tp6 --ignore-platform-reqs,【--ignore-platform-reqs 不可省略】,否则因 macOS 默认无 pdo_mysql 扩展会中断安装。
方法二:手动初始化后 require
先 mkdir tp6 && cd tp6,再 composer init 一路回车,最后 composer require topthink/think。
注意:别用 brew install composer——它已被弃用,M1/M2 上大概率绑定错 PHP 路径,导致 composer --version 报错或静默失败。
配置 Apache 指向 public 目录并启用重写
第一步:修改虚拟主机配置
编辑 /etc/apache2/extra/httpd-vhosts.conf,加入:
<VirtualHost *:80>
ServerName tp6.local
DocumentRoot "/Users/yourname/tp6/public"
<Directory "/Users/yourname/tp6/public">
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
第二步:启用 mod_rewrite 模块
确保 /etc/apache2/httpd.conf 中 LoadModule rewrite_module libexec/apache2/mod_rewrite.so 这行未被注释。
第三步:绑定本地域名
向 /etc/hosts 追加一行:127.0.0.1 tp6.local,保存后重启 Apache:sudo apachectl restart。
修复 storage 和 runtime 目录权限
Apache 在 macOS 上默认以 _www 用户运行,而你的项目目录属主是当前用户(如 liuxiaoyun:staff),runtime 目录不可写会导致 mkdir(): Permission denied 或日志空白。
先查 Web 进程真实用户:ps aux | grep httpd | head -1,看第三列输出,通常是 _www。
执行:sudo chown -R _www:staff storage runtime。
【严禁使用 chmod 777】——ThinkPHP 在调试关闭时会主动拒绝运行于完全开放权限的目录,且 macOS Monterey 及更新版本会因 SIP 策略阻止该操作。
验证 Swoole 扩展(可选加速)
方法一:PECL 一键安装
运行 pecl install swoole;若提示 command not found: pecl,先补装 PEAR:curl -O https://pear.php.net/go-pear.phar && php go-pear.phar。
方法二:手动启用
找到 php.ini 路径:php --ini | grep "Loaded Configuration File",打开该文件,在末尾添加:extension=swoole.so。
重启 Apache:sudo apachectl restart,再运行 php -m | grep swoole,有输出即成功。



















