0

我有两个文件(html 和 php)。用户以 html 形式上传文件,php 文件包含将文件上传到服务器的脚本。它工作得很好,我的问题是当用户 1 上传“wordThing.docx”并且用户 2 出现并上传“wordThing.docx”时,用户 1 的文件将被覆盖。

这是我的 HTML 代码:

<html>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"><br />

<label for="yourName">Your name:</label>
<input type="textbox" name="yourName" id="yourName" /><br />
<input type="submit" name="submit" value="Submit"><br />
</form>
</body>
</html>

这是我的 PHP 脚本:

 <?php
 $userName=$_POST['yourName'];
 $target_path = "uploads/";
 $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!";
 }
 ?>

我想附上用户输入“yourName”的文本。因此,服务器包含不同的文件名,并且没有一个必须被覆盖。因此,假设用户具有不同的名称,我想知道如何将文件保存在服务器上并附加名称。例如:用户 1 的文件上传将是 'wordThingSusan.docx'

我希望这不是太多的信息。我只是想清楚和准确。万一有人试图使用此代码,您需要在您的目录下有一个名为“uploads”的文件夹才能正常工作。

4

3 回答 3

2

改变

$target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

$target_path = $target_path . time() . rand(11, 99) . basename( $_FILES['uploadedfile']['name']);

生成的名称类似于 uploads/123456789052wordThing.docx

time() 将以 1234567890 格式为您提供时间,rand(11,99) 将生成 11 到 99 之间的随机数,因此即使 2 个人同时上传相同的文件,文件也不会被覆盖。

于 2013-05-28T20:46:55.660 回答
1

只需在文件名的开头添加一个 unix 时间戳:

<?php
    $userName=$_POST['yourName'];
    $target_path = "uploads/";
    $target_path = $target_path . date('U') . '_' . 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!";
    }

?>

于 2013-05-28T20:48:12.153 回答
0

我会研究 file_exists 方法:

http://php.net/manual/en/function.file-exists.php

如果检查返回该文件已经存在,我将重命名该文件,然后用新名称保存它。

这就是我会尝试的方式。

于 2013-05-28T20:49:19.253 回答