我开发了一个用户可以登录和上传文件的表单,但我们遇到了一个问题,如果文件名相同,它会覆盖。
所以我试图实现的是上传,它要么重命名文件,要么在文件名中添加额外的字符,请参阅下面的代码。
if ($_GET['ul'] == 1) {
$target_path = "../uploads/documents/";
$target_path = $target_path . basename( $_FILES['uploadfile1']['name']);
$fname = $_FILES['uploadfile1']['tmp_name'];
$filename = $_FILES['uploadfile1']['name'];
$extensions = array('xls','pdf','PDF','doc','DOC','docx','DOCX','jpg','JPG','xlsx');
$extension = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
if (in_array($extension, $extensions)) {
move_uploaded_file($fname, $target_path);
echo $filename;
} else {
echo 'Sorry this file type cant be uploaded.';
}
}
为了解决这个问题,我们可以生成新的文件名,该文件名对于保存文件是唯一的。为此,如果我们将当前日期&时间使用strtotime(),生成的字符串将是唯一的,并且没有机会获得重复的文件名。我们可以保存名为的文件
if ($_GET['ul'] == 1) {
$target_path = "../uploads/documents/";
$fname = $_FILES['uploadfile1']['tmp_name'];
$filename = $_FILES['uploadfile1']['name'];
$extensions = array('xls','pdf','PDF','doc','DOC','docx','DOCX','jpg','JPG','xlsx');
$extension = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
if (in_array($extension, $extensions)) {
$tempname = strtotime(date("Y-m-d H:i:s"));
$temp =explode(".",$fname);
$target_path = $target_path.$tempname.'.'.$temp[1];
move_uploaded_file($fname, $target_path);
echo $filename;
} else {
echo 'Sorry this file type cant be uploaded.';
}
}
您可以执行类似的操作
$f_name = $_FILES['uploadfile1']['name'];
$f_extension = explode('.', $f_name); //To breaks the string into array
$f_extension = strtolower(end($f_extension)); //end() is used to retrun a last element to the array
$f_newfile = uniqid() . '.' . $f_extension; // / It`s use to stop overriding if the image will be same then uniqid() will generate the unique name of both file.
您可以添加时间戳来区分文件的名称
$fname = time() . '_' . $fname;
或
$f_extension_array = explode('.', $f_name);
$f_extension = strtolower($f_extension_array[1]);
$fname = $f_extension_array[0] . '_' . time() . '.' . $f_extension;
使用时间()函数在文件名中附加时间戳,因为您可以从时间()中获得唯一值:
所以它会像:
$filename = time()."_".$_FILES['uploadfile1']['name'];
为了防止文件相互覆盖,我总是使用uniqid()
函数。这个PHP函数生成一个唯一的id。如果你把这个id附加到你的文件名上,你就永远不会让它覆盖其他文件。
$filename = $filename.uniqid().$extension;