前提是php已正确安装且arm64架构二进制路径加入path:需用homebrew原生安装(默认arm64)、禁用rosetta、执行brew link --force php并配置~/.zshrc中export path="/opt/homebrew/opt/php/bin:$path"后source生效,且which php返回/opt/homebrew/opt/php/bin/php。

macOS M2 芯片上直接运行 PHP 脚本的前提是什么
M2 是 ARM64 架构,但 macOS 自 macOS 11(Big Sur)起已原生支持 ARM64 的 PHP 二进制,所以关键不在于“能不能”,而在于“你装的 PHP 是不是真能跑”。很多人遇到 zsh: bad CPU type in executable 或 command not found: php,本质是 PHP 安装路径没进 $PATH,或装的是 Intel(x86_64)版却在 Rosetta 终端里没配对。
- 确认当前终端是否运行在 Rosetta 模式:菜单栏左上角苹果图标 → “关于本机” → “芯片” 显示 Apple M2;再打开终端 → 右键终端图标 → “显示简介” → 勾选“使用 Rosetta 运行”?不要勾,除非你明确需要 x86 工具链
- 检查 PHP 架构:
file $(which php)
输出含arm64即可,含x86_64且未开 Rosetta 就会失败 - Homebrew 安装的 PHP(如
brew install php)默认编译为 arm64,只要用的是 Apple Silicon 原生终端(即默认 Terminal.app 或 iTerm2,未手动启用 Rosetta)
怎么让 php script.php 真正跑起来
不是所有 PHP 文件都能直接执行,尤其当你写完就敲 php hello.php 却报错时,常见卡点如下:
- 文件权限没问题,但脚本第一行没加 shebang?macOS 对脚本执行更严格,建议首行写:
#!/usr/bin/env php
,然后chmod +x hello.php,再直接./hello.php - 如果用
php -S启动内置服务器,注意 M2 上某些扩展(如gd、imagick)需额外安装依赖(如brew install libpng jpeg webp),否则启动时报PHP Warning: PHP Startup: Unable to load dynamic library 'gd' - 内置服务器默认绑定
localhost:8000,但 Safari 在 M2 macOS 上对localhost的 DNS 解析偶尔有缓存问题,可改用127.0.0.1:8000测试 - 使用
php -l script.php先语法检查,比直接运行更安全——M2 上 PHP 解析器本身无差异,但错误提示可能因终端编码(如 UTF-8 vs US-ASCII)显示乱码,建议终端设为 Unicode(UTF-8)
Homebrew 安装 PHP 后为什么 php --version 不生效
这是 PATH 配置最常翻车的地方。M2 上 Homebrew 默认装到 /opt/homebrew,而非 Intel 时代的 /usr/local,所以旧的 shell 配置(如 ~/.zshrc 里写的 export PATH="/usr/local/bin:$PATH")完全无效。
- 查 Homebrew PHP 实际路径:
brew --prefix php
,通常输出/opt/homebrew/opt/php - 把对应 bin 加进 PATH:
echo 'export PATH="/opt/homebrew/opt/php/bin:$PATH"' >> ~/.zshrc
- 别忘了重载:
source ~/.zshrc
- 验证:
which php
应返回/opt/homebrew/opt/php/bin/php,而不是/usr/bin/php(那是系统自带的过期 PHP 7.3,macOS 13+ 已弃用) - 如果用了 Oh My Zsh 或其他框架,确认没在
~/.zshrc末尾被覆盖掉 PATH —— 放在文件最底部最稳妥
PHP 扩展(如 pdo_mysql、redis)在 M2 上编译失败怎么办
不是所有 PECL 扩展都默认适配 arm64,尤其是依赖 C 库的扩展。比如 pecl install redis 失败,常因找不到 hiredis ARM 版本。
- 先装依赖:
brew install hiredis
(自动装 arm64 版) - 再指定头文件路径安装:
pecl install -D 'PHP_RD_LIBDIR=/opt/homebrew/lib' redis
- 若提示
configure: error: Cannot find OpenSSL's libraries,补装:brew install openssl
,然后加参数:pecl install -D 'OPENSSL_DIR=/opt/homebrew/opt/openssl' pdo_mysql
- 编译后扩展文件(
.so)通常在/opt/homebrew/lib/php/pecl/下,确认php.ini中已启用:extension="redis.so"
,且该.so文件架构也是 arm64(用file命令验证)
M2 上最难察觉的问题,是混用 Rosetta 终端和原生 Homebrew —— 一旦开了 Rosetta,brew 会悄悄切到 x86_64 模式,装出来的全是 Intel 二进制,后面所有 PHP 扩展都会连锁失效。务必确认终端没开 Rosetta,且全程用 /opt/homebrew 路径。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











