2015-05-06 127 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