2011-08-04 71 views
1

我有一個上傳PHP腳本,在它上傳文件之前,它將它重命名爲一個隨機名稱,因此沒有已經存在的文件將被覆蓋。問題是它不能正常工作。它在文件名中加入了一些奇怪的符號,當我嘗試查看文件時,它有一個404錯誤。這是工作之前,我加入這個隨機名稱的一部分下面是PHP腳本,我現在所擁有的。爲什麼這個上傳文件的隨機名PHP腳本不工作?

<?php 
// Where the file is going to be placed 
$target_path = "files/"; 

/* Rename file with random name and keep extension */ 
    $length = 10; 
    $characters = ’123456789’; 
    $string=""; 
    for($p = 0; $p < $length; $p++) { 
     $string .= $characters[mt_rand(0, strlen($characters))]; 
    } 
$pos = strrpos(basename($_FILES['uploadedfile']['name']), "."); 
$ext = str_split(basename($_FILES['uploadedfile']['name']), $pos); 
$target_path = $target_path.$string.$ext[1]; 
if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
    echo "<h2>Your file has been uploaded!</h2><br /><p>Your file has been uploaded successfully. <a href='".$target_path."'>Click here</a> to see the file you uploaded. 
    <br /><br /><br /> 
    <h2>A link to your file</h2><br />The full link to your file is: 
    <br /><br /> 
    <code>http://www.example.com/upload/".$target_path."</code></p>"; 
} else{ 
    echo "<span class='error'>There was an error uploading the file, please try again.</span>"; 
} 
?> 

出於某種原因,它是真的怪怪的。然後,當我在我的託管文件管理器中查看文件夾/文件/時,我嘗試刪除其中包含奇怪符號的文件,然後我刷新並且它們全都回來了。看看這張截圖:

enter image description here

奇怪的,是吧?

我可能需要一個新的隨機命名PHP腳本,但這很煩人,因爲我刪除了所有這些文件,而且,你知道,當我重新加載時它們會馬上回來!這就像PHP迫使他們不刪除或其他東西。

感謝提前任何幫助,
彌敦道

+0

這不是你的問題,但這會開始給你帶來問題。 '$ string。= $ characters [mt_rand(0,strlen($ characters))];'你需要使用strlen -1作爲mt_rand的上界。 strlen從1開始計數,字符串索引計數從0開始。 – dsas

回答

3

你把forwardticks周圍的字符,而不是引號的字符串:’123456789’。將這些更改爲引號可能會解決您的錯誤。

但是您應該使用tempnam()。一個生成隨機唯一文件名的PHP函數,創建一個文件並返回文件名。

,您只需指定要在文件的文件夾,併爲文件名(僅前三個字符是在Windows上使用)的前綴,它所有的「隨機」爲您服務,同時保證唯一性,所以你產生相同的隨機數字兩次並覆蓋文件。

PS。儘管函數名稱,文件不是臨時的。如果你想刪除它,你必須自己做。你可以使用unlink()

+0

謝謝。我對PHP相當陌生,所以如果我使用tempnam(),我需要刪除其他部分,還是需要更改哪些部分? – Nathan

+0

謝謝!我用單引號替換了前向引號,並且完美地工作。謝謝!! :) – Nathan

相關問題