如何为生产或子域系统创建拉拉维尔存储符号链接



当我在laravel本地开发服务器上工作时php artisan storage:link对我来说效果很好。但是当我将我的站点转移到生产服务器时,我看到我的公共存储链接是一个文件夹。然后我删除了试图创建链接的。我收到一个错误,因为我的应用程序位于根文件夹中并尝试解决此问题。

我通过另一个命令解决了这个问题,该命令用于通过终端/cmd/shh创建符号链接:

ln -s /path/to/laravel/storage/app/public /path/to/public/storage

我也使用拉拉维尔网络路线路线/网络解决了这个问题.php

Route::get('/foo', function () {
Artisan::call('storage:link');
});

另一种简单的方法是以编程方式运行php artisan storage:link命令

在路线/网络上.php

Route::get('/foo', function () {
Artisan::call('storage:link');
});

如果有人正在寻找另一个使用 php 的灵活解决方案:

Route::get('/link', function () {        
$target = '/home/public_html/storage/app/public';
$shortcut = '/home/public_html/public/storage';
symlink($target, $shortcut);
});

并对文件结构上的$target变量和$shortcut进行任何必要的更改。

您可以在该 Web 路由或任何其他函数中使用上述代码。

最简单的选择是在终端中运行以下命令

php artisan storage:link

假设您的 laravel 项目"public"目录和 "public_html" 目录不同。或者你的子域指针目录可能不同,那么使用你的子域指针目录,比如下面给出的"public_html"过程。

应用命令:$ php artisan storage:link

此命令将创建指向Laravel项目的"公共"目录的符号链接。 不在"public_html"内. 所以我们需要将"存储"链接移动到"public_html"目录。 为此,您可以直接移动。 如果它不起作用,则使用命令 . 进入"public"目录并根据您的"public_html"目录位置运行以下命令。

$ mv storage /home/yourHostinInfo/domains/domainName/public_html

路径可能会根据您的托管信息而有所不同。

使用 SSH 在 Web 服务器中创建符号链接

在Laravel文档中,应创建从公共/存储到存储/应用程序/公共的符号链接(符号链接或软链接),以使文件可从Web访问。

(此过程将在LARAVEL项目目录中创建符号链接)

以下是有关如何使用 SSH 客户端在 Linux Web 服务器中创建符号链接的步骤:

1.使用 SSH 客户端(例如 PUTTY)连接并登录到您的网络服务器。

2.使用语法将存储/应用程序/公共链接到公共/存储。

ln -s target_path link_path

示例(在 CPanel 文件目录中)

ln -s /home/cpanel_username/project_name/storage/app/public /home/cpanel_sername/project_name/public/storage

如果您使用的是CPANEL网络托管,则域根目录public_html,这可能是一个问题,因为默认情况下Laravel应用程序将尝试在您的项目根目录中查找名为public的文件夹。 要解决此问题,请打开config/filesystems.php文件并更改:

/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
public_path('storage') => storage_path('app/public'),
],

对此:

/*
|--------------------------------------------------------------------------
| Symbolic Links
|--------------------------------------------------------------------------
|
| Here you may configure the symbolic links that will be created when the
| `storage:link` Artisan command is executed. The array keys should be
| the locations of the links and the values should be their targets.
|
*/
'links' => [
base_path('public_html/storage') => storage_path('app/public'),
],

请注意,我们已将links数组值从默认public_path('storage')更改为自定义base_path('public_html/storage')目录

我在Hostinger上有一个帐户。

我在使用Laravel文件管理器时遇到了一个大问题,但现在我知道问题是什么:)

这是存储链接的问题。 我的文件夹public_html没有链接,只有存储副本!

  1. 如果需要备份:),请删除此存储或重命名它

  2. 登录到 ssh 并使用命令 pwd 获取当前文件夹,该文件夹将帮助您构建完整路径。

  3. 使用以下命令:

    ln -s

就我而言,这就像:

ln -s /home/u16345434/domains/website.name/storage/app/public /home/u16345434/domains/website.name/public_html/storage

祝你好运:)

只需在 php 文件(如 symlink.php)中编写以下代码,将其放在网站根文件夹(您在公共文件夹中放置文件的文件夹)中,然后通过在浏览器中浏览到 yourwebsite/symlink 来执行它.php

<?php
symlink('/home/yourrootfolder/yourappfolder/storage/app/public', '/home/yourrootfolder/public_html/yourappfolder/storage');

我在创建指向位于subdomain下的文件夹的符号链接时遇到问题,尝试了将近 3 个小时的所有内容,但没有运气。我的情况如下:

  1. 上载文件夹位于子域下:images.example.com
  2. 我使用根文档上传图像:$_SERVER['DOCUMENT_ROOT'].'/uploads/
  3. 我想在该根文档中创建一个符号链接。

最后,我尝试了这个解决方案,它按预期工作:

ln -s /home/customer/www/images.example.com/public_html/uploads /home/customer/www/example.com/public_html/uploads

注意:我使用PuTTY来创建该符号链接

这是在生产服务器中对我有用的代码

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

来解决问题,而不是ln -s path/to/target path/to/public/storage只需键入:

ln -srv ~/path/to/target ~/path/to/public/storage

但首先在公共中创建文件夹存储。

您所要做的就是通过SSH访问服务器,导航到您的laravel项目的根路径,例如:

cd /path/to/your/domain/public_html

然后导航到public目录(Laravel项目)并删除storage目录(如果您已上传它...

并返回到public_html并运行以下命令:

php artisan storage:link

这将完成工作...

最新更新