xampp需php≥7.2且启用openssl、mbstring、pdo_mysql;用composer安装yii2并配置虚拟主机,确保runtime和assets目录可写,查error.log定位问题。

确认 XAMPP 的 PHP 版本是否支持 Yii2.0
Yii2.0 要求 PHP ≥ 5.4.0,但实际项目中建议用 7.2+(官方已停止对 PHP 5.x 的安全更新)。XAMPP 旧版本(如 5.6.x)自带 PHP 5.6,装了也跑不起来 Composer 或部分扩展。
- 打开
XAMPP Control Panel→ 点击Shell→ 输入php -v查看真实版本 - 若低于 7.2,别折腾升级 XAMPP 内置 PHP,直接下载新版 XAMPP(如
xampp-windows-x64-8.2.12-0-VC15-installer.exe)更省事 - 注意:XAMPP 自带的
php.ini默认关闭openssl、mbstring、pdo_mysql,这些是 Yii2 运行必需的——必须手动取消对应行前的分号注释
用 Composer 安装 Yii2 而不是手动解压
官网提供的“Basic Template”压缩包看似简单,但缺自动 autoload、无法后续更新、vendor 依赖版本混乱,上线前大概率报 Class not found 或 Failed to open stream。
- 确保 XAMPP 的
php.exe已加入系统 PATH(路径类似C:\xampp\php),否则composer create-project --prefer-dist yiisoft/yii2-app-basic basic会提示找不到 PHP - 运行命令前,先进到 XAMPP 的
htdocs目录下:cd C:\xampp\htdocs,否则项目会建在用户目录里,Apache 找不到 - 如果卡在
Installing dependencies,大概率是 Composer 源慢或被墙,临时切国内镜像:composer config -g repo.packagist composer https://packagist.phpcomposer.com
Apache 配置要绕过 webroot 权限陷阱
Yii2 的入口文件是 web/index.php,但默认 XAMPP 的 Apache DocumentRoot 指向 htdocs,直接访问 http://localhost/basic/web/ 会暴露 config/ 目录,且 URL 里带 /web/ 很丑,还容易触发重写失败。
- 不要把整个
basic/复制进htdocs,而是修改C:\xampp\apache\conf\extra\httpd-vhosts.conf,加一段虚拟主机:
VirtualHost *:80>
ServerName yii2.local
DocumentRoot "C:/xampp/htdocs/basic/web"
<directory>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
</directory>
- 同时改
C:\Windows\System32\drivers\etc\hosts,加一行:127.0.0.1 yii2.local - 重启 Apache 后,用
http://yii2.local访问,而不是http://localhost/basic/web—— 否则路由、asset 发布、CSRF token 都可能出问题
第一次访问白屏或 500 错误时优先查这三处
不是代码写错了,大概率是环境没对齐。Yii2 对权限和路径异常敏感,尤其 Windows 下大小写不敏感但路径解析仍会出错。
- 检查
basic/runtime和basic/web/assets是否可写:右键文件夹 → 属性 → 安全 → 编辑 → 给Everyone或IIS_IUSRS(取决于 Apache 运行身份)写入权限 - 查看 Apache 错误日志:
C:\xampp\apache\logs\error.log,常见错误如PHP Parse error: syntax error, unexpected '?' in .../BaseObject.php,说明 PHP 版本太低(? 是 PHP 7.0+ 三元运算符简写) - 浏览器 F12 看 Network,如果
index.php返回 500 但没内容,去basic/web/index.php开头加ini_set('display_errors', '1');和error_reporting(E_ALL);临时打开报错
Windows 上路径反斜杠、Apache 用户权限、PHP 扩展开关状态——这三个点只要漏一个,Yii2 就不肯吐错误信息,只给你一张白纸。











