我已经使用 move_uploaded_file 函数制作了一个图像上传脚本。此功能似乎用新文件覆盖任何先前存在的文件。所以,我需要检查目标位置是否已经有一个文件。如果是这样,那么我需要在文件名中附加一些内容(在扩展名之前,以便文件名仍然有效),以便文件名是唯一的。如果可能的话,我希望更改最小,而不是像附加日期时间那样。

我怎样才能用 PHP 做到这一点?

最佳答案

上传文件时,我几乎总是重命名它们。通常,该文件会有某种数据库记录。我使用它的 ID 来保证文件的唯一性。有时我什至会在数据库中存储客户端的原始文件名,但我永远不会保留它或临时名称,因为不能保证信息是好的,您的操作系统会支持它或它是唯一的(这是你的问题)。

因此,只需将其重命名为您自己设计的某种方案即可。这就是我的建议。

如果您没有任何数据库引用,那么您可以为此使用 file_exists(),但不能保证在检查某些内容是否存在和移动它之间,其他内容不会使用您随后将覆盖的相同文件名。这是一个经典的 race condition

关于php - 我用 PHP 制作了一个上传脚本。如何避免覆盖文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/846340/

10-16 16:32
查看更多