1

我正在使用多个文件的上传脚本。最初,我正在检查文件是否存在,如果存在,则向其附加唯一 ID,然后上传。

从那以后,我一直在考虑选项,并决定我希望上传的每个文件都具有原始文件名,并在其后加上唯一的 ID。

然后提出了不需要if(file_exists)检查的问题,所以我的问题首先是可靠性如何unique(),我现在正在做的事情是否被认为是不好的做法?

谢谢。

//if(file_exists($newPath)){

        $name = pathinfo($fileName, PATHINFO_FILENAME);
        $fileName = $name . '__' .uniqid().  '.' .$fileExt;
        $newPath = $upload_dir .$newName;
//  }
4

1 回答 1

1

我没有使用独特的,但手册指出它基于当前时间(以微秒为单位)。假设没有人在不同来源以完全相同的微秒创建文件,这可能是可靠的。

也就是说,使用 uniqid() 我会使用前缀参数(如果您将其部署在多个地方) - 很有可能您会没事的。

但是,我仍然会进行 file_exists 检查。性能影响将完全不明显。我什至会这样回答您的问题:是的,在使用该名称之前不检查文件是否存在是一种不好的做法 - 特别是当您写入具有大量动态创建的目录时文件。以我的经验,你想抓住一切可能弄乱你的应用程序的事情——这是一件大事。有什么办法可以防止某人在某个时候将一个随机文件扔到那里,而该文件恰好与即将成为 uniqid() 的文件同名?如果答案是“无”,那么您绝对应该进行检查。

希望这可以帮助!

于 2013-07-24T20:03:02.143 回答