存储用户上传的文件

时间:2014-01-27 18:31:57

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

我正在制作用户可以上传文件的内容,特别是图片(jpg,gif和png)。我做了很明显的事情,比如清理文件名,只允许字母,数字和符号,但我想的越多,我想到的问题就越多。

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

在存储用户上传文件时,在文件系统上实际存储文件,在数据库中添加条目以及优化(在本例中为SEO的图像)时,标准做法是什么?


图片可以匿名上传。

5 个答案:

答案 0 :(得分:0)

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

deny from all

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

现在,一个用于读取所请求文件的PHP文件,以及一些重写规则,用于在文件的长名称上重定向到此PHP文件。

这有意义吗?

答案 1 :(得分:0)

是否不期望上传具有相同名称的文件会覆盖旧文件?

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

bulldog.jpg

副本变为:

bulldog.jpg
1bulldog.jpg

或类似。

答案 2 :(得分:0)

一般情况下,只要元数据很好并且文件名包含尽可能靠近左侧的相关信息,搜索引擎就不会太在意了。

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

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

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

答案 3 :(得分:0)

通常这种方法正在使用中;

1)检查文件是否存在

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

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

更新:前缀或后缀对于seo并不重要。很久以前,Google停止关注网站所有者可以操纵的内容。

答案 4 :(得分:0)

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

添加一些重写规则和服务器端脚本以将其模拟为

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