2010-06-01 94 views
1

我想移動文件內上傳/養老/#SOME_VARIABLE_NUMBER#/#SOME_CONSTANT_NUMBER#/PHP:如何重命名父目錄可變的目錄?

這裏是我的代碼:

// move pension statements 
// located at uploads/pension/%COMPANY_ID%/%USER_ID%/%HASH% 
// so just move the %USER_ID% folder to the new company 
$oldPensionDir = "uploads/pension/" . $demo_user[Users::companyID] . "/" . $demo_user[Users::userID] . "/"; 
$newPensionDir = "uploads/pension/" . $newCompanyID  . "/" . $demo_user[Users::userID] . "/"; 
// see if the user had any files, and if so, move them 
if(file_exists($oldPensionDir)) { 
// if it doesnt exist, make it 
if(!file_exists($newPensionDir)) 
    mkdir($newPensionDir); 
// move the folder 
rename($oldPensionDir, $newPensionDir); 
} 

但是......當我需要做的目錄與在「MKDIR」功能,我得到:

mkdir() [<a href='function.mkdir'>function.mkdir</a>]: No such file or directory 

好吧,也許MKDIR將無法正常工作,但對於重命名?也許這將使目錄,如果它不存在......不!

rename(uploads/pension/1001/783/,uploads/pension/1000/783/) [<a href='function.rename'>function.rename</a>]: The system cannot find the path specified. (code: 3) 

所以,有兩個錯誤。我很確定,如果重命名的作品,我甚至不需要mkdir,但誰知道...誰能告訴我爲什麼這些錯誤,以及如何解決它們?

謝謝!

編輯:我已經修改了代碼,現在我唯一的問題是一個接入問題......下面

rename(uploads/pension/1000_783/,uploads/pension/1001/783/) [<a href='function.rename'>function.rename</a>]: Access is denied. (code: 5) 

是新代碼。基本上,我重命名它三次(因爲它必須通過文件夾移動,但最後一步是導致'訪問被拒絕'的錯誤。奇怪的是,即使當我刪除新的目錄,它使一個新的,我其設置有燙髮0777 !!!什麼是錯與此

// move pension and total reward statements 
// located at uploads/pension|total_rewards/%COMPANY_ID%/%USER_ID%/%HASH% 
// so just move the %USER_ID% folder to the new company 
$oldPensionDir = "uploads/pension/" . $demo_user[Users::companyID] . "/" . $demo_user[Users::userID] . "/"; 
$tempPensionDir1 = "uploads/pension/" . $demo_user[Users::companyID]  . "/" . $demo_user[Users::companyID] . "_" . $demo_user[Users::userID] . "/"; 
$tempPensionDir2 = "uploads/pension/" . $demo_user[Users::companyID]  . "_" . $demo_user[Users::userID] . "/"; 
$newPensionDir = "uploads/pension/" . $newCompanyID     . "/" . $demo_user[Users::userID] . "/"; 
// see if the user had any files, and if so, move them 
if(file_exists($oldPensionDir)) { 
    // if it doesnt exist, make it 
    if(!file_exists($newPensionDir)) 
     mkdir($newPensionDir, 0777, true); 
    // move the folder 
    // first, move it to the pension directory 
    rename($oldPensionDir, $tempPensionDir1); 
    rename($tempPensionDir1, $tempPensionDir2); 
    // second, move it into the new directory 
    rename($tempPensionDir2, $newPensionDir); 
} 
+0

的文件路徑是相對的任何父目錄。代碼是否在正確的工作目錄中執行? – 2010-06-01 15:58:47

回答

0

刪除的mkdir,僅重命名:

rename($oldPensionDir, $newPensionDir); 

,你總是把衣服脫到要重命名,而不是它的目錄孩子:

uploads/pension/1001 

uploads/pension/1000 
+0

(你可以用'回聲GETCWD()'得到它),但是在上傳/養老/ 1001的其他文件夾應該呆在那裏=( – gsquare567 2010-06-01 16:04:41

+0

他們會留下來 - 你只需重命名他們的父母 – Tobias 2010-06-03 01:54:33

0

的mkdir()有一個recursive參數,你可以用它來創建所需路徑

+0

謝謝:)的MKDIR現在的作品。但我仍然有訪問問題。 – gsquare567 2010-06-01 17:45:43

+0

爲什麼它被重命名爲3次? 如果你mkdir()路徑不包括$ demo_user [Users :: userID],那麼怎麼樣。然後重命名爲包含$ demo_user [Users :: userID]的路徑 – baloo 2010-06-01 18:11:58