2012-07-20 77 views
0

我一直在嘗試在上傳時重命名我的圖片,而我發現只有一段代碼是使用32char哈希的。在wordpress上重命名文件3.4.1

function make_filename_hash($filename) { 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    $name = basename($filename, $ext); 
    return md5($name) . $ext; 
} 
add_filter('sanitize_file_name', 'make_filename_hash', 10); 

我的PHP知識是非常有限的,我到處找,使用所產生的,而不是一個哈希一些隨機數,沒有成功的例子。我最初的想法是獲取數據庫圖像ID,並將其用作圖片文件名上傳,但我在這個過程中扭曲了我的大腦。

無論如何,在這一點上,我會解決某種編號系統,每次上傳時會增加一位數,或者如果不是使用範圍(如rand(10000,99999))範圍內的至少一些隨機數。

任何幫助將是非常讚賞感謝很多

================================= ================================================ 好的感謝您的幫助埃裏克,這是我迄今爲止似乎更好的工作。有什麼辦法可以讓它連續?顯然不使用mt_rand :)每次上傳都會增加1。也有可能產生兩次相同的數字,因爲這可能會造成上傳問題。

function make_filename_hash($filename) { 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    return mt_rand(10,10000) . $ext; 
} 
add_filter('sanitize_file_name', 'make_filename_hash', 10); 

=========================================== ====================================== 你可以從函數中的自定義表中讀取數據嗎? PHP並寫入它。我試圖從表中讀取計數器,將圖像設置爲該計數器編號並更新數據庫中的計數器。它似乎沒有工作,計數器增加,但表永遠不會更新,並且不管數據庫中的值是什麼,計數器不會使用該值,因此這意味着它不讀取此值。我只想知道是否有另一種方法來重命名文件,但是使用自定義表中的值。 這是我到目前爲止。我想也許我使用錯誤的鉤子,但在這一點上,我有點卡住了。多謝你們。

function make_filename_counter($filename) {  
    $qry; 
    $fcnt = 0; 
    $sql = ("SELECT counter FROM bwbps_filenamecounter WHERE id = 1"); 
    $cnt = mysql_query($sql); 
    foreach($cnt as $cnt) { 
     $fcnt = $cnt->counter; 
    } 
    $fcnt = $fcnt + 1; 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    $sql = "UPDATE bwbps_filenamecounter SET counter = " . $fcnt . " WHERE id = 1"; 
    $qry = mysql_query($sql); 
    $fcnt = 0; 
    return $fcnt . $ext; 
} 
add_filter('sanitize_file_name', 'make_filename_counter', 10); 

回答

1

基於答案this question,我建議是這樣的:

function make_filename_hash($filename) { 
    $info = pathinfo($filename); 
    $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
    $uniqueName = uniqid(basename($filename, $ext)); 
    return $uniqueName . $ext; 
} 
add_filter('sanitize_file_name', 'make_filename_hash', 10); 

這將使用原來的文件名作爲基礎,然後一個時間敏感標識符追加到。有關PHP的uniqid()函數的描述,請參閱here

我並不積極,但我相信WordPress在將任何內容保存到數據庫之前都會應用sanitize_file_name過濾器。如果是這種情況,您將無法將新名稱綁定到數據庫標識。

編輯

要返回的唯一標識符不包含原文件名:

function make_filename_hash($filename) { 
     $info = pathinfo($filename); 
     $ext = empty($info['extension']) ? '' : '.' . $info['extension']; 
     return uniqid() . $ext; 
    } 
+0

這很好看,它的工作很好,但我一直在尋找一個解決實際如果可能的話,刪除原始文件名,並以某種方式控制最終結果,即數字/標識符使用隨機生成器或其他連續系統。不過,我會繼續研究使用您的代碼作爲參考,也許我可以找到接近我需要的東西。非常感謝 – sky67ro 2012-07-20 21:41:47

+0

其他一些連續系統的含義是什麼?使用一個隨機數不會給你一個連續的數字序列。如果文件名稱反映它們上傳的順序很重要,則可以簡單地用文件夾/數據庫中當前圖像數量的計數替換文件名稱。讓我知道,如果這更好地描述你在追求什麼。 – 2012-07-20 21:48:37

+0

是的,我的想法是按順序而不是隨機地獲取文件名,但我不知道這是否可能,因爲我說我剛開始使用WP和PHP。仍然用目前在我的數據庫中的圖像數量替換文件名將不會反映我假設的新上傳,對吧?也許我誤解了,但我現在不太在意數據庫中存在的任何內容,並且對新上傳的文件將接收的名稱更感興趣。 – sky67ro 2012-07-20 22:00:34