2015-05-06 9 views
6

Próbuję użyć funkcji zmiany nazwy w php.php rename() Odmowa dostępu. (kod: 5)

Na pierwszej próbie, jeśli folder docelowy jest pusty lub nie zawiera żadnych katalogów o takiej samej nazwie jak folder źródłowy funkcja zmiany nazwy działa idealnie. Jeśli jednak istnieje ta sama nazwa katalogu, nie powiedzie się. Potrzebuję tylko go nadpisać i pomyślałem, że wystarczy zmienić nazwę().

Oto mój kod:

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

Powyższy kod daje mi błąd mówiąc:

Wiadomość: zmiany nazwy (C: \ XAMPP \ htdocs \ ssmis \ public \ Resources \ temps \ gwałciciel/SJ-VIOL-2015-0002, C:/xampp/htdocs/ssmis/public/resources/zdjęcia/gwałciciel/SJ-VIOL-2015-0002): Odmowa dostępu. (kod: 5)

Używam CodeIgniter jako ramy.

Dziękuję bardzo!

+3

Sprawdź uprawnienia do plików. – panther

+0

Udało mi się pomyślnie użyć zmiany nazwy(), jak już wspomniałem powyżej. Ale kiedy próbuję użyć go do przeniesienia folderu ze źródła do folderu docelowego, w którym występuje ta sama nazwa co zasób, pojawia się błąd. Czy nadal muszę sprawdzać uprawnienia do plików, ponieważ mogłem pisać w katalogu? – iamjc015

+0

Nie możesz mieć folderów o tej samej nazwie w katalogu, musisz sprawdzić dla tej samej nazwy i "scalić" zawartość w razie potrzeby. –

Odpowiedz

9

Jeśli jest w systemie Windows, może to być czytaj składek:

rename() zdecydowanie nie wynika konwencję * nix zmiany nazwy na WinXP z PHP 5. Jeżeli $ newname istnieje, zwróci FALSE i $ i $ newname oldname pozostanie w stanie pierwotnym . Można zrobić coś takiego zamiast:

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

Link.

+0

Oto, co zrobiłem, aby rozwiązać ten problem. Usuwam stary plik. Dzięki. – iamjc015

+0

Świetnie. Szczęśliwe kodowanie. – Tpojka

+0

Dwojak, wyjaśnienie proszę. Dzięki. – Tpojka

0

możliwość dodawania dodatkowych/w ścieżce zrobić to jak

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

można również echo ścieżkę jesteś przygotowany, dzięki czemu można sprawdzić jego prawa lub nie

+0

Wrócę do ciebie, jeśli to będzie praca. – iamjc015

+0

To nie zadziałało. Potrzebuję tego ukośnika, by zlokalizować katalog ... – iamjc015