Php 图像存储-更好的方法

Php 图像存储-更好的方法,php,file-upload,seo,Php,File Upload,Seo,在我的项目中,我将每个产品的图像(由用户上传)存储在一个文件夹中 例如,要添加产品,将向用户显示一个表单。用户填写产品的详细信息,并从计算机中选择一些图像(5张或更多图片)。提交后,我将在名为Products的表中存储产品详细信息。对于上传的图像,我创建一个如下文件夹:http://mysite.com/uploads/123/此处123是新添加产品的产品id。所有的图像都保存在里面 问题: 如何跟踪上传的图像(或其文件名),以便以后显示?也就是说,当添加新产品时,我的脚本将创建一个奇特的ur

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

例如,要添加产品,将向用户显示一个表单。用户填写产品的详细信息,并从计算机中选择一些图像(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
    。这是物理地址。这对搜索引擎优化有帮助吗?或者这是坏习惯?如果这是好的,那么列出我应该使用的所有图像


请引导我走正确的路。谢谢

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

一种折衷方法是在上传图像时重命名图像,如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."' />";
        }
    }
}
if($res=$db->query(“在此处查询以获取产品行”)){
$row=$res->fetch_assoc();
如果(isset($row['num\u imgs'])){

对于你所说的($i=0;$i),你要么需要在数据和图像之间建立某种链接,要么准备扫描文件夹并只输出你所发现的内容。后者的计算成本更高,而且作为一种方法并不十分优雅

一种折衷方法是在上传图像时重命名图像,如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."' />";
        }
    }
}
if($res=$db->query(“在此处查询以获取产品行”)){
$row=$res->fetch_assoc();
如果(isset($row['num\u imgs'])){

对于($i=0;$i1)。我建议您创建另一个表来存储带有产品ID的图像文件名


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

1。我建议您创建另一个表来存储图像文件名使用产品ID创建


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

如果服务器有错误,则将图像存储为blob将是一个坏主意为mysql分配的内存有限,特别是在shared hostingYeap中,这是真的。只是将其作为一个想法进行浮动。谢谢。我喜欢将数字存储在product字段中的想法。如果服务器为mysql分配的内存有限,则将图像存储为Blob将是一个坏主意,特别是在shared hostingYeap中,这是真的。只是将其作为一个i进行浮动dea.Thanku。我喜欢用product将数字存储在字段中的想法。1.为了从第二个表中获取图像名称,我应该使用第二个查询?是否可以连接两个表的数据?2.我看到一个站点以奇特的uri作为文件名存储(末尾是1,2,3个数字)。所以这不好?操作系统在文件名字符计数方面有限制?我认为您必须使用第二个查询,因为我们有多个图像用于单个产品联接表将是一个麻烦,首先您循环产品,获取产品id,然后使用此产品id在循环中进行另一个查询以从另一个表获取图像。Aga在中,您可以使用任何方式将文件命名为“在任何地方都不会产生影响”。只需使用对您来说可行且您满意的方式。如果任何解决方案对您有效,请将其视为已解决,以便人们了解问题已解决1。因此,要从第二个表中获取图像名称,我应该使用第二个查询?是否可以连接两个表的数据?2.我看到一个站点以奇特的uri作为文件名存储数据(末尾有1,2,3个数字)。所以这不好?操作系统在文件名字符计数方面有限制?我认为您必须使用第二个查询,因为我们有多个图像用于单个产品联接表将是一个麻烦,首先您循环产品,获取产品id,然后使用此产品id在循环中进行另一个查询以从另一个表获取图像。Aga在中,您可以使用任何方式将文件命名为“在任何地方都不会产生影响”。只需使用对您来说可行且您感到满意的内容。如果任何解决方案对您有效,请将其视为已解决,以便人们了解问题已解决。我认为更新产品的图像名称会很痛苦。因此,1。sql:
updateproducts set name='New product name'其中…
,2.
php:$images=glob(“uploads/123/*”);foreach($images as$image)rename($image,$New_name);
等。只是一个通知。删除一个图像或pr