You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel9报Failed to open stream找不到文件错误解决方法

问题根因

报错来自两处代码逻辑错误,最终导致程序没有拿到路由传入的实际文章标识,直接将字面量{slug}拼接进了文件读取路径:

  • 文件路径中的变量写法不符合PHP语法:双引号内的变量必须以$开头,你代码中写的{slug}没有$前缀,PHP不会将其识别为变量做值替换,会直接作为普通字符串拼接。
  • 路由参数名与闭包接收参数名不匹配:路由定义的动态参数段为{post},但闭包内声明的接收参数是$slug,Laravel默认按参数名匹配绑定路由值,这种写法下$slug本身就无法拿到路由传入的实际参数。
可直接运行的修复代码

替换web.php中对应路由段的代码即可:

Route::get('posts/{slug}', function ($slug) {
    // 使用框架自带的resource_path助手生成路径,避免相对路径计算偏差
    $postPath = resource_path("posts/{$slug}.html");
    // 增加文件存在校验,访问不存在的文章时返回404而非致命错误
    if (!file_exists($postPath)) {
        abort(404);
    }
    $postContent = file_get_contents($postPath);
    return view('post', [
        'post' => $postContent
    ]);
});
后续排查清单

如果替换代码后仍有问题,按顺序核查:

  • 确认resources/posts目录真实存在,目录下存放的html文件名和访问时传入的slug完全一致,注意大小写敏感问题
  • 确认运行PHP进程的用户对resources/posts目录及下属文件有可读权限
  • 如果之前开启过路由缓存,执行php artisan route:clear清除缓存后再测试

内容的提问来源于stack exchange,提问作者gndulor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 19:24:20