必须验证which php输出为/opt/homebrew/bin/php,否则非arm64原生php会导致illegal instruction: 4;需重装arch-arm64 brew install php,补全path并检查php -v含arm64字样,再用php -m确认mbstring等必需扩展已启用。

确认 PHP 是 ARM64 原生版本
直接运行 php --version 不代表环境可用——M1/M2 上常见错误是系统残留 Intel 版 PHP 或 Rosetta 转译版,一调用扩展就报 illegal instruction: 4。必须验证路径:which php 输出必须是 /opt/homebrew/bin/php;若为 /usr/bin/php 或 /usr/local/bin/php,说明不是 Homebrew ARM64 原生安装,后续所有脚本都可能崩溃。
如果路径不对,先执行:brew uninstall php
再确保 Homebrew 本身是 ARM64 版(which brew 应输出 /opt/homebrew/bin/brew),然后重装:arch -arm64 brew install php
- 装完后检查
~/.zshrc是否含export PATH="/opt/homebrew/bin:$PATH",没有就补上并source ~/.zshrc - 运行
php -v看是否带arm64字样(如PHP 8.3.7 (cli) (built: Jun 2026 09:45:12) (arm64))
运行脚本前检查必需扩展
ThinkPHP、Laravel 或 WordPress 类项目常因缺扩展直接 fatal error,比如 Call to undefined function mb_strlen()。不是代码问题,是 PHP 编译时没启用对应模块。
执行:php -m | grep -E '^(mbstring|openssl|pdo|curl|fileinfo)$'
缺任意一个,就得重装 PHP 并确保编译参数包含它(Homebrew 默认已启用,但若用 --without-mbstring 自定义编译则会丢失)。
-
mbstring:中文处理、URL 解码等基础功能依赖 -
pdo和pdo_sqlite:哪怕不用 MySQL,本地开发也常靠 SQLite 启动 -
fileinfo:上传校验、MIME 类型识别必需,ThinkPHP 6+ 默认启用
CLI 运行 vs Web 服务运行的区别
你在终端跑 php index.php 成功,不等于浏览器访问能成功——Web 服务(Apache/Nginx/PHP-FPM)用的是另一套 PHP 配置和用户权限。
关键差异点:
- CLI 使用的
php.ini路径由php --ini显示;Web 服务通常加载/opt/homebrew/etc/php/8.x/php.ini,两者内容可能不同 - Web 进程(如
_www用户)对脚本目录无写权限会导致mkdir(): Permission denied,尤其runtime或storage目录 - CLI 默认开启所有扩展,但 Web 配置里可能注释掉了
extension=opcache.so,导致性能差异明显
验证 Web 环境真实配置:建一个 info.php,内容为 <?php phpinfo(); ?>,通过浏览器访问,搜索 “Loaded Configuration File” 确认实际生效的 ini 文件。
常见卡点:脚本执行但无输出或空白页面
不是语法错,而是底层权限或配置静默失败。典型现象包括:命令行有输出,浏览器打开白屏;或报 Class 'think\App' not found(自动加载失败)。
优先排查这三项:
- 确认 Web 服务器 DocumentRoot 指向项目
public目录(非项目根目录),否则路由入口根本没加载 - 运行
sudo chown -R _www:staff storage runtime(macOS Apache 用户是_www;Nginx 默认用nobody,需同步改chown -R nobody:staff) - 检查
php.ini中display_errors = On和error_reporting = E_ALL是否启用,否则致命错误被吞掉
最易被忽略的是:storage 和 runtime 目录必须存在且可写,但不能用 chmod 777 —— macOS 对全局可写目录有额外限制,必须用 chown 改属主,而不是暴力赋权。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











