共享主机中的 Laravel 存储链接

Posted

技术标签:

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

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

【问题讨论】:

您最好的选择是使用file_put_contents() 将图像存储在您的公共目录中。 【参考方案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】:

    如果您执行 storage:link in local,请删除 public_html/public/storage 中的 storage 文件夹

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

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

$targetFolder = $_SERVER['DOCUMENT_ROOT'].'/storage/app/public';
$linkFolder = $_SERVER['DOCUMENT_ROOT'].'/public/storage';
symlink($targetFolder,$linkFolder);
echo 'Symlink completed';
    访问网站 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'。如果它不起作用还有其他问题..

以上是关于共享主机中的 Laravel 存储链接的主要内容,如果未能解决你的问题,请参考以下文章

Cpanel 共享主机上的 Laravel

共享主机 Laravel 8 主机问题:Symlink 不工作

Laravel 共享主机 .htaccess

Cpanel 共享主机中的 Laravel 5.5 错误 500

Laravel 5 – 清除共享主机服务器中的缓存

Laravel 5 – 清除共享主机服务器中的缓存