微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel:将上传文件夹移出 public_html 文件夹

如何解决Laravel:将上传文件夹移出 public_html 文件夹

我的项目文件夹结构如下:

.
└── /home (Inaccessible)
    └── user
        └── public_html
            ├── app
            ┊
            ├── public
            │   ├── css
            │   ┊
            │   └── upload
            ┊
            ├── .htaccess
            └── .env

如你所见,项目上传文件夹在public文件夹下,以下代码显示了我的公盘规格:

'disks' => [
        'public' => [
            'driver' => 'local','root' => public_path('upload'),'url' => env('APP_URL').'/upload','visibility' => 'public',],]

并且因为我的项目在共享主机上,所以我在 public_html 中添加一个包含以下内容的 .htaccess 文件

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>

在 .env 文件中,我添加了以下行

ASSET_URL=/public

现在我想把upload文件夹移出public_html,我希望项目文件夹的结构如下:

.
└── /home (Inaccessible)
    └── user
        ├── public_html
        └── upload

我通过如下更改公共磁盘的根地址没有得到答案,当我尝试显示照片时,我得到404 error

'root' => preg_replace("/^(.*\/).*$/","$1",$_SERVER['DOCUMENT_ROOT']).'/upload'
// OR
'root' => base_path('../upload')
//OR
'root' => dirname(__DIR__,2) . '/upload',

这可能吗?

更新
指向我的文件链接类似于 http://example.com/upload/1611343402_Colors.png

解决方法

如果你使用 laravel,上传文件夹应该在 /root/storage 中。

查看存储门面文档 https://laravel.com/docs/8.x/filesystem

它是这样工作的。命令 Storage::disk('local')->put('file.txt','Contents'); 会将文件存储在配置文件 /root/config/filesystems.php 中定义的“本地”磁盘上。我猜这就是你试图改变根参数的地方。您可以访问控制器文件、作业等中存储的任何文件。

如果您想将存储用于需要由网络服务器交付的公共资产,您需要执行以下操作:

使用 shell 命令 /root/public/storage

在文件夹 /root/storage/app/publicphp artisan storage:link 之间创建一个 symlink

enter image description here

这样您就可以像这样使用存储助手 echo asset('storage/file.txt'); 交付文件 /root/storage/app/public/file.txt

,

我不知道是否可以允许在共享服务器上直接访问 public_html 之上,即使您真的想这样做。

这是一种解决方法:创建一个加载图像的脚本,然后您可以安全地操作它,同时从任何目录加载图像。

此处概述了执行此操作的一般方法: Loading an image through PHP

来源:joschua011

$img = 'path/to/image.jpg';
header('Content-Type: image/jpeg');
readfile($img);

除此之外,只要您保护文件夹,在公用文件夹中放置图像就没有固有的问题。

,

告诉 laravel 把你的文件放在那里很容易。您可以轻松地将磁盘的根目录设置为绝对路径:

'root' => '/home/user/upload'

问题是,apache2 配置为仅处理 public_html 文件夹中的文件。

我会在您的 public_html/public/upload 文件夹和实际的 upload 文件夹之间创建一个符号链接。

ln -s /home/user/upload /home/user/public_html/public/upload

接下来,确保 apache www-data 用户文件夹对文件夹 /home/user/upload 具有适当的权限

现在您可以像以前一样将文件链接到公众,同时将它们存储在您的自定义文件夹中

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。