2012-01-20 30 views
0

的Html代碼示例:腓使DIR使用文本名稱和重命名上傳文件

<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#我應該沒有問題

+0

你爲什麼要將隨機數附加到文件名中,根據你的要求做這件事似乎有點不合邏輯。您是否有權訪問舊文件名,即用戶是否正在下載文件,然後重新上傳文件? –

+0

正在上傳的文件將成爲客戶的客戶。因此,如果他們需要第二次上傳客戶端信息文件,它將重命名文件並給它一個數字代碼。健康系統HIPAA保護客戶身份。我明白,謝謝任何方式。 – Postonoh

+0

我想我沒搞清楚。在ASP.Net C#中,我可以在文件上傳到我設置的路徑之前重命名文件。我想我不能用PHP做這個或者我可以這樣做。 – Postonoh

回答

0

你又追加舊名:

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

如果你只是想追加延長看看pathinfo()

0

變化這一行:

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

只需對basename(...)部分進行一些字符串操作即可。 基本上,所有你關心的是擴展...並根據你的文件名限制和期望的健壯性,答案可能很容易,或者有點棘手。

一個例子(所以你的想法):

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

或使用內置函數Pathinfo

+0

僅當PHP 5.4是當前的RC時才能使用數組參考。 – TimWolla

+0

呃...這似乎不正確...非常確定我總是訪問數組與[] ... – CasualT

+0

假設擴展名前沒有'.'字符的文件名。 'pathinfo()'更可靠,我知道每個人都喜歡內置函數。 ) – cortices

0

在行:

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

你添加新的文件名它將位於的目錄中。
但在此行中:

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

您還將上傳的舊名稱追加到該字符串中。你應該做@TimWolla建議的東西,如果你想找到擴展名,你應該知道pathinfo()

+0

謝謝大家。我檢查。 – Postonoh