laravel 中的存储说符号链接 - 没有这样的文件

Posted

技术标签:

【中文标题】laravel 中的存储说符号链接 - 没有这样的文件【英文标题】:Storage in laravel says symlink - no such file 【发布时间】:2018-05-04 16:47:15 【问题描述】:

我在 public_html/app 文件夹中的共享主机上部署了 laravel 应用程序。这是公共文件夹中的所有内容。在 /../../files 我有其余的文件。当我做 php artisan storage:link in files 文件夹时,我的控制台说

[ErrorException]                      
  symlink(): No such file or directory

在本地主机上,我将文件上传到 storage/uploads 文件夹。现在做什么?我尝试更改链接,但对我没有任何效果...

【问题讨论】:

为什么是 storage 而不是 public/assets ?我确定有路径问题尝试另一种方式 css 和 js 文件我在公共场合,但我的意思是例如用户上传的图像在 storage/uploads/images/ 改用storage_path() 我不明白 @Programmmereg,您要重命名public 文件夹吗?如果是这样,请尝试将其重命名为 public 【参考方案1】:

    进入/public目录并运行:

    rm storage

    进入 Laravel 根目录并运行:

    php artisan storage:link


2018 年 5 月 1 日编辑

当将 laravel 项目移动/复制到其他文件夹时会出现此问题。

存储链接仍然存在,因此导致异常错误。 public/storage 文件夹存在并指向错误的位置,需要使用rm storage 命令删除。

之后在终端运行php artisan storage:link,它将创建存储链接。

每次移动/复制/部署 laravel 时都需要这样做!

【讨论】:

另外,如果你使用 Laravel Orchid,你可能还需要rm public/orchid && ./artisan orchid:link 还要小心,如果您的部署脚本删除了存储符号链接然后失败,然后您再次运行它并且符号链接已被删除,您的部署脚本可能会在尝试删除已经消失的内容时抛出错误,并失败。小心那个边缘情况。 你拯救了我的一天..谢谢。【参考方案2】:

我在使用共享主机时遇到同样的错误,我的公共目录移动到 public_html 或不同的目录 喜欢 : 根名称“项目”中的项目目录 和根名称“public_html”中的公共目录

当通过 Artisan::call('storage:link'); 运行 artisan 命令时然后面对这个错误。

解决方案: 第一个需要在 app/Providers/AppServiceProvider 注册方法中绑定你的公共目录

 $this->app->bind('path.public', function() 
    return base_path('../public_html');
 );

现在运行命令它工作正常

【讨论】:

【参考方案3】:

以防万一你在这里仍然没有答案。

我遇到了麻烦,因为我在本地进行了符号链接,然后将文件复制到服务器。为了使它工作,我做了以下工作:

$  cd path/to/laravel/root

// if public does not exist, first create it.
$  cd public

// if public/storage does not exist, first create it.
$  rm -r storage

$  cd ..

// Now it should work
$  php artisan storage:link 

【讨论】:

这很有名,创建一个目录来删除它,好主意!【参考方案4】:

这通常发生在将 Laravel 应用移动到另一个目录之后

实际存储目录为“/AppName/storage/app/public/”

Laravel 创建一个指向实际存储目录“/AppName/public/storage”的符号链接

其他含义

"/AppName/public/storage" 指向 => "/AppName/storage/app/public/"

在将根应用程序目录更改为“/AnotherAppName/”时,符号链接仍将指向旧路径

"/AnotherAppName/public/storage" => "/AppName/storage/app/public/"

我的解决方案是使用手动更新符号链接

ln -sfn /AnotherAppName/storage/app/public/ /AnotherAppName/public/storage

【讨论】:

【参考方案5】:

创建新的php文件并将这段代码放在文件中:

<?php
symlink('/home/CpanelUser/storage/app/public', '/home/CpanelUserpublic_html/storage');
?>

“CpanelUser”更改为您的 cpanel 用户名或主机名。

将此文件上传到网站的 public_html 文件夹 (www) 在浏览器中使用写入站点名称+此文件执行文件 完成!

示例: 我的文件名是 symlink.php,站点名称是 www.anysite.com 将 symlink.php 上传到主机中的 public_html 文件夹并在浏览器中获取网址

http://www.anysite.com/symlink.php

在 laravel 的 public 文件夹中执行此文件存储文件夹 creite 并链接到应用程序中的存储文件夹。

【讨论】:

【参考方案6】:

任何将来使用 Laravel Forge 的人。我在 Forge 中重命名域名时遇到此错误。

解决方案是进入公共目录并删除已从原始域复制的现有符号链接。

删除此符号链接后,我能够再次运行php artisan storage:link,并且运行正常。

【讨论】:

【参考方案7】:

要在您的服务器上修复此错误,请将目录更改为公共目录并删除存储文件夹的符号链接。

以下命令将帮助您从公用文件夹中删除符号链接:

cd public
rm storage

删除符号链接更改目录到主文件夹后,使用:

cd ..

现在使用以下命令创建符号链接:

php artisan storage:link

成功运行命令后,您应该会收到以下消息

The [public/storage] directory has been linked.

希望这篇文章对你有所帮助。

SYMLINK(): No Such File or Directory Laravel

【讨论】:

【参考方案8】:

遵循以下三个步骤:

    public 文件夹中删除存储文件。

    rm 公共/存储

    如果根目录中有存储文件夹,请删除应用文件夹中的公共文件。

    rm 存储/应用程序/公共

    运行链接命令

    php artisan storage:link

【讨论】:

删除 storage/app/public 对我有用。【参考方案9】:

确保 .env 文件中的 APP_URL 配置设置正确。之后运行以下命令行:

php artisan config:cache
php artisan storage:link

【讨论】:

【参考方案10】:

在我的情况下,转到符号链接部分中的 config/filesystem.php,我删除了 public_path 函数并在其中编写了自己的路径,然后再次运行 php artisan storage:link 命令。

 'links' => [
    '/var/www/storage' => storage_path('app/public'),
],

为我工作。

【讨论】:

【参考方案11】:

如果问题尚未解决。 执行以下步骤:

    从公用文件夹中删除存储链接或运行这些命令。

一)

cd 公开

b)rm storage

    转到存储文件夹并检查是否app/public 文件夹存在,否则创建新文件夹。

    检查错误是否已修复。

    如果这些步骤不能解决您的问题,请删除 storage 文件夹并创建新的 storage 文件夹,其中包含所有必要的文件夹。

storage 文件夹包含: app, framework,logs

app 包含:public framework 包含:cache, data,sessions,testing, views

【讨论】:

【参考方案12】:

我的问题是符号链接没有放在 /localhost/public/ 中,而是放在 /localhost/storage/app/ 中 当我删除 /localhost/storage/app/ 中的符号链接时,工匠命令就像一个魅力

在我的代码中我放置了这个以防止创建错误的符号链接

Route::get('/clear', function () 
    Storage::deleteDirectory('public');
    Storage::makeDirectory('public');

    Artisan::call('route:clear');
    Artisan::call('storage:link', [] );
);

【讨论】:

【参考方案13】:

如果您使用共享主机或者您已将项目部署在具有 cPanel 或 DirectAdmin 的服务器上,您可能拥有一个 public_html 而不是 public 文件夹。

所以我们通常做的一件事是将 Laravel 的 public 文件夹更改为 public_html。 然后我们转到我们的AppServiceProvider 并借助以下代码绑定新路径:

$this->app->bind('path.public', fn() => base_path('/public_html'));

但是您应该知道配置文件在您的提供程序的这些注册方法之前加载,因此您还必须在内核引导您的配置文件之前绑定它。

为此,请打开 index.php 并在定义的 $app 变量之后编写以下代码:

$app->bind('path.public', fn() => base_path('/public_html'));

我知道这可能看起来不是标准方式,但它工作得非常好,而且我还没有发现任何关键问题!

【讨论】:

【参考方案14】:

我正在使用 Vagrant 并且遇到了同样的问题。我删除到public/storage中的存储目录,但使用命令php artisan storage:link时无法解决问题。

因此,我使用 ssh 连接到我的 vagrant box 并在那里运行命令。它有效,所以如果你正在运行 Vagrant 并且遇到同样的问题,这可能会有所帮助。

【讨论】:

【参考方案15】:

删除现有的存储符号链接(public/storage)然后运行 再次php artisan storage:link 命令。

【讨论】:

【参考方案16】:

就我而言,我发现因为我已将所有 /public Laravel 文件移动到 public_html(在我的共享服务器上),所以 /public Laravel 目录不再存在。

创建一个新的“公共”目录后,我能够成功运行 'php artisan storage:link' 命令。

【讨论】:

【参考方案17】:

在 web.php 中添加这个,然后点击这个 'BASE_URL/linkstorage' URL 一次。 现在检查将在公用文件夹中创建存储文件夹。这将解决您的问题。

Route::get('/linkstorage', function () 
    $targetFolder = base_path().'/storage/app/public';
    $linkFolder = $_SERVER['DOCUMENT_ROOT'].'/storage';
    symlink($targetFolder, $linkFolder); 
);

【讨论】:

【参考方案18】:

更多即时我改进@suresh-pangeni的答案

mv storage storage.bak // just for backup
mkdir -p storage/app/public,framework/cache,data,sessions,testing,views,logs
php artisan storage:link

现在它的工作 不要忘记 转到/public 目录并运行: 然后 rm storage 在运行上述命令之前。

☺ pa 存储:链接 生产 9999 ✗ [public/storage] 目录已链接。

【讨论】:

以上是关于laravel 中的存储说符号链接 - 没有这样的文件的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 存储符号链接图像视图

在laravel 5.4(存储文件夹)中更改默认的“符号链接”文件夹

为啥我部署的 Laravel 8 应用程序无法通过符号链接在存储目录中找到图像?

图像不会上传到Laravel Project中的public_html文件夹

配置文件图片的 Laravel Spark 符号链接不起作用

在 laravel 5.2 中创建符号链接时出错?