Итак, я пытаюсь использовать функцию 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 как фреймворк.
Большое спасибо!
Если он находится в 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;
}
Вы добавляете дополнительный/путь, чтобы сделать это как
/**
* 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;
}
вы также можете отследить путь, который вы подготовили, чтобы проверить его право или нет.