gpt4 book ai didi

php - Laravel 图片库逻辑

转载 作者:可可西里 更新时间:2023-11-01 12:27:07 33 4
gpt4 key购买 nike

我最近开始开发一个相当大的网站。在网站上,我想允许用户上传他们的样本作品。目前我们的资源非常有限,因此图像将存储在我们的服务器上。

我有点被逻辑困住了。所以我的逻辑是这样的。

用户创建了一个文件夹,该文件夹的名称存储在数据库中,并附加了 users id

文件夹表

id | folder        | user_id 
1 | Some folder | 1
2 | New folder | 4
3 | Nother folder | 7

图像表

id | image_name        | folder_id |
1 | image1.jpg | 1
2 | image2.jpg | 1
3 | image3.jpg | 1
4 | image4.jpg | 2
5 | image5.jpg | 2
6 | image6.jpg | 2

关系

class Folder extends Eloquent 
{
public function images()
{
return static::has_many('Images');
}
}

class Image extends Eloquent
{
public function folder()
{
return static::belongs_to('Folder');
}
}

服务器上的文件夹结构

- samples
-user_id
- folder_id
- image1
- image2
- image3

如您所见,用户创建了一个文件夹,文件夹创建后,用户使用文件夹id将图像名称上传到数据库中,并显示图像将是上面描述的方式。

所以我的问题。

  • 你认为这是一个好的逻辑吗
  • 这会导致 future 出现问题吗
  • 你会为这个功能提供什么

我最神圣的是两件事。

我认为这会导致一个巨大的数据库,其次是id's,x次以后当有更多的用户时,id's会增加,我知道这听起来很奇怪,但是由于很多用户上传图片会导致巨大的 ID,我的意思是它可能会达到数百万,有没有办法解决这个问题?

谢谢你的帮助

最佳答案

好的 - 让我们将其分解为几个子答案;

问题:

- Is this a good logic in your opinion
- Can this lead problems in the future
- What would you offer for this functionality

答案:

逻辑听起来很合理 - 但我很好奇您会将图像存储在哪里?在 public_html 内部 - 还是在网络根目录之外?如果您在 public_html 中有图像 - 并允许浏览器直接访问它们,它将允许用户“猜测”其他用户文件夹并访问这些文件夹。您需要安全地存储数据。

要在 webroot 之外制作图像,并确保只有授权用户才能访问它们 - 你应该使用 readfile() .像这样的事情就可以了

function user_file($file_name = "")
{
if ($file_name)
{
// Ensure no funny business names to prevent directory transversal etc.
$file_name = str_replace ('..', '', $file_name);
$file_name = str_replace ('/', '', $file_name);

// now do the logic to check user is logged in
if (Auth::check())
{
// Serve file via readfile() - we hard code the user_ID - so they
// can only get to their own images
readfile('../your_app/samples/'.Auth::user()->id.'/'.$file);
}
}
}

问题:

I think this will lead to a huge database, second are the id's, after x time when there will be more users, the id's will increase, and i know this will sound strange, but since lot of users will upload images will lead to huge id's, what i mean by this it will maybe reach millions

答案:

根据mySQL features page :

We use MySQL Server with databases that contain 50 million records. We also know of users who use MySQL Server with 200,000 tables and about 5,000,000,000 rows.

那就是 50 亿行。你可能会得到几百万。所以你在这里是安全的(取决于你的硬件)。

问题:

...but since lot of users will upload images will lead to huge id's, what i mean by this it will maybe reach millions, is there a way to solve this problem?

回答:

如果您不想存储数百万条记录,并且担心性能,一种选择是保留文件夹表,但删除图像表。相反,您可以使用 scandir()在文件夹上 - 让 PHP 从目录本身检索文件名。那么你就没有那么多的开销。

<?php
$list_of_user_files = scandir("$user_id/$folder_id");
foreach ($list_of_user_files as $file) {
echo "File: $file <br>";
}
?>

关于php - Laravel 图片库逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14704998/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com