2

我正在用 php (codeigniter) 开发一个站点框架,并希望在图像上传时引入图像版本控制,以便我可以利用图像缓存。最简单的方法就是对图像进行 md5 并将其用作文件名,但我不喜欢这种方法,原因如下:

1)图像名称对 SEO 不友好

2)md5 散列看起来不必要地长 - 因此需要更大的数据库字段。

所以我正在考虑使用如下方法:

文件名以输入的图像名称开头,下划线而不是空格,然后添加一个随机生成的整数,比如 8 位长。这意味着我必须通过该名称检查现有图像,然后如果存在整数则重新生成整数(但不太可能)。

大概我还必须为每个图像大小设置唯一的文件名,所以我想这里的解决方案是添加一个代表文件大小的前缀。

现在我想第一次做对,因为一旦部署了框架就很难改变,所以我真的只是在寻找输入

a)我的担忧是否合理(特别是文件名对 SEO 有什么作用,随机数字串的长度是否会影响它)

b)我是否应该关注或检查我提出的方法是否还有其他问题。

c)是否有更简单的方法,也许是产生更短结果的散列算法。

d) 是否已经有一个 ci lib 可以做到这一点?

感谢您的意见和建议

4

1 回答 1

2

这回答了你的几个问题:

用下划线替换空格不足以获得干净的文件名,因为您需要检查更多奇怪的字符,但您可以使用 CI 安全库中的 sanitize_filename() 方法:http: //ellislab.com/codeigniter/user-guide /libraries/security.html

如果您确实想保留原始文件名,那么您的方法对我来说听起来不错。但是,文件名末尾的 8 位整数可以通过简单的增量循环检查以该结尾的文件是否存在来替换为“-1”、“-2”、“-3”。

文件上传库是您可以查看的东西 - http://ellislab.com/codeigniter/user-guide/libraries/file_uploading.html。它很灵活,可以配置为保留原始文件名。从 Security lib 获取 sanitize_filename() 来工作应该完全符合您的需要。

在我所有的 CI 应用程序中,我总是使用加密的文件名(此可选功能由 CI 文件上传类提供)。同时,我可以将库配置为不覆盖现有文件,方法是向它添加一个数字(如果没有使用加密)或只给它另一个加密名称(当加密选项打开时)。我确实喜欢这种方式,因为它使文件名保持一致干净(虽然很长而且对 SEO 不友好,但是 ALT 标签让它更多地暴露在搜索引擎中)。

于 2012-12-17T14:58:07.110 回答