Php 存储用户上传的文件

Php 存储用户上传的文件,php,file-upload,seo,user-input,image-uploading,Php,File Upload,Seo,User Input,Image Uploading,我正在制作一些用户可以上传文件的东西,特别是图像(jpg、gif和png)。我做了一些显而易见的事情,比如清理文件名,只允许使用字母、数字和一些符号,但是我越想它,我想到的问题就越多 例如,如果用户上载的文件与已存储的文件同名,该怎么办?它将覆盖它,所以我考虑在文件名的末尾添加一个时间戳,但这不会对SEO产生负面影响吗 在存储用户上传的文件时,标准做法是什么?在文件系统中实际存储文件,在数据库中添加条目,在这种情况下优化SEO图像 图像可以匿名上传。我的建议是将文件存储到例如“uploads”

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

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

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



图像可以匿名上传。

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

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

现在,用一个PHP文件读取请求的文件,并用一些重写规则重定向到此PHP文件上的长文件名


这有意义吗?

上传同名文件会覆盖旧文件吗

如果这不是必需的行为(假设您正在执行备份),则如果文件_存在(),则重命名旧文件,然后将新上载写入旧地址

bulldog.jpg
在复制时变为:

bulldog.jpg
1bulldog.jpg

或者类似。

一般来说,搜索引擎不会太在意,只要元数据很好,并且文件名包含尽可能靠近左边的相关信息

例如,eiffel-tower.jpg、eiffel-tower-01.jpg和eiffel-tower-02736293.jpg的搜索引擎优化分数不会有那么大的差别

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


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

通常使用这种方法

1) 检查文件是否存在

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

例如,在wordpress中,如果存在文件,wp会将宽度x高度添加到图像的末尾。。。比如
image\u name\u 250x300.jpg
image\u name\u 500x600.jpg
等等


更新:前缀或后缀对搜索引擎优化并不重要。谷歌很早以前就开始关注一些网站所有者可以操纵的东西

您可以使用像9ajk298.jpg这样的唯一键来存储图像。在数据库中存储原始名称、唯一密钥和扩展名

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

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

上传/username/filename如何?添加一个数字,例如hello.jpg、hello_1.jpg、hello_2.jpg是一个常见的解决方案。@RezaSh这对我网站的注册用户部分是一个好主意,但任何用户都可以将图像上传到我这边,无论他们是否登录。/uploads/guest/timestamp/filename或filename\u 1 filename\u 2您的意思是使用PHP和一些重写技巧让它读取图像,但在HTML中输出一个很好的seo友好图像src,可能基于数据库中的某个字段?类似的东西。例如,一个好的重写解决方案是:这里有带时间戳的真实姓名,对姓名没有直接影响。你觉得怎么样?谢谢!在名字的末尾加上两位数。