2014-01-18 106 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

因此名稱將是唯一的。

或者,取決於組件中使用的功能,您可以以某種方式將用戶名添加到映像名稱。這取決於該組件的功能,並在我的因素(是否會有每個用戶只有一個圖像,或每其他一些功能,等等)