【问题标题】:Php uploaded file unique name issuephp上传文件唯一名称问题
【发布时间】:2012-11-19 09:12:42
【问题描述】:

好吧,我有一个通过 .php 文件 (uploader.php) 处理的 html 上传表单。这是一个多文件上传的代码。

因此,当它上传时,所有文件都会以各自的文件名进入上传目录。比如:abc.jpg、abc2.jpg等。

但是如果有人上传了一个同名的文件,那么它就会覆盖现有文件。所以我需要上传文件的唯一名称。有没有办法用唯一的随机名称重命名文件。喜欢:12545454.jpge、234324324.jpge、323453253.jpg等。

PHP 代码:

<?php
if (isset($_POST['Submit'])) {
$number_of_file_fields = 0;
$number_of_uploaded_files = 0;
$number_of_moved_files = 0;
$uploaded_files = array();
$upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory


/**
 * we get a $_FILES['images'] array ,
 * we procee this array while iterating with simple for loop
 * you can check this array by print_r($_FILES['images']);
 */
for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
    $number_of_file_fields++;
    if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
        $number_of_uploaded_files++;
        $uploaded_files[] = $_FILES['images']['name'][$i];
        if (move_uploaded_file($_FILES['images']['tmp_name'][$i], $upload_directory . 
$_FILES['images']['name'][$i])) {
            $number_of_moved_files++;
        }

    }

}
echo "Number of File fields created $number_of_file_fields.<br/> ";
echo "Number of files submitted $number_of_uploaded_files . <br/>";
echo "Number of successfully moved files $number_of_moved_files . <br/>";
echo "File Names are <br/>" . implode(',', $uploaded_files);
}
?>  

【问题讨论】:

  • 我只是想用唯一的随机数重命名上传的文件名。
  • 你创建,但不要使用 $image_named_uniq

标签: php mysql


【解决方案1】:

使用 uniqid() 。就是为此而生的。

【讨论】:

    【解决方案2】:

    您可以按照 wormhit 的建议连接 time();session_id()uniqid() 对于每个文件的名称也是非常好的主意。

    使用下面的代码:

    <?php
    $target_path = "images/";
    
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 
    
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
        echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
        " has been uploaded";
    } else{
        echo "There was an error uploading the file, please try again!";
    }
    //$upload_directory = ''.uniqid().'_'.dirname(__file__) . '/uploaded/'; //set upload directory
    
    $uploaded_file="".$upload_directory ."/".uniqid()."_".$_FILES['images']['name'][$i]."";
    
    if (move_uploaded_file($_FILES['images']['tmp_name'][$i],$uploaded_file)) {
                $number_of_moved_files++;
            }
    ?>
    
    
    <?php
    if (isset($_POST['Submit'])) {
    $number_of_file_fields = 0;
    $number_of_uploaded_files = 0;
    $number_of_moved_files = 0;
    $uploaded_files = array();
    $upload_directory = dirname(__file__) . '/uploaded/'; //set upload directory
    
    
    /**
     * we get a $_FILES['images'] array ,
     * we procee this array while iterating with simple for loop
     * you can check this array by print_r($_FILES['images']);
     */
    for ($i = 0; $i < count($_FILES['images']['name']); $i++) {
        $number_of_file_fields++;
        if ($_FILES['images']['name'][$i] != '') { //check if file field empty or not
    
            $uploaded_file="".$upload_directory ."".uniqid()."_".$_FILES['images']['name'][$i]."";
    
            $number_of_uploaded_files++;
            $uploaded_files[] = $_FILES['images']['name'][$i];
            if (move_uploaded_file($_FILES['images']['tmp_name'][$i],$uploaded_file)) {
                $number_of_moved_files++;
            }
    
        }
    
    }
    echo "Number of File fields created $number_of_file_fields.<br/> ";
    echo "Number of files submitted $number_of_uploaded_files . <br/>";
    echo "Number of successfully moved files $number_of_moved_files . <br/>";
    echo "File Names are <br/>" . implode(',', $uploaded_files);
    }
    ?> 
    

    【讨论】:

    • 是的!@Vikas Umrao 这是个好主意!
    • @Vikash Umrao 如何用 time() 重命名原始文件名?
    • 替换这个 $upload_directory = ''.uniqid().'_'.dirname(file) 。 '/上传/'; //从你的代码中设置上传目录
    【解决方案3】:

    你可以用这个

     $ext = pathinfo($file_name, PATHINFO_EXTENSION);
     $newfilename = substr( sha1(uniqid (rand())), 0, 10). '.'.$ext;
    

    【讨论】:

      猜你喜欢
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-28
      • 2010-09-26
      • 1970-01-01
      相关资源
      最近更新 更多