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

Laravel部署至000webhost后图片上传不显示及软链接创建失败求助

解决000webhost上Laravel存储链接无法创建的问题

看起来你遇到的是000webhost共享主机环境下Laravel存储软链接创建失败的典型问题,我来帮你拆解原因并给出可行的解决方案:

为什么你的symlink命令无效?

主要有几个常见诱因:

  • 主机安全限制:多数共享主机(包括000webhost)会禁用symlink函数来降低风险,这是最可能的核心原因。
  • 硬编码路径错误:你写的/agroam/agroam/storage/app/public和/agroam/public_html/storage大概率不是服务器上的真实绝对路径——共享主机的目录结构通常是以/home/你的用户名/为根,硬编码路径很容易出错。
  • 权限不足:你的账号可能没有创建符号链接的权限,或者storage、public_html目录的权限配置不符合要求。

替代解决方案

方案1:手动映射存储目录(最简单直接)

既然软链接走不通,我们可以绕过它直接让Laravel读写public目录下的存储文件夹:

  1. 在服务器的public_html目录下手动创建storage文件夹。
  2. 把本地storage/app/public里的所有文件/文件夹,上传到服务器的public_html/storage目录。
  3. 修改config/filesystems.php中的public磁盘配置,让Laravel直接指向这个新目录:
    'public' => [
        'driver' => 'local',
        'root' => public_path('storage'),
        'url' => env('APP_URL').'/storage',
        'visibility' => 'public',
    ],
    
    这样后续上传的图片会直接存入public_html/storage,无需依赖软链接。

方案2:用Laravel辅助函数生成正确路径(尝试突破限制)

不要硬编码路径,改用Laravel内置的路径辅助函数来生成准确路径,尝试在代码中执行:

symlink(base_path('storage/app/public'), public_path('storage'));

你可以临时在routes/web.php中添加一个一次性路由来执行这段代码(用完务必删除,避免安全风险):

Route::get('/create-storage-link', function () {
    if (file_exists(public_path('storage'))) {
        return '存储链接已存在!';
    }
    symlink(base_path('storage/app/public'), public_path('storage'));
    return '存储链接创建成功!';
});

部署后访问你的域名+/create-storage-link,看看是否能成功创建链接。

方案3:通过FTP客户端手动创建符号链接

如果你的FTP客户端支持(比如FileZilla),可以右键点击public_html目录,选择「创建符号链接」,链接目标填写../storage/app/public(假设你的storage目录和public_html同级)。

方案4:调整目录权限

确保storage目录和public_html目录的权限设置为755,文件权限为644。你可以通过FTP客户端或服务器的文件管理器修改权限,避免因权限不足导致操作失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:26:11