【问题标题】:Laravel storage link in shared hosting共享主机中的 Laravel 存储链接
【发布时间】:2019-11-01 20:01:26
【问题描述】:

我在共享主机上设置存储链接时遇到问题。 因此,我无法将任何图像上传到共享主机中的存储文件夹

【问题讨论】:

  • 您最好的选择是使用file_put_contents() 将图像存储在您的公共目录中。

标签: laravel file-upload storage hosting


【解决方案1】:

您可以使用自定义方法将文件上传到您的公共目录,而不是使用 Storage 门面

if($request->has('image')){
        $img = $request->file('image');
        $ext = $img->getClientOriginalExtension();
        $name = time().'.'.$ext;
        $path = public_path('\img\uploads');
        $img->move($path, $name);
        User::where('id', $user->id)->update([
            'image' => $name
        ]);
    }

【讨论】:

  • -您可以通过另一种方式解决它,在您的公共文件夹中创建一个 symlinkexample.php 文件并将文件路径运行到浏览器中。 -然后存储文件夹将被创建到公用文件夹中。文件夹路径将是 public/storage 并链接到您的公共文件夹。 -------------------------------- -------------------------------------------- 示例 <?php $targetFolder = $_SERVER['DOCUMENT_ROOT'].'/storage/app/public'; $linkFolder = $_SERVER['DOCUMENT_ROOT'].'/public/storage'; symlink($targetFolder,$linkFolder); echo 'Symlink process successfully completed'; ?>
【解决方案2】:

在共享主机环境中使用 Laravel 可能不是最好的决定。现在可以以相同的价格获得许多不错的选择,即使您之前没有经验,您也只需要付出一些努力来了解如何使用它们。您可以使用 DigitalOceanLinodeVultr 或更多,它会为您节省大量时间。

如果您出于某种原因仍想使用共享主机并实际回答您的问题,您可以

  • 调查以设置正确的符号链接(这种可能性现在几乎无处不在)它应该类似于ln -s /home/user/laravel/storage/app/public /home/user/public_html/storage当然应该由你的路径来决定,具体取决于你的托管结构,你应该能够自己弄清楚。
  • 尝试以某种解决方法来实施。例如,您可以尝试手动将文件从storage 放入storage/app/public 文件夹(您甚至可以稍后通过使用一些脚本来自动化它)。但是变通方法会产生新的变通方法,最好不要用错误的方法来做,而要使用简单而正确的方法,即使乍一看似乎很难。

【讨论】:

    【解决方案3】:
    1. 如果您执行 storage:link in local,请删除 public_html/public/storage 中的 storage 文件夹

    2. 然后在 public_html 文件夹中创建一个 php 文件,例如 mysymlink.php

    3. 将以下代码添加到 mysymlink.php 文件中

    $targetFolder = $_SERVER['DOCUMENT_ROOT'].'/storage/app/public';
    $linkFolder = $_SERVER['DOCUMENT_ROOT'].'/public/storage';
    symlink($targetFolder,$linkFolder);
    echo 'Symlink completed';
    
    1. 访问网站 example.com/mysymlink.php

    【讨论】:

      【解决方案4】:

      只需创建一个路由并访问一次。

      Route::get('generate', function (){
          \Illuminate\Support\Facades\Artisan::call('storage:link');
          echo 'ok';
      });
      

      【讨论】:

      • 谢谢@Adrian,你是救命稻草?
      • 我把这个放在哪里?在web.php?我已经这样做了,但它似乎不起作用。
      • 是的,在 routes/web.php 中。把它放在那里然后访问路由/generate,你应该看到'ok'。如果它不起作用还有其他问题..
      猜你喜欢
      • 1970-01-01
      • 2018-06-21
      • 2017-09-20
      • 2023-03-31
      • 2021-06-14
      • 2018-10-21
      • 2015-04-12
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多