如何在文件名中添加随机字母


How to add random letters to a filename?

我开发了一个用户可以登录和上传文件的表单,但我们遇到了一个问题,如果文件名相同,它会覆盖。

所以我试图实现的是上传,它要么重命名文件,要么在文件名中添加额外的字符,请参阅下面的代码。

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;