核心原因是PHP找不到目标文件,常见于vendor目录缺失、environments结构不全、权限不足或open_basedir限制;需依次检查目录存在性、执行composer install、验证文件权限及服务器配置。

遇到 failed to open stream: No such file or directory 报错,核心原因基本是 PHP 找不到目标文件——不是代码写错了,而是路径、目录或环境缺了关键东西。Yii2 对目录结构和依赖非常敏感,报错位置不同,解决方向也不同。
检查 vendor 目录是否存在
这是最常见的情况:项目根目录下没有 vendor 文件夹,导致 index.php 或 autoload.php 无法加载 Composer 安装的类库。
- 进入项目根目录(如
/var/www/html/myapp),执行ls -l vendor确认该目录是否存在 - 如果不存在,说明未用 Composer 正确安装 Yii2 —— 不要手动下载 ZIP 包或复制代码,必须运行:
composer create-project --prefer-dist yiisoft/yii2-app-basic myapp - 若已存在
composer.json但无vendor,直接运行:composer install(首次安装)或composer update(更新依赖)
确认 environments 目录是否完整
执行 php init 后选了 Development 或 Production 环境却报错“Failed to open stream”,往往是因为 environments/ 下缺少对应子目录或示例配置文件。
- 检查路径:
environments/dev/common/config/main-local.php.example是否真实存在 - 若整个
environments目录被误删,可从官方 GitHub 仓库重新拉取原始结构:git clone https://github.com/yiisoft/yii2-app-basic.git,再复制environments文件夹过来 - 确保执行
php init时当前用户对environments/和common/config/等目标路径有读写权限
验证 PHP 扩展与路径权限
有些报错表面是“找不到文件”,实际是 PHP 进程没权限读,或扩展缺失导致自动加载机制中断。
- 检查 PDO、mbstring、openssl 等 Yii2 必需扩展是否启用:
php -m | grep -E "pdo|mbstring|openssl" - 在 Linux 上,Web 服务器(如 Nginx/Apache)运行用户(如
www-data或nobody)需对vendor/、runtime/、web/assets/等目录有读取权限,必要时运行:chown -R www-data:www-data /var/www/html/myapp - Windows 下若用 IIS,注意 NTFS 权限中是否禁用了
IUSR账户访问项目目录
留意 open_basedir 限制和伪静态配置
部署到生产环境(尤其宝塔、阿里云等面板)时,安全策略可能拦截正常文件包含。
- 查看错误信息中是否含
open_basedir restriction in effect—— 若有,需在 PHP 配置或网站设置中放宽路径限制,例如:open_basedir = /www/wwwroot/myapp/:/tmp/:/proc/ - Apache 或 Nginx 的伪静态规则若配置不当,可能导致请求被错误重写,使
index.php无法正确加载 autoload;确认 Web 服务器配置中已启用重写模块,并使用 Yii2 官方推荐规则


















