【问题标题】:Storing user uploaded files存储用户上传的文件
【发布时间】:2014-02-18 18:11:34
【问题描述】:

我正在制作一些用户可以上传文件的东西,特别是图片(jpg、gif 和 png)。我已经做了一些显而易见的事情,比如清理文件名并只允许字母、数字和一些符号,但我越想越想的问题。

例如,如果用户上传的文件与已存储的文件同名,该怎么办?它会覆盖它,所以我想在文件名的末尾附加一个时间戳,但这不会对 SEO 产生负面影响吗?

在存储用户上传的文件时,在文件系统上实际存储文件、向数据库中添加条目以及优化(在这种情况下)图像以用于 SEO 方面的标准做法是什么?


图片可以匿名上传。

【问题讨论】:

  • 上传/用户名/文件名怎么样?
  • 附加一个数字,例如hello.jpg、hello_1.jpg、hello_2.jpg是一种常见的解决方案。
  • @RezaSh 这对我网站的注册用户来说是个好主意,但是任何用户都可以将图像上传到我身边,无论他们是否登录。
  • /uploads/guest/timestamp/filename or filename_1 filename_2

标签: php file-upload seo user-input image-uploading


【解决方案1】:

我的建议是将文件存储到例如“上传”目录中。在此目录中放置一个“.htaccess”文件:

deny from all

存储的文件只能用时间戳和随机数命名,例如,或源名称的第一个字母。然后,将文件信息存储在数据库中。

现在,一个 PHP 文件来读取请求的文件,并通过一些重写规则来重定向到这个 PHP 文件上的长文件名。

这有意义吗?

【讨论】:

  • 你的意思是使用 PHP 和一些重写技巧让它读取图像但在 HTML 中输出一个漂亮的 seo 友好图像 src,可能基于数据库中的一个字段?
  • 类似的东西。例如,一个好的重写解决方案是:example.com/img/[timestamp]/my+very+long+name.jpg 这里有带有时间戳的真实姓名,对姓名没有直接影响。你怎么看?
【解决方案2】:

难道不会期望上传同名文件会覆盖旧文件吗?

如果这不是必需的行为(比如你正在做备份),那么如果 file_exists() 然后重命名旧文件,然后将新上传的文件写入旧地址。

bulldog.jpg

在重复时变为:

bulldog.jpg
1bulldog.jpg

或类似的。

【讨论】:

    【解决方案3】:

    一般来说,搜索引擎不会太在意,只要元数据没问题,文件名包含的相关信息尽量靠左即可。

    例如,eiffel-tower.jpg、eiffel-tower-01.jpg 和 eiffel-tower-02736293.jpg 不会获得所有不同的 SEO 分数。

    在您的特定情况下,将“-xx”附加到文件名中,其中 xx 是当前同名图像的数量 +1 就可以了。时间戳将更容易实现,但数字越少,它对搜索引擎和人们来说就越漂亮。

    另一种选择是按日期将它们存储到子文件夹中,例如 /2014/03/eiffel-tower.jpg。同样,如果有人上传了同名的图像,您可以像上面一样附加“-xx”。

    【讨论】:

    • 谢谢!将在名称末尾添加两位数字。
    【解决方案4】:

    一般都用这个方法;

    1) 检查文件是否存在

    2) 如果存在,文件名的前缀或后缀...

    例如在 wordpress 中,如果文件存在,wp 将宽度 x 高度添加到图像的末尾...例如 image_name_250x300.jpgimage_name_500x600.jpg 等...

    更新:前缀或后缀对 seo 并不重要。谷歌很久以前就停止关注网站所有者可以操纵的东西。

    【讨论】:

      【解决方案5】:

      您可以使用 9ajk298.jpg 等唯一键存储图像。将原始名称、唯一键、扩展名存储在数据库中。

      添加一些重写规则和服务器端脚本来模拟它

      www.example.com/images/9ajk298/bulldog.jpg
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-17
        • 2012-12-12
        • 2022-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多