2014-01-18 70 views

回答

0

在我看来,你有两种方式。 第一个是与前缀保存图像这样

scotttiger-img12321323.jpg 

其中scotttiger是用户名和是用户输入。 另一种方法是使用不同的文件夹为每个用户

scotttiger/1231321.jpg 

,但如果你没有用户登录,并且不知道用户名,做ISFILE(http://it1.php.net/is_file)功能,并设定增量简单的检查名称。例如:

$wrote = false; 
$prog = 0; 
$filename="img-{$user_input}-{$prog}.jpg"; 
while(isfile($filename)) { 
    $prog++; 
    $filename="img-{$user_input}-{$prog}.jpg"; 
} 
write_file($filename); 

所以你第一次img-input-1.jpg第二次img-input-2.jpg等等。 使用此解决方案您没有重复或冲突。

您可以使用此解决方案提高性能:

$wrote = false; 
$prog = md5(time()); 
$filename="img-{$user_input}-{$prog}.jpg"; 
while(isfile($filename)) { 
    $prog = md5(time()); 
    $filename="img-{$user_input}-{$prog}.jpg"; 
} 
write_file($filename); 
+0

这种方法可能是缓慢的,如果你有很多文件迭代可以霸占你的脚本。最好在图像上附加一个随机标识符,并测试该文件是否存在,用几次迭代就可以获得文件名。 –

+0

是的,它可以通过这个任务得到改进:'$ prog = md5(time());' – gafreax

+0

这种方法的问题在于你遇到了一堆文件。我可以在Joomla中删除某种__destruct中的文件吗? – Michael

0

您可以借助例如生成随机名称。日期和php哈希函数: http://www.php.net/manual/en/function.hash.php

因此名称将是唯一的。

或者,取决于组件中使用的功能,您可以以某种方式将用户名添加到映像名称。这取决于该组件的功能,并在我的因素(是否会有每个用户只有一个图像,或每其他一些功能,等等)