我正在开发一个php(codeigniter)的网站框架,并希望在图片上传中引入图像版本控制,以便我可以利用图像缓存。最简单的方法就是md5图像并将其用作文件名但我不喜欢这种方法,原因如下:
1)图片名称上没有SEO友好
2)md5哈希似乎不必要地长 - 因此数据库更大 所需的字段。
所以我正在考虑使用如下方法:
使用带下划线而不是空格的图像输入名称启动文件名,然后添加一个随机生成的整数,比如长8位。这意味着我必须通过该名称检查现有图像,然后重新生成整数(如果存在的话)(但不太可能)。
据推测,我还需要为每个图像大小提供唯一的文件名,所以我想这里的解决方案是添加一个代表文件大小的前缀。
现在我想第一次做到这一点,因为一旦部署框架就会很难改变,所以我真的只是在寻找输入
a)我的担忧是否合理(特别是文件名是否合理) 搜索引擎优化的任何东西,并随机数字的长度 影响它)
b)是否还有其他我应该关注或检查 因为我提议的方法。c)是否有更简单的方法,也许是哈希算法 产生更短的结果。
d)那里已经有一个ci lib吗?
感谢您的意见和建议
答案 0 :(得分: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标签让它更多地暴露在搜索引擎中)。