【问题标题】:Storage in laravel says symlink - no such filelaravel 中的存储说符号链接 - 没有这样的文件
【发布时间】: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

标签: php laravel


【解决方案1】:
  1. 进入/public目录并运行:

    rm storage

  2. 进入 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】:

            遵循以下三个步骤:

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

              rm 公共/存储

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

              rm 存储/应用程序/公共

            3. 运行链接命令

              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】:

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

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

                一)

                cd 公开

                b)rm storage

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

                2. 检查错误是否已修复。

                3. 如果这些步骤不能解决您的问题,请删除 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] 目录已链接。

                              【讨论】:

                                猜你喜欢
                                • 2018-07-01
                                • 2022-12-09
                                • 2019-01-11
                                • 2017-05-02
                                • 2018-06-20
                                • 1970-01-01
                                • 1970-01-01
                                • 2020-09-26
                                • 1970-01-01
                                相关资源
                                最近更新 更多