PHP: Как мне переименовать каталог, в котором родительский каталог является переменной? - PullRequest
1 голос
/ 01 июня 2010

Я хотел бы переместить файлы в загрузках / pension / # SOME_VARIABLE_NUMBER # / # SOME_CONSTANT_NUMBER # /

вот мой код:

// 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)

ниже новый код. в основном, я переименовываю его три раза (потому что он должен перемещаться по папкам, но последний шаг - это то, что вызывает ошибку «отказано в доступе». Странная часть в том, что даже когда я удаляю новый каталог и он создает новый установите для этого значение perms 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);
}

Ответы [ 2 ]

0 голосов
/ 01 июня 2010

mkdir () имеет параметр recursive, который можно использовать для создания любых родительских каталогов, необходимых для пути

0 голосов
/ 01 июня 2010

удалить mkdir и переименовать только:

rename($oldPensionDir, $newPensionDir);

где вы всегда выбираете каталог, который хотите переименовать, а не его дочерние элементы:

uploads/pension/1001

до

uploads/pension/1000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...