如何在PHP中添加输入文件名的详细信息

时间:2013-05-28 20:44:25

标签: php html

我有两个文件(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”的文件夹才能使用它。

3 个答案:

答案 0 :(得分: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个人同时上传同一个文件,该文件也不会被覆盖。

答案 1 :(得分: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!";
    }

&GT;

答案 2 :(得分:0)

我会查看file_exists方法:

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

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

这就是我尝试它的方式。