2010-08-16 29 views
1

如果文件名是fin's xyz.mp3,則由於此fin(')的單引號而不能上傳。我應該如何在PHP中使用move_uploaded_file($tmp,$dest)文件上傳中的問題

例子:

$name1=$_FILES['FileName']['name']; 
$tmp1=$_FILES['FileName']['tmp_name']; 
$target = "../music_files/"; 
$up=uniqid().$name1; 
$target = $target.$up; 
move_uploaded_file($tmp1,$target); 

HTML:

<form action="" method="post" enctype="multipart/form-data" name="loginfrm" onsubmit="return CheckLogin();"> 
    <input type="file" id="FileName" name="FileName" class="text-box" /> 
    <input name="Submit" type="submit" class="button" value="Save" /> 
</form> 
+0

你能告訴我們更多的代碼嗎?你如何處理文件上傳?什麼是'$ tmp'和'$ dest'? – 2010-08-16 12:21:43

+0

@anuradha - 你可以嘗試格式化你的代碼,所以它更容易閱讀?將每行代碼縮進四個空格。 – 2010-08-16 12:29:18

+0

使用降價按鈕編輯您的代碼。閱讀你的代碼很困難。 – stillstanding 2010-08-16 12:30:48

回答

0

取決於你如何存儲文件,你可以去除所有非字母數字字符用一個簡單的preg_replace(),然後你不必擔心它。

$name1 = preg_replace('~[^a-z0-9_-]~i', '', $_FILES['FileName']['name']); 

等待我沒犯任何愚蠢的錯誤。

如果您在數據庫中存儲的名稱,你可以只是使實際文件名MD5哈希和參考,在表中你存儲在信息

+0

亞即時在數據庫中存儲的文件名,因爲文件名是鰭的xyz.mp3即時通訊使用addslashes在插入查詢中,文件沒有上傳到單引號的「../music_files/ dir bzs」中 – anuradha 2010-08-16 12:47:40

0

行情擔任許多系統爲特殊字符 - 你可能想要清理你的文件名 - 例如白名單一組字符,丟棄他人:

$name1=$_FILES['FileName']['name']; 
$up=uniqid() . preg_preplace('/[^a-zA-Z0-9_-]/','',$name1); 

這給你,作爲獎勵,增加彈性反對無效的文件名和目錄遍歷攻擊(例如在攻擊者將給予」 ../../ .. /../../../../../etc/passwd「作爲文件名)。