不使用if(file_exists)不良做法?

时间:2013-07-24 19:53:40

标签: php html file-upload web

我正在处理多个文件的上传脚本。最初我正在检查是否存在文件,如果是这样,则为其添加唯一ID然后上传。

我一直在考虑选项,并决定我希望每个上传的文件都有原始文件名后面带有唯一ID。

然后提出了不需要进行if(file_exists)检查的问题,所以我的问题首先是unique()的可靠性,而我现在所做的是不良做法?

感谢。

//if(file_exists($newPath)){

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

1 个答案:

答案 0 :(得分:1)

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

那就是说,使用uniqid()我会使用前缀参数(如果你在多个地方部署它) - 而且很可能你会没事的。

但是,我仍然会进行file_exists检查。性能影响将完全不明显。我甚至会回答你的问题:是的,在使用该名称之前不检查文件是否存在是不好的做法 - 特别是当你写入一个有很多动态创建的目录时文件。根据我的经验,你想抓住可能会弄乱你的应用程序的每一件事 - 这是一个很大的问题。在某些情况下,有什么方法可以让一个随机文件在那里抛出恰好与即将成为uniqid()相同的名字?如果答案是“没有”,那么你绝对应该进行检查。

希望这有帮助!