2012-08-09 81 views
0

我有一個上傳功能,我想檢查數據庫中是否有重複的文件名。如果有的話,我想重命名JPG,以便上傳的照片仍然會上傳。在PHP中重命名jpg文件

下面是我想出了代碼的行:

$shuffled = "qwertyuiopasdfghjkZxcvbnm"; 
$shuffled = str_shuffle($shuffled); 
$shuffled = $shuffled.".jpg"; 
rename($this->filename,$shuffled); 

我現在用的隨機播放功能在這裏以某種方式給予一個隨機的新的文件名, 我一直在使用一些其他的步驟類似的preg_replace試過,但jpg文件本身被損壞。有任何想法嗎?

+0

與問題無關,但隨機文件名仍然可能導致重複,您可能會追加越來越多的數字到文件名的末尾 – 2012-08-09 17:20:54

+0

所以問題是文件被損壞? – MalcolmOcean 2012-08-09 17:21:02

+0

問題是,當我通過將文件名視爲字符串來重命名文件時,文件本身會被損壞。 – user1242749 2012-08-09 17:30:45

回答

0

使用本:

copy($oldfilename,rand(10000000000,99999999999).".jpeg"); 
unlink($oldfilename); 

的文件名(不包括擴展名),將是一個數大於百億和smallet比99999999999

0

哪裏是在你的新文件名擴展???

Exmple

rename("/tmp/tmp_file.txt", "/home/user/login/docs/my_file.txt"); 
0

如果你打算使用一個隨機的文件名,使用microtime中()來生成一個隨機字符串。 一個更好的解決辦法是:

if(is_file($filename)) 
{ 
$filenameSplit = explode('.', $filename); 
$i = 1; 
while(is_file($filenameSplit[0] . "($i)." . $filenameSplit[1])) 
{ 
$i++; 
} 
$newFilename = $filenameSplit[0] . "($i)." . $filenameSplit[1]; 
rename($filename, $newFilename); 
} 
1

你的代碼是:

$shuffled = "qwertyuiopasdfghjkZxcvbnm"; 
$shuffled = str_shuffle($shuffled); 
$shuffled = $shuffle.".jpg"; 
rename($this->filename,$shuffled); 

第三行看起來應該是$洗牌= $洗牌。 「JPG」。

+0

+1用於發現 – 2012-08-09 17:52:28