php rename () Доступ запрещен. (код: 5)

6

Итак, я пытаюсь использовать функцию rename в php.

С первой попытки, если папка назначения пуста или не содержит каталогов с тем же именем, что и исходная папка, функция переименования отлично работает. Однако, если есть одно и то же имя каталога, он терпит неудачу. Я хочу просто перезаписать его, и я думал, что rename() будет достаточным.

Вот мой код:

/**
        *   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\нарушитель/SJ-VIOL-2015-0002, C:/XAMPP/HTDOCS/ssmis/государственный/ресурсы/фотография/нарушитель/SJ-VIOL-2015- 0002): В доступе отказано. (код: 5)

Я использую CodeIgniter как фреймворк.

Большое спасибо!

  • 3
    Проверьте права доступа к файлу.
  • 0
    Я смог успешно использовать rename (), как я уже говорил выше. Но когда я пытаюсь использовать его для перемещения папки из исходной папки в папку назначения, в которой имя совпадает с именем ресурса, возникает ошибка. Нужно ли мне проверять права доступа к файлам, так как я смог записать в каталог?
Показать ещё 7 комментариев
Теги:
codeigniter

2 ответа

9
Лучший ответ

Если он находится в Windows, это можно прочитать в отчетах:

rename() определенно не соответствует соглашению о переименовании * nix на WinXP с 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;
}

Ссылка.

  • 0
    это то, что я сделал, чтобы решить проблему. Я удаляю старый файл. Благодарю.
  • 0
    Отлично. Удачного кодирования.
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
    Я вернусь к вам, если эта работа.
  • 0
    Это не сработало. Мне нужна эта косая черта, чтобы найти каталог ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню