Как переименовать папку с вложенными файлами?

Zhenya

Новичок
Как переименовать папку с вложенными файлами?

Требуется переименовать папку, в которой есть файлы (их может быть много).

Например такой путь:
H:\dirname1/dirname2
Нужно сделать таким:
H:\dirname1/dirname5

PHP:
$dirname='H:\dirname1/dirname2';
$ndir = 'dirname5';

//переименовываем папку
$ddir = explode("/", $dirname);                   //все что до имени папки
$rdir = array_pop($ddir);                             //имя папки
$comma_separated = implode("/", $ddir);   //собрали вновь
$new_dir = $comma_separated."/".$ndir;

if ($dirname!=$new_dir) { 
echo "Меняем ".$dirname." на ".$new_dir."<br>";
if (rename ($dirname, $new_dir)) {
echo "Папка переименована в ".$new_dir."<br>";}
}
...ругается на rename ---- Permission denied.....
 

antson

Новичок
Партнер клуба
Zhenya
прочитай про chmod и owner в unix. поймешь в чем дело
 

Zhenya

Новичок
Автор оригинала: antson
Zhenya
прочитай про chmod и owner в unix. поймешь в чем дело
Причемтут chmod и owner? Это всё тестируется на Denver в операционной системе Win. XP

Вот код переименования файла:
PHP:
//переименовываем файл
$old_patch = $dirname."/".$file;
$new_patch = $dirname."/".$name.".txt";

if ($old_patch!=$new_patch) { echo "Меняем ".$old_patch." на ".$new_patch."<br>";
if (rename ($old_patch, $new_patch)) {echo "Файл переименован в ".$new_patch."<br>";}
}
это РАБОТАЕТ .....

а код, который привел в начале поста располагаю после этого...

так вот, файл переименовывает и останавливается с выводом ошибки...
 

Фанат

oncle terrible
Команда форума
при том, что проблема твоя не в переименовании. если ты до сих пор этого не пнял.
так что беги за словарем.
 

Wicked

Новичок
1)
Требуется переименовать папку, в которой есть файлы (их может быть много).
Вот и переименовывай директорию. Причем тут файлы и их кол-во?

2) в винде (в частности, на ntfs-разделах) тоже есть права доступа к файловой системе.

3) http://phpfaq.ru/debug . В первую очередь смотреть на замысловатую логику того, что и куда ты пытаешься переименовать.
 

Zhenya

Новичок
может после переименования файла требуется закрыть (closedir) эту папку, а потом снова обращаться к ней с тем, чтобы переименовать её?
 

Zhenya

Новичок
Да, похоже дело в правах...
...а как изменить?

chmod ($dirname, 0755) не помогает...

и в справочнике написано:
Примечание: эта функция не реализована для платформ Windows.

-~{}~ 18.06.08 10:45:

Когда проводником снимаю галку "Только чтение" - мой код работает...
 

antson

Новичок
Партнер клуба
Zhenya
очень странная ситуация. в реале не могу представить.
если у тебя денвер и хп, то все файлы на компе простого пользователя создатель администратор, права доступа полные, денвер тоже от имени админа запущен.

чтото вы тут не договариваете про окружение на машине.

-~{}~ 18.06.08 10:51:

>>Когда проводником снимаю галку "Только чтение" - мой код работает..

остается понять откуда на папке взялся атрибут readonly.
копировал мпз с компакт диска ?

-~{}~ 18.06.08 10:54:

сменить атрибуты под виндой можно вызовом команды доса
ATTRIB Отображение и изменение атрибутов файлов.

c:>help ATTRIB - справка о ее ключах
 

Zhenya

Новичок
Автор оригинала: antson
чтото вы тут не договариваете про окружение на машине.
...всё от админа...

Так, приведу весь код и результаты:

код:
PHP:
<?php
$dirname="I:\Тест2/atest_testdir";
$ttfile = "test_file";
$file="test_testfile.txt";


//переименовываем файл
$old_patch = $dirname."/".$file;
$new_patch = $dirname."/".$ttfile.".txt";

if ($old_patch!=$new_patch) { echo "Меняем ".$old_patch." на ".$new_patch."<br>";
if (rename ($old_patch, $new_patch)) {echo "Файл переименован в ".$new_patch."<br>";}
}

//переименовываем папку
$ddir = explode("/", $dirname); //все что до имени папки
$rdir = array_pop($ddir);//имя папки
$comma_separated = implode("/", $ddir); //собрали вновь
$new_dir = $comma_separated."/".$ttfile;

if ($dirname!=$new_dir) { echo "Меняем ".$dirname." на ".$new_dir."<br>";
if (rename ($dirname, $new_dir)) {echo "Папка переименована в ".$new_dir."<br>";}
}

?>
результат выполнения операции (сняли галку "Только чтение"):

PHP:
Меняем I:\Тест2/atest_testdir/test_testfile.txt на I:\Тест2/atest_testdir/test_file.txt
Файл переименован в I:\Тест2/atest_testdir/test_file.txt
Меняем I:\Тест2/atest_testdir на I:\Тест2/test_file
Папка переименована в I:\Тест2/test_file
После этого переименовываю в ручную (из проводника) папку и файл в ней, и пробую снова...
результат:
PHP:
Меняем I:\Тест2/atest_testdir/test_testfile.txt на I:\Тест2/atest_testdir/test_file.txt
Файл переименован в I:\Тест2/atest_testdir/test_file.txt
Меняем I:\Тест2/atest_testdir на I:\Тест2/test_file

Warning: rename(I:\Тест2/atest_testdir,I:\Тест2/test_file) [function.rename]: Permission denied in Z:\home\test1.ru\www\index.php on line 24
...и в свойствах папки снова стоит "Только чтение" ....
???
 

antson

Новичок
Партнер клуба
а посмотреть не виноват ли проводник конечно не догадался ?
атрибуты папки.
переименование из пхп .
атрибуты ?

атрибуты папки.
переименование из проводника .
атрибуты ?
 

Zhenya

Новичок
галка оказывается серого цвета всегда :)
значит атрибуты в норме....
в чем дело, не понятно...

-~{}~ 18.06.08 11:51:

попробовал на другой папке, так на той даже со всеми манипуляциями с атрибутами папка не переименовывается...
файл переименовывается в любой из папок, а сама папка, где лежит этот файл - нет....

??? :(
 

antson

Новичок
Партнер клуба
значит ктото держит этот файл .
попробуй например 2мя копиями фара
создай папку 1
в ней файлик 0.txt
отрой его на редактирование
переменуй 1 в 2

в результате имеем 2\0.txt и пустую папку 1
 
Сверху