2012-08-09 91 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