Laravel 图片库逻辑

2023-11-21

我最近开始开发一个相当大的网站。 在该网站上,我希望允许用户上传他们的示例作品。 目前我们的能力非常有限,因此图像将存储在我们的服务器上。

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

用户创建一个文件夹,其名称存储在数据库中users id附于其上

文件夹表

Rows

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

图片表

Rows

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

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

所以我的问题。

  • 您认为这是一个很好的逻辑吗
  • 这会导致未来出现问题吗
  • 您会为此功能提供什么

我最神圣的是两件事。

我认为这将导致一个巨大的数据库,其次是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

Answer:

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

要在 webroot 之外制作图像,并确保只有授权用户才能访问它们 - 您应该使用读取文件()。像这样的事情就可以解决问题

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);
         }
    }
}

问题:

我认为这将导致一个巨大的数据库,第二个是id,在x次之后,当会有更多用户时,id会增加,我知道这听起来很奇怪,但由于很多用户会上传图像会导致巨大的数据库id,我的意思是它可能会达到数百万

Answer:

根据mySQL 功能页面:

我们使用 MySQL Server 和包含 5000 万条记录的数据库。我们还知道使用具有 200,000 个表和大约 5,000,000,000 行的 MySQL Server 的用户。

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

问题:

...但是由于很多用户会上传图像会导致巨大的 ID, 我的意思是它可能会达到数百万,有没有办法 解决这个问题?

Answer:

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

<?php
    $list_of_user_files = scandir("$user_id/$folder_id");
    foreach ($list_of_user_files as $file) {
          echo "File: $file <br>";
    }
?>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Laravel 图片库逻辑 的相关文章

  • mongodb对话系统

    我正在实施一个verymongodb 上的简单对话系统 这个想法应该是 当我打开一个 convo 时 它应该显示发送和接收的消息 到目前为止一切正常 并且应该非常容易 通过使用像这样的伪代码这样的简单查询 from my id AND to
  • Laravel 5 与 SAML 2 和现有 IDP 集成

    我使用 Laravel 5 我正在尝试将 SAML 2 0 与其集成 我找到了这个包 https github com aacotroneo laravel saml2 https github com aacotroneo laravel
  • PHP 警告 ZipArchive::extractTo():权限被拒绝

    我创建了一个应用程序 它使用 ZipArchive 类 php 中的标准 中的方法 extractTo 并在 Windows 7 上的本地主机 apache 服务器上对其进行了测试 没有任何问题 但是当我在一些unix生产服务器上尝试过它之
  • 将 SQL 中的数据存储在数组中

    我正在尝试将 sql 数据库中的数据存储到数组中 目前我有这个 query mysql query SELECT FROM InspEmail WHERE Company LIKE company while row mysql fetch
  • 如何将 ctype_alpha 与 UTF-8 结合使用

    如何将 ctype alpha 与 UTF 8 一起使用 我有这个代码 if empty POST false if isset POST first name empty POST first name if ctype alpha PO
  • 适用于 Windows 的 PHP 支持的 GUI 应用程序

    我知道 PHP 是一种解释性语言 对于基于 Web 的事物来说 不是为在实际操作系统上运行 GUI 应用程序而设计的 但是有没有办法呢 基本上 是否有一个框架 系统允许我创建 本机 基本上是二进制文件 exe 看起来像带有本机控件和所有内容
  • scipy.misc.imshow RuntimeError('无法执行图像视图')

    我正在测试scipy misc imshow https docs scipy org doc scipy 0 15 1 reference generated scipy misc imshow html我得到了运行时错误 无法执行图像查
  • SimpleSAMLPHP 重定向循环

    我们正在尝试使用自定义 mysql 数据库设置 sso 但它在以下两个请求之间进入无限循环 POST http 192 168 0 15 simplesaml module php core loginuserpass php 设置Cook
  • PHP header() 和 jquery mobile

    我想使用 php header Location newpage php 进行重定向 我没有收到错误 但 Jquery mobile 似乎无法加载目标页面 并且地址栏仍保留旧地址 请问您有什么建议吗 Thanks 尝试添加data ajax
  • 需要 mysqli_fetch_all 的替代方案

    我有一个 php mysqli 代码 可以找到一个我的本地服务器 但是在我的服务器上使用它时 我得到了一个 Fatal error Call to undefined function mysqli fetch all in home3 t
  • Laravel Eloquent:提取以提供的字符串列表开头的所有条目

    以下请求从用户表中提取 name Albert 或 name Alberto 或 name Ana 的所有条目 users DB table users gt whereIn name Albert Alberto Ana gt get 是
  • 在 MySQL 中搜索多个单词

    我使用 HTML 表单来允许用户查找数据库表中的条目
  • 解析 PHP 响应:未捕获的语法错误:意外的标记 <

    我正在使用 AJAX 来调用 PHP 脚本 我唯一需要从响应中解析的是脚本生成的随机 ID 问题是 PHP 脚本会引发许多错误 这些错误实际上很好 不会妨碍程序功能 唯一的问题是当我跑步时 parseJSON response I get
  • 从外部 bash 设置环境变量

    我试图使用 PHP 从命令行 设置 bash 环境变量 但没有成功 buff array buff VARTESTKEY VARTESTVALUE buff export VARTESTKEY file put contents scrip
  • 无法在 Centos 上安装 php-mysqli 扩展

    我正在尝试将 mysqli 扩展安装到 php yum install php mysqli 我收到下一个错误 Transaction Check Error file usr share mysql charsets Index xml
  • sqlsrv_num_rows 不返回任何值

    我正在尝试获取查询中返回的行数 while 循环遍历结果有效 但由于某种原因 sqlsrv num rows 不返回任何值 result SELECT from dtable WHERE id2 apple query sqlsrv que
  • PHP 中的嵌套 JSON 输出

    我正在为 iOS 应用程序构建 API 并尝试将 mySQL 数据转换为 JSON 字符串进行处理 所需的输出将需要顶级订单详细信息 例如客户名称和地址 然后是订购的产品子数组 我需要的两个表中有相当多的字段 我希望拥有所有字段 我已经构建
  • 如何显示不同页眉的页面? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在为我的学校项目开发网站 但我遇到了一个问题 我在每个页面上显示一个标题 我的标题之一包含登录表单 另一标题包含用户名 搜索栏等 问题是
  • PHP - 查找和比较日期

    你好 我有 foreach 我可以在其中获取数据库中的事件数据 我使用数据库中的日期名称 例如 event date 我需要在一个 div 中比较具有相同日期和输出的操作 例如我有这个事件 活动一 9 月 13 日 活动二 9 月 1 日
  • 处理查询字符串参数时 Codeigniter 缓存问题

    问候 我正在编写一个 CI Web 应用程序 它实现标准文件缓存功能 如下所示 this gt output gt cache n 我使用了段和查询字符串参数的组合 因此似乎遇到了问题 我在用例和输出类代码中看到的是 缓存仅基于段 像这样

随机推荐

  • 如何在 OS X Yosemite 上的 Apache 2.4 中安装 mod_perl 2.0.9?

    随着 OS X 10 10 Yosemite 的发布 Apple 将其 Apache 服务器升级到了 2 4 版本 发布时 mod perl 2 0 8 与 Apache 2 4 不兼容 mod perl 2 0 9 尚未正式发布 更多信息
  • 模拟本地主机上的慢速互联网连接

    我使用 c asp net 和 iis 我想在我的电脑上模拟慢速互联网连接来测试我的应用程序 我可以控制iis的带宽吗 请不要建议 System Threading Thread Sleep someDuration 在 c 文件中 您可以
  • Android 图像捕捉时内存不足

    我有一个拍摄照片的活动 具有全部可能的分辨率 因此相当大 应用程序有机会分析它们 一次仅处理一张照片 问题是我在拍了 4 5 张照片后遇到了 内存不足 的情况 我懂了 dalvikvm heap 5070745 字节分配内存不足 字节大小不
  • 如何使用 Float(在打印样式表中)修复此打印布局?

    我有一个页面 其中包含网格格式的多个图表 如下所示 每个图表都显示在一个包装中float left图表所在的 div 有overflow auto 这给出了将图表包裹到屏幕宽度的所需布局 我遇到的问题是 在打印模式下 这只打印一页并丢失其余
  • TableView 就像 iPhone 中的通讯录应用程序

    嘿 我正在开发一个联系人应用程序 我想要具有相同类型的 Tableview 和添加按钮 因此 当用户添加新联系人时 它将打开一个新视图 其中包含标准按钮和文本字段等 如何使应用程序向每个新视图添加相同的功能 我希望这是有道理的 先感谢您 这
  • 包括 javascript 到 google 网站

    我试图在 Google 协作平台中包含一个简单的 javascript 但按下按钮时我什么也没得到 我将代码放入 HTML 框中 该代码在本地测试时完美运行 这是我的代码
  • 如何使用 ArrayList 正确实现 Parcelable?

    我在上课时遇到困难Parcelable 问题是 我正在尝试向包裹中的一个成员写信 该成员是ArrayList
  • 与R语言匹配以获得位置

    我使用 match 来获取元素是否在列表中 例如我的清单是 c a b h e and so on 如果我想查看元素 h 是否在列表中 我可以这样使用 match if h in v do something 如何获取列表中找到元素的位置
  • Firestore 安全规则:仅当新文档 ID 与用户 ID 相同时才允许用户创建文档

    当用户第一次登录时 我还需要调用一个函数 在我的 firestore 用户集合中创建一个文档来存储他们的个人资料数据 使用Web SDK 我之前使用带有 firebase 函数的新用户触发事件 但等待冷函数启动的速度太慢 安全规则要求 需要
  • Haskell:模块导入带来不必要的二进制增长

    当我通过以下方式之一将 大 模块导入主模块时 import Mymodule import qualified Mymodule as M import Mymodule MyDatatype 与我不导入该模块时相比 编译后的二进制文件增长
  • 如何限制android中edittext的输入时间

    我必须允许用户在动态编辑文本中仅输入 格式的时间 有什么方法可以实现吗 我使用了下面的代码 但它不起作用 我可以输入超过 24 个值的数字 例如 45623 5689 edit setInputType InputType TYPE DAT
  • 如何使用 Edge 浏览器在 VSCode 中调试 Angular 应用程序?

    我在用边缘延伸 下面是配置launch json configurations name ng serve type edge request launch url http localhost 4200 webRoot workspace
  • 自定义图例/图像作为传单地图中的图例

    我用自定义图标作为标记构建了一个地图 您可以在我的 jsfiddle 中查看代码和结果 https jsfiddle net marielouisejournocode x24stb0m 我尝试更改 正常 图例代码以将图片放在那里 但我对
  • 由于(据称)未跟踪的文件而导致文件覆盖的 Git 警告

    尝试从 git repo 中拉取 但得到以下输出 我认为这些文件被跟踪 它们应该被跟踪 但它表明它们没有被跟踪 它们不在 gitignore 中 我在分支后面进行了大约 5 10 次提交 git pull rebase origin mas
  • 观察 Vuejs 中 window.scrollY 的变化

    我有一个非常简单的应用程序 有 2 个组件 App vue和另一个组件 Home vue我在其中保存应用程序的其余结构 粘性标题和一些带有可滚动到的锚点的部分 我想对粘性标题应用一个类 以在页面滚动时最小化徽标 所以我想我会留意任何变化wi
  • 按值传递(StringBuilder 与 String)[重复]

    这个问题在这里已经有答案了 我不懂为什么System out println 名称 输出Sam不受方法的 concat 函数的影响 而System out println 名称 输出Sam4作为该方法的追加方法的结果 为什么 StringB
  • 使用新模型和防护的 Laravel 身份验证失败:未定义索引:模型

    我正在尝试使用额外的模型和防护来验证我的 Laravel 应用程序 5 8 问题是 我在以下登录方法中收到 未定义索引 模型 错误 有什么想法我做错了吗 我已经在 Laravel 5 7 版本中使用了这个集成 并且它在那里工作没有任何问题
  • 使用 Firebase FCM 时为什么无法折叠推送通知?

    const options priority high collapseKey user id const deviceTokensPromise db ref users fcm tokens user id once value dev
  • 如何为 32 位位图生成单色位掩码

    在 Win32 下 通过执行以下操作从位图生成单色位掩码以供透明度使用是一种常见技术 SetBkColor hdcSource clrTransparency VERIFY BitBlt hdcMask 0 0 bm bmWidth bm
  • Laravel 图片库逻辑

    我最近开始开发一个相当大的网站 在该网站上 我希望允许用户上传他们的示例作品 目前我们的能力非常有限 因此图像将存储在我们的服务器上 我有点被逻辑困住了 所以我的逻辑是这样的 用户创建一个文件夹 其名称存储在数据库中users id附于其上