在Web服务器上存储和检索图像的最佳方法是什么?

时间:2016-01-21 17:01:15

标签: php sql image

我的网站很大程度上依赖于我的sql数据库。我将产品信息存储在数据库中,并使用php检索和格式化。我想在等式中添加图像,但不知道从哪里开始。它们是高分辨率的,所以我不认为将它们存储在实际的数据库中,但我不希望其他管理员花费数小时来输入产品信息和图像。按照惯例,管理员填写表格,验证信息是否正确,然后存储信息然后显示在网站上。谈到图像时,我能想到的最好的方法是将图像名称和位置添加到产品信息中并使用php调用它,但我不希望我的管理员花一整天时间来命名照片并手动输入名称。任何想法将不胜感激。

2 个答案:

答案 0 :(得分:0)

就个人而言,我建议将图像存储在一个耐用且可扩展的存储设施中,例如Amazon S3,这可以为您消除很多负担,并且可以通过经济高效的CDN托管图像。规模(小或大)。

您无需担心人工手动命名图像文件,因为它们可以通过代码随机分配唯一名称。例如,您可以使用映像文件的md5总和来唯一标识映像,并仅将其S3存储桶和对象ID存储在数据库中,即使您决定稍后更改某些信息,也可以轻松地从Web检索它们。

此外,由于您已经声明要将图像与数据库中的特定产品相关联,因此可能无需全面识别全面的唯一图像数据。您可以将其限制为相关产品,这可能就好了。

答案 1 :(得分:0)

这样做的最佳方法是保存在网站上,比如说一个桶,更好的是 CDN [比如AWS S3],而不是在你自己的服务器上,并存储URL路径和名称你的数据库。 DataBases具有存储图像的功能,但我不建议您使用它。

工作流程是创建一个表单,其中可以将图像上传到服务器,然后在 item_images 表中插入名称,扩展名和网址。< / p>

检索图片时,例如在产品目录中,只需查询数据库中的网址,然后使用 PHP 向用户显示,将网址放在 src 中每个 img 标记的属性。

<img alt="" src="<?php echo img_url[];?>" width="" class="">

考虑:

  1. 图片等文件需要特定的 enctype

    <FORM id="" method="post" action="" enctype="multipart/form-data">
    
  2. 文件不是通过$ _POST或$ _GET捕获的,而是通过$ _FILES数组捕获的。

  3. 在存储到服务器之前清理上传的文件。避免 .exe .php 以及其他许多人。

  4. 使用 GETIMAGESIZE()限制图像的大小和模仿类型。

  5. 使用 MOVE_UPLOADED_FILE 将图像物理存储在服务器上,因为在此之前,文件只是临时文件。

  6. 对于命名图像,最好使用语义Web方法,并将其与每个项目的ID相结合。

    $image_name=$item_category.$item_id.$extension