当我在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没有链接,只有存储副本!
-
如果需要备份:),请删除此存储或重命名它
-
登录到 ssh 并使用命令 pwd 获取当前文件夹,该文件夹将帮助您构建完整路径。
-
使用以下命令:
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 个小时的所有内容,但没有运气。我的情况如下:
- 上载文件夹位于子域下:
images.example.com
。 - 我使用根文档上传图像:
$_SERVER['DOCUMENT_ROOT'].'/uploads/
- 我想在该根文档中创建一个符号链接。
最后,我尝试了这个解决方案,它按预期工作:
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
这将完成工作...