在PHP中,当两个或更多的文件具有相同的文件名时,后面的文件会覆盖前面的文件。这是因为在大多数操作系统中,文件系统不允许两个文件具有相同的名称。因此,当你尝试上传或保存一个与现有文件同名的新文件时,旧文件会被新文件替换。
file_put_contents
或类似函数写入文件,并且目标文件已存在,旧文件会被覆盖。原因:这是因为文件系统不允许两个文件具有相同的名称。当你上传一个新文件时,如果目标文件已存在,旧文件会被新文件覆盖。
解决方法:
$originalFilename = $_FILES['file']['name'];
$uniqueFilename = uniqid() . '_' . $originalFilename;
$uploadPath = 'uploads/' . $uniqueFilename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadPath)) {
echo 'File uploaded successfully.';
} else {
echo 'Failed to upload file.';
}
$originalFilename = $_FILES['file']['name'];
$uploadPath = 'uploads/' . $originalFilename;
if (file_exists($uploadPath)) {
echo 'File already exists.';
} else {
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadPath)) {
echo 'File uploaded successfully.';
} else {
echo 'Failed to upload file.';
}
}
$originalFilename = $_FILES['file']['name'];
$version = time();
$uniqueFilename = $originalFilename . '_' . $version;
$uploadPath = 'uploads/' . $uniqueFilename;
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadPath)) {
echo 'File uploaded successfully.';
} else {
echo 'Failed to upload file.';
}
通过这些方法,你可以避免文件覆盖的问题,并确保每个上传的文件都有唯一的名称。