Mac 运行 ThinkPHP 三大关键:PHP 版本与扩展(如 mbstring、openssl、pdo_mysql)需匹配要求;Web 服务(Apache/Nginx)DocumentRoot 必须指向 public 目录并正确配置路由;storage 和 runtime 目录需赋予 Web 进程用户(如 _www 或 www)读写权限,禁用 chmod 777。

Mac 上跑 ThinkPHP,核心就三件事:PHP 环境得对、Web 服务得通、目录权限别卡死——不是装了就能跑,多数报错都出在这三块。
PHP 版本和扩展是否满足 ThinkPHP 要求
ThinkPHP 6.x 最低要求 PHP 7.2,但实际推荐 PHP 8.0+;TP 5.1 则最低 PHP 5.6.0。Mac 自带的 PHP(如 macOS Sonoma 的 PHP 8.1)看似够用,但常缺 mbstring、openssl、pdo_mysql 这类扩展,一启动就报 Class 'think\App' not found 或 Call to undefined function mb_strlen()。
- 用
php -v确认版本,再用php -m | grep -E 'mbstring|openssl|pdo'检查关键扩展是否加载 - Homebrew 安装的 PHP(如
php@8.2)默认不启用扩展,需手动编辑/opt/homebrew/etc/php/8.2/php.ini,取消注释extension=mbstring等行 - 改完 ini 后必须重启 Web 服务(如
brew services restart php@8.2),光重启终端没用
Apache/Nginx 配置指向 public 目录而非项目根目录
ThinkPHP 强制入口统一为 public/index.php,但 Mac 自带 Apache 或 Homebrew Nginx 默认 DocumentRoot 指向项目根,导致路由 404、静态资源 403、或直接暴露 app/ 目录结构。
- Apache:修改
/etc/apache2/httpd.conf或虚拟主机配置,把DocumentRoot改成/path/to/your/thinkphp/public,同时确保<directory></directory>块内有AllowOverride All - Nginx:在 server 块里设
root /path/to/your/thinkphp/public;,并确认location / { try_files $uri $uri/ /index.php?$query_string; } - 切忌把整个 ThinkPHP 项目拖进
/Library/WebServer/Documents/就完事——那是最常见“能访问首页但点链接全 404”的原因
storage 和 runtime 目录权限问题
Mac 默认用户是 staff 组,而 Apache 进程通常以 _www 用户运行,Nginx 可能用 www 或 nobody。一旦 runtime 目录不可写,就会报 mkdir(): Permission denied 或日志写不进 storage/log。
立即学习“PHP免费学习笔记(深入)”;
- 先查 Web 进程用户:
ps aux | grep -E '(httpd|nginx)' | head -1,看第三列用户名 - 执行
sudo chown -R _www:staff storage runtime(Apache)或sudo chown -R www:staff storage runtime(Nginx) - 别用
chmod 777——临时能跑,但下次系统更新或安全策略收紧就崩,且 ThinkPHP 会拒绝在完全开放权限的目录下运行(尤其调试关闭时)
Mac 上 ThinkPHP 最容易被忽略的是:M1/M2 芯片下 Homebrew 安装的 PHP 扩展路径和 Intel 不同,extension_dir 可能指向 /opt/homebrew/lib/php/pecl/20220829/ 这类路径,ini 文件里写的 extension 名称必须和真实 so 文件名严格一致,少个数字或大小写错都会静默失效。


















