图像存储 - 更好的方式

时间:2012-08-06 10:31:06

标签: php file-upload seo

在我的项目中,我将图像(由用户上传)存储在每个相应产品的文件夹中。

例如,要添加产品,会向用户显示表单。用户填写有关产品的详细信息,并从他的计算机中选择一些图像(5张或更多图片)。提交后,我会将产品详细信息存储在名为Products的表中。对于上传的图片,我创建了一个这样的文件夹:http://mysite.com/uploads/123/此处123是新添加的产品的产品ID。并且所有图像都保存在其中。

问题:

  • 如何跟踪上传的图像(或其文件名)以便以后显示?也就是说,当添加新产品时,我的脚本将创建一个花哨的uri文本。例如:http://mysite.com/this-is-my-new-product。因此,如果用户访问此链接,则应显示属于该产品的所有图像。为此,我必须保留一个单独的表格,其中包含产品ID和文件名?并查询此表并从中回显文件名?或者扫描文件夹(例如:http://mysite.com/uploads/123/*.jpg)并逐个回显图像,即。没有使用单独的表?

  • 如果使用花哨的uri作为图像的文件名,可以吗?示例:/uploads/123/this-is-my-new-product1.jpg/uploads/123/this-is-my-new-product2.jpg/uploads/123/this-is-my-new-product3.jpg等?因此,用户会将第一张图片的路径视为http://mysite.com/uploads/123/this-is-my-new-product1.jpg。这是物理地址。它会帮助SEO吗?或者这是不好的做法?如果这很好,那么列出我应该使用的所有图像scanddir()

请引导我走正确的道路。 Thanku

2 个答案:

答案 0 :(得分:1)

1.i建议您创建另一个表来存储带有产品ID的图像文件名。

2.对于图像文件名,使用一些唯一的随机名称和原始文件名,您可以使用PHP的uniqid生成文件名,或者您可以使用时间戳来命名文件。让我们说如果图像名称是myimage.jpg,最好将其保存为23208349984_myimage.jpg

答案 1 :(得分:0)

正如您所说,您需要在数据和图像之间建立一些链接,或者准备扫描文件夹并输出您找到的内容。后者的计算成本更高,并且作为一种方法并不完全优雅。

折衷方案可能是重命名图像,因为它们已上传,1.jpg,2.jpg等,然后只需在数据库中登录上传图像的编号即可。例如:

if ($res = $db->query("query to get product row here")) {
    $row = $res->fetch_assoc();
    if (isset($row['num_imgs'])) {
        for($i=0; $i<$row['num_imgs']; $i++) {
            $img_path = $product_folder_uri."/".($i+1).".jpg";
            if (file_exists($img_path))
                echo "<img src='".$img_path."' />";
        }
    }
}

如果您不愿意从上传的名称重命名图像,则需要在数据库中记录其名称,可能是在他们自己的表中,并通过产品表的外键。

最后一个选择是将图像存储为数据库中的blob,但我不是数据库专家,所以我不知道这有多广泛或可取。