在 MAMP 环境下跑 PHP 脚本,有个基本前提必须搞清楚:它不能像普通文件那样双击运行,也不能直接在浏览器里打开文件路径(比如 file:///Users/xxx/index.php)。正确的做法是,让 Apache 通过 HTTP 协议来解析执行。只要 Apache 服务在跑、文件放对了地方、URL 写对了,index.php 就能正常工作。
Apache 没启动或端口写错是最常见失败原因
很多人输入 http://localhost/index.php 后,看到页面空白或者报错,第一反应就是代码有问题。其实,大多数情况下,问题出在服务没起来,或者端口没写对。
- 打开 MAMP 控制面板,先确认 Apache 和 MySQL 的状态灯是不是绿色。如果不是,点一下
Start Servers启动它们。 - MAMP 默认的 Apache 端口是
8888,不是常见的80。所以,正确的 URL 必须带上端口号:http://localhost:8888/index.php。 - 如果你改过端口(比如改成
80),要确保系统允许这么做(通常需要输入管理员密码)。否则,Apache 启动会失败,状态灯也不会变绿。 - 还有一点,别在 URL 里加上
/htdocs/或/MAMP/这样的路径——它们是磁盘上的真实路径,不是 Web 访问路径。
文件必须放在 Document Root 目录下
MAMP 只解析放在“文档根目录”里的 PHP 文件。默认情况下,这个目录在 macOS 上是 /Applications/MAMP/htdocs/,在 Windows 上是 C:\MAMP\htdocs。当然,你也可以自己修改。
- 直接把
test.php丢进htdocs文件夹,然后访问http://localhost:8888/test.php就行。 - 如果放在子目录里,比如
htdocs/blog/index.php,对应的 URL 就是http://localhost:8888/blog/index.php。 - 想换根目录?去
Preferences → Web Server → Document Root修改路径(比如改成~/Sites/myapp),改完之后必须重启 Apache 才能生效。 - 一个容易混淆的点:在 Finder 或资源管理器里看到的路径,和浏览器地址栏里写的路径是两码事——浏览器的路径永远是从 Document Root 开始计算的。
怎么确认 PHP 引擎真在工作,而不是只返回源码
页面能打开,不等于 PHP 在执行。最常见的一种“假成功”表现是:浏览器直接显示了原始代码 ,或者弹出了下载对话框。
- 在 Document Root 下新建一个
info.php文件,里面只写一行: - 访问
http://localhost:8888/info.php——如果看到一个大表格,里面包含 PHP 版本、Loaded Modules 等信息,说明 PHP 运行正常;如果看到代码原文,或者出现 500 错误,那就说明 Apache 没有加载 PHP 模块。 - MAMP 免费版默认就启用了 PHP,但如果你切换了 PHP 版本(比如从 8.1 切换到 8.2),必须重启 Apache 才能让新版本生效。
phpinfo()页面顶部会显示当前实际运行的 PHP 版本,别只看 Preferences 里选的那个,要以这个为准。
命令行也能跑,但和 Web 环境不等价
在终端里执行 php script.php,是绕过了 Apache 的纯 CLI 模式。这种模式适合调试逻辑,但无法测试 $_GET、$_POST、session、rewrite 规则这类 Web 特性。
- 先确认终端能调用到 PHP:输入
php -v看是否输出版本号。如果报command not found,说明 MAMP 的 PHP 没有加到系统的 PATH 环境变量里。 - 进入文件所在目录,运行
php test.php,输出会直接显示在终端里。 - CLI 模式用的是另一套配置(
php.ini路径通常不同),比如upload_max_filesize、extension_dir这些设置,都可能和 Web 模式不一致。 - 某些扩展(比如
mysqli、pdo_mysql)在 CLI 下默认是关闭的,需要手动启用。
真正容易被忽略的三个点:Document Root 路径、端口号、以及 PHP 版本切换后是否重启了 Apache。这三个环节任何一处出错,都会让脚本“看起来没反应”。别急着改代码,先用 info.php 验证一下环境是否就绪。