我有两个文件(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”的文件夹才能使用它。
答案 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
如果检查回来该文件已经存在,我会重命名该文件,然后用新名称保存。
这就是我尝试它的方式。