php rename() 访问被拒绝。(代码: 5)

2022-08-31 01:01:46

所以我正在尝试在php中使用重命名函数。

在第一次尝试时,如果目标文件夹为空或不包含任何与源文件夹同名的目录,则重命名功能可以完美地工作。但是,如果存在相同的目录名称,则会失败。我想要的只是覆盖它,我认为重命名()就足够了。

这是我的代码:

/**
        *   Move temp folders to their permanent places
        *
        *   $module_folder = example (violator, pnp, etc)       
        *   $folders = name of folders within module_folder
        **/
        public function move_temp_to_permanent($module_folder, $folders){
            $bool = false;

            $module_folder_path = realpath(APPPATH . '../public/resources/temps/' . $module_folder);

            $module_folder_destination_path = $_SERVER['DOCUMENT_ROOT'] . '/ssmis/public/resources/photos/' . $module_folder . '/';

            foreach($folders as $folder){
                $bool = rename($module_folder_path . '/' . $folder, $module_folder_destination_path . $folder);
            }

            return $bool;
        }

上面的代码给了我一个错误,说:

消息:重命名(C:\xampp\htdocs\ssmis\public\resources\temps\violator/SJ-VIOL-2015-0002,C:/xampp/htdocs/ssmis/public/resources/photos/violator/SJ-VIOL-2015-0002):访问被拒绝。(代码: 5)

我正在使用CodeIgniter作为框架。

谢谢!


答案 1

如果它在Windows上,可以在贡献中阅读:

rename() 绝对不遵循 PHP 5 在 WinXP 上的 *nix 重命名约定。如果$newname存在,它将返回 FALSE 并$oldname,$newname将保持其原始状态。您可以改为执行类似操作:

function rename_win($oldfile,$newfile) {
    if (!rename($oldfile,$newfile)) {
        if (copy ($oldfile,$newfile)) {
            unlink($oldfile);
            return TRUE;
        }
        return FALSE;
    }
    return TRUE;
}

链接


答案 2

您正在添加额外的/在路径中使这像

/**
        *   Move temp folders to their permanent places
        *
        *   $module_folder = example (violator, pnp, etc)       
        *   $folders = name of folders within module_folder
        **/
        public function move_temp_to_permanent($module_folder, $folders){
            $bool = false;

            $module_folder_path = realpath(APPPATH . '../public/resources/temps/' . $module_folder);

            $module_folder_destination_path = $_SERVER['DOCUMENT_ROOT'] . '/ssmis/public/resources/photos/' . $module_folder . '/';

            foreach($folders as $folder){
                $bool = rename($module_folder_path . $folder, $module_folder_destination_path . $folder);
            }

            return $bool;
        }

您还可以回显您准备的路径,以便您可以检查其是否正确


推荐