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

iam*_*015 8 php codeigniter

所以我试图在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;
        }
Run Code Online (Sandbox Code Playgroud)

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

消息:重命名(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作为框架.

非常感谢你!

Tpo*_*jka 15

如果它在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;
}
Run Code Online (Sandbox Code Playgroud)

链接.

  • 这就是我为解决问题所做的工作。我删除旧文件。谢谢。 (2认同)