1

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

例如,要添加产品,则会向用户显示表单。用户填写有关产品的详细信息并从他的计算机中选择一些图像(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()的所有图像?

请引导我走正确的道路。感谢你

4

2 回答 2

1

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

2.对于图像文件名,使用一些唯一的随机名称以及原始文件名,可以使用PHP的uniqid生成文件名,也可以使用时间戳来命名文件。假设图像名称是myimage.jpg,最好将其保存为23208349984_myimage.jpg

于 2012-08-06T10:38:05.703 回答
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 存储在数据库中,但我不是数据库专家,所以我不知道这有多普遍或可取。

于 2012-08-06T10:36:13.273 回答