Php使用文本名称制作目录并重命名上传文件

时间:2012-01-20 21:31:10

标签: php

Html示例代码:

<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="POST">
Company Name:<input type="text" name="company"/><br />
ClientName: <input type="text" name="ClientName"/><br />
<br />
<input type="hidden" name="MAX_FILE_SIZE" value="5120000" />
 Send this file: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
</body>

示例Php代码:

<?php

$file_name = $_POST['company'];
$random_digit = rand(0000,9999);
$new_file_name = $random_digit.$file_name;

$uploaddir = 'c:/temp/'.$new_file_name;
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo "<p>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
echo "File is valid, and was successfully uploaded.\n";
} else {
echo "Upload failed";
}

echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
echo '['.$new_file_name.']';
print "</pre>";
?> 

我遇到重命名问题。它重命名文件,但它也保留原始名称。因此,如果我上传文件名joey.doc,则会更改为随机#= 4567,公司名称= whatever,文件名= joey.doc输出= 4567whateverjoey.doc。我正在寻找的是文件名改为随机数,只附加公司= 4567whatever.doc。稍后我将编写代码来创建公司名称目录,将该公司的所有文件存储在他们的目录中。将位置标记存储在xml中,然后拉出一个表来引用。信息。另外,我使用客户端名称输入框来解码什么文件。

如果编写xml就像asp.net C#我应该没问题

3 个答案:

答案 0 :(得分:0)

您将再次附加旧名称:

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

如果您只想附加扩展程序,请查看pathinfo()

答案 1 :(得分:0)

更改此行:

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

特别是只对basename(...)部分进行一些字符串操作。 基本上,您所关心的只是扩展...并且根据您的文件名限制和所需的稳健性,答案可能很简单,或者有点棘手。

一个例子(所以你明白了):

$uploadfile = $uploaddir . '.' . split('.',basename($_FILES['userfile']['name']))[1];

或使用内置函数Pathinfo

答案 2 :(得分:0)

在行中:

$uploaddir = 'c:/temp/'.$new_file_name;

您将新文件名添加到它所在的目录中。
但在这一行:

$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

您还将上传的旧名称附加到该字符串。您应该执行@TimWolla建议的内容,如果您只想查找扩展名,请查看pathinfo()