PHP文件重命名

PHP文件重命名,php,Php,我有一个表单,管理员将上传三张不同尺寸的图片到三个不同的指定目录。现在,为了确保我没有陷入重复文件名的问题,我实现了类似php的功能,它将比较上传的文件名,并检查指定目录中是否存在该文件名。如果是,则它将回显错误并停止脚本执行 现在我的一个朋友建议我,让管理员手动重命名图片文件并让他们处理文件复制问题是非常糟糕的。他建议的解决方案是自动重命名文件,然后将其存储在数据库中,然后将其定向到目录 我很困惑,我应该给重命名的文件什么样的组合,还要确保它仍然是唯一的文件名,更准确地说,我想让你了解我的目录

我有一个表单,管理员将上传三张不同尺寸的图片到三个不同的指定目录。现在,为了确保我没有陷入重复文件名的问题,我实现了类似php的功能,它将比较上传的文件名,并检查指定目录中是否存在该文件名。如果是,则它将回显错误并停止脚本执行

现在我的一个朋友建议我,让管理员手动重命名图片文件并让他们处理文件复制问题是非常糟糕的。他建议的解决方案是自动重命名文件,然后将其存储在数据库中,然后将其定向到目录

我很困惑,我应该给重命名的文件什么样的组合,还要确保它仍然是唯一的文件名,更准确地说,我想让你了解我的目录结构

正如我所说,将有三个图片文件的管理员将上传即

a) 标题图片b)简要图片c) 细节图片

所有的三个图片文件都会被移动到不同的目录中,比如标题图片到标题目录等等

我目前正在使用下面的脚本,只是为了在数据库中使用varchar移动和存储文件名及其路径

$ns_pic_title_loc= $_FILES["ns_pic_title"]["tmp_name"];
$ns_pic_title_name = $_FILES["ns_pic_title"]["name"];
move_uploaded_file($ns_pic_title_loc, $ns_title_target.$ns_pic_title_name) or die(mysql_error());
这只是示例代码,我没有包括我正在使用的验证函数。我想我想把所有的文件都重命名为

a) 在标题目录中,文件应存储为。 title_1.jpg title_2.jpg title_3.jpg title_4.jpg

等等

和其他照片一样。我该怎么做?我使用什么功能来实现我的目标。如果这不是重命名文件的好方法,我将非常感谢您对重命名文件的建议


提前感谢

有两个好的选择,各有利弊

  • 移动文件时使用php,并将路径存储在mysql数据库中
    tempnam
    生成唯一的文件名

  • 。这样,您将通过id而不是路径名访问图像内容


与其用逻辑来计算最新图片名称并计算下一个数字增量,为什么不直接使用?它生成一个唯一的名称,前缀由您选择(即“标题”、“简要”、“详细”)。您还可以简单地在文件名前加上一个时间戳——如果您没有很多管理员同时上传图片,那么这应该可以处理大多数名称冲突

由于您的图片将被分为
标题
摘要
细节
目录,因此实际上不必为每张图片命名
标题*
摘要*
细节*
,对吗?如果它在标题目录中,那么它显然是一张标题图片


此外,您还将把文件名放入数据库中。然后在应用程序的其他地方,当您想要显示图片时,我假设您从数据库中获得了正确的文件名。因此,只要应用程序知道在哪里可以找到文件名,那么实际文件名是什么并不重要。如果这是正确的,则不需要非常友好的名称,因此可以接受tempnam()文件名或时间戳加上原始文件名。

好吧,这里有一个可能的解决方案:

  • $\u文件[“ns_picu title”][“name”]
    和单独的扩展名获取上传的文件名,或者如果我们只讨论图像文件,则使用
    getimagesize($\u文件[“ns_picu title”][“tmp_name”])获取图像类型。
  • 检查数据库中图像记录的最大id,并将
    $file\u name
    变量
    'title\u.($max\u id+1)
  • 此时,您应该有$file\u name和$file\u扩展名,因此请执行
    move\u上传的\u文件($\u文件[“ns\u pic\u title”][“tmp\u name”],$ns\u title\u target.$file\u name..$file\u扩展名)

  • 希望这是有意义和有帮助的。

    因为您正在将引用存储到数据库中,所以我更希望只使用md5日期时间,并将其用于文件名,同时将磁盘文件名存储到数据库中。它以什么名称写入磁盘并不重要,只要您可以用唯一的名称将其指向数据库


    我使用这种方法,在我的所有测试中,磁盘名(datetime中的md5)都不需要多次尝试。

    我不建议将站点的图像存储在数据库中。数据库可能会出现性能问题,而且您也会缺少图像缓存。我会使用tempnam函数,我肯定会避免使用blob,我以前使用过blob,现在陷入了性能问题。+!谢谢你。我同意,我只是添加了完整性的blob建议。哇,正是我搜索的那种函数,你从上到下都是对的。我现在正在试一试。。非常感谢。这是一个比blob建议更好的选择,同时仍然使用数据库中的id/主键。我已经多次使用这个。虽然这是一个很好的解决方案,我会考虑使用TimNAME函数。这正是我想要的功能。这是一种让数据库ID和图片文件名同步的好方法。它有一个种族条件,就像我的答案中的时间戳建议一样,但这在一个很少有管理员上传图片的网站上也不是什么大问题。我知道种族问题,我个人通常先做DB插入,但我不想让我的答案复杂化。我先尝试了Jeff的解决方案,这让我有点害怕,因为我想要一个干净整洁的文件名,尽管tempnam()解决了我的问题,但它并不令人满意,而且我照你说的做了,瞧,我得到了神奇的文件名,可能给了我排序文件的能力,我喜欢从数据库中分配max_id。是的