首页 > 解决方案 > PHP - 将文件上传到目录并将文件扩展名添加到底部时的随机文件名?

问题描述

我使用 php 和 html 以及 java 制作了一个 uload 系统,但我担心重复文件。如何让它以随机名称保存并添加其扩展名?

<?php
   if(isset($_FILES['image'])){
      $errors= array();
      $test = uniqid()
      $file_name = ['image']['name'];
      $file_size =$_FILES['image']['size'];
      $file_tmp =$_FILES['image']['tmp_name'];
      $file_type=$_FILES['image']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
      
      $extensions= array("jpeg","jpg","png","rbxl","mp4","mp3");
      
      if(in_array($file_ext,$extensions)=== false){
         $errors[]="extension not allowed";
      }
      
      if($file_size > 600000000){
         $errors[]='File size must be excately 600 MB';
      }
      
      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"images/".$file_name);
         echo "https://glotech.cf/images/";
         print_r($file_name);
      }else{
         print_r($errors);
      }
        
   }
?>   

window.addEventListener("paste", e => {
  if (e.clipboardData.files.length > 0) {
    const fileImput = document.querySelector("#myFile");
    fileImput.files = e.clipboardData.files;
  }
});
<form action="/test.php" method="post" enctype="multipart/form-data">
  <input type="file" name="image" id="myFile">
  <input type="submit" />
</form>

我怎样才能让它用随机名称保存?

标签: phphtml

解决方案


有一些函数可以生成多种语言的随机字符串。在 PHP 中,您可以使用md5()and uniqid(),例如。

您的代码正在使用原始文件的名称上传文件。因此,如果您想避免重复文件名,只需生成一个唯一代码并包含到文件名中。此外,您可以使用该time()功能为文件名添加时间戳,这将防止重复的文件名。

$file_name = time() . "-" . $_FILES['image']['name'];
// output: "1615273926-filename.jpg"

如果要颠倒上例中文件名和时间戳的顺序,可以使用pathinfo()function. 看:

$file_name_pathinfo = pathinfo($_FILES['image']['name']);
$file_name = $file_name_pathinfo['basename'] . "-" . time() . "." . $file_name_pathinfo['extension'];
// output: "filename-1615273926.jpg"

这应该可以防止名称重复的文件。

学到更多:


推荐阅读