2014-01-10 59 views
0

我想創建一個函數來創建一個目錄來存儲照片在文件系統中。假設根目錄中有一個名爲「albums」的目錄。頁面上有一個表單,允許用戶創建一個新的相冊,該相冊將在「相冊」下創建一個子目錄。如何在使用PHP調用mkdir之前驗證目錄名稱?

我也想有嵌套相冊的能力。創建新相冊時,管理員可以使用正斜槓(/)分隔符以遞歸方式創建該文件夾結構來提供相冊名稱。

我使用的目錄,是因爲我想通過直接訪問FTP服務器用於處理大量相冊管理相冊的能力。每個照片目錄可以有一個可選的album.properties文件,以將任何元數據與相冊本身相關聯(例如用於相冊的縮略圖)。

if (!is_admin()) die(); 
$album_name = $_GET['album_name']; 
if ($album_name) { 
    $directory = "/albums/" . $album_name; 
    // TODO: How can I validate $album_name? 
    if (file_exists($directory)) { 
    echo "Album already exists, please choose a different name."; 
    } else if (mkdir($album_name), 0777, true) { // Recursive is true 
    echo "Album successfully created."; 
    } else { 
    // TODO: Is there a way to output a more detailed explanation? 
    echo "The album could not be created."; 
    } 
} 

請參閱PHP代碼中的TODO標記。此外,如果您對我的方法有任何建議,那將是有用的。

請注意,直到最近我才決定使用目錄和屬性文件而不是數據庫表來存儲與相冊/照片相關的元數據,因爲我最近才發現客戶端希望使用FTP。

我仍然需要有數據庫表,不過,允許管理員將權限分配給現有的相冊。例如,管理員可以與公衆或其他非管理員用戶共享特定專輯。 /albums目錄不會直接訪問,而是另一個.php將允許下載照片或讀取元數據,但僅限於授權用戶。

編輯:

添加上我想要的東西更多的澄清:

  1. 要驗證$album_name是有效的目錄名,如果它是無效的我想輸出的錯誤信息。另外我想向用戶解釋如何選擇一個有效的目錄名稱。

  2. 我想輸出更詳細的消息,如果MKDIR失敗,告訴他/她可以做,以糾正問題的用戶。

+2

「我如何可以驗證$ ALBUM_NAME?」 「確認」是什麼意思?你有什麼嘗試? –

+0

我不知道這是否正是你所說的,但我做了一個谷歌搜索,並找到一個函數,指出是否存在一個文件/目錄:http://us3.php.net/file_exists – donsiuch

+0

我有澄清後修改了該職位。 – codefactor

回答

1

您可以使用正則表達式或只是檢查mkdir是否成功。

查看此問題以供參考答案: Check a string for a valid directory name

編輯1:

要檢查的mkdir功能會成功,你可以先用PHP函數如is_writable檢查您是否有權限寫在那個位置。如果沒有,你可以讓你的用戶知道(但如果是這種情況,你應該考慮爲什麼他們試圖寫一些他們沒有權限的地方)。否則,如果mk_dir函數失敗,您將能夠記錄失敗並在稍後檢查問題。除此之外,你可能不應該告訴用戶多不先調查該問題

+0

謝謝你的鏈接。 – codefactor

+0

假設我使用正則表達式,並且檢查過目錄是否已經存在,是否有任何理由讓'mkdir'仍然失敗? – codefactor

+0

是的,如權限,協調等等 – RyanS