2015-05-06 84 views
6

所以我想在php中使用rename函数。php rename()访问被拒绝。 (代码:5)

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

这里是我的代码:

/** 
     * 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 \资源\临时工\违反者/ SJ-VIOL-2015-0002,C:/ xampp/htdocs/ssmis/public/resources/photos/violator/SJ-VIOL-2015-0002): 访问被拒绝。 (代码:5)

我使用CodeIgniter作为框架。

非常感谢!

+3

检查文件权限。 – panther

+0

我可以像上面所说的那样成功地使用rename()。但是,当我尝试使用它将源文件夹移动到与资源名称相同的目标文件夹时,就会发生错误。我是否仍然需要检查文件权限,因为我能够在目录上编写? – iamjc015

+0

你不能在一个目录中使用同名的文件夹,你需要检查相同的名字,如果需要,可以合并内容。 –

回答

9

如果是在Windows上,这可能是读捐款:

重命名()绝对不遵循在WinXP的* nix的命名约定与PHP 5.如果$ 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; 
} 

Link

+0

这是我所做的解决问题的方法。我删除了旧文件。谢谢。 – iamjc015

+0

太好了。快乐的编码。 – Tpojka

+0

Downvoter,请解释。谢谢。 – Tpojka

0

你增加额外/路径使这个像

/** 
     * 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; 
     } 

你也可以呼应准备的路径,这样你就可以检查它的正确与否

+0

如果这项工作我会回复你。 – iamjc015

+0

它没有奏效。我需要这个正斜杠来找到目录... – iamjc015