照片上传防止覆盖
照片上传防止覆盖
我按照这个链接http://www.w3schools.com/php/php_file_upload.asp实现了一个照片上传功能,但是当存在相同名称的文件时,我希望它不会说文件已经上传,而是将文件名更改为之前未使用过的名称。\n换句话说,如果存在相同名称的照片,我仍然希望它上传,但不想覆盖现有的文件。我想用以下内容替换它来实现这个功能:\n
// 检查文件是否已存在 if (file_exists($target_file)) { echo "对不起,文件已存在。"; $uploadOk = 0;
\n改成这样:\n
// 检查文件是否已存在 if (file_exists($target_file)) { "执行一些操作以更改文件名" $uploadOk = 1;
\n更新:我已经解决了这个问题。我只需将每个图像重命名为唯一的ID,如下所述。谢谢。\n另外,在建议中应该是这样的:\n
$newTarget_file = $target_dir . uniqid() . "." . end($target_file);
问题的出现原因是上传的文件可能会出现重名,导致文件被覆盖。解决方法是给文件添加随机数字作为新的文件名,确保每次上传的文件都有一个唯一的文件名。
以下是解决该问题的代码示例:
$name = explode(".",$_FILES["file"]["name"]); $newName = rand(1,99999) . '.' .end($name); move_uploaded_file($_FILES["file"]["tmp_name"], "../img/imageDirectory/" . $newName );
另一种解决方法是在上传之前检查文件名是否已存在,如果存在,则在文件名中添加一些内容以重命名文件。
if (file_exists("../img/imageDirectory/" . $_FILES["file"]["name"])) { $newName = uniqid() . '.' . end($name); } else { $newName = end($name); }
上述代码中使用了`uniqid`函数来生成唯一的文件名,确保每个文件都有一个唯一的标识符。
如果仍然出现重名的情况,可以再次生成一个新的文件名。
if (file_exists("../img/imageDirectory/" . $newName)) { $newName = uniqid() . '.' . end($name); }
在代码中检查是否拼写正确,以确保代码的正确性。
以上是解决照片上传避免覆盖问题的方法。通过给文件添加随机数字或唯一标识符作为文件名,可以确保每次上传的文件都具有唯一的名称,避免文件被覆盖。