PHP переместить выбранные файлы из папки A в папку B - PullRequest
1 голос
/ 24 марта 2011

Это сложный вопрос, и я не уверен, с чего начать, поэтому любая помощь будет благодарна.

У меня есть родительская папка с именем 'source' (c: / dev / source), которая содержит несколько дочерних папок.

Мне нужен PHP-скрипт, который будет отображать дочерние папки с флажками рядом с каждым и текстовое поле для имени новой папки, позволяя пользователям ставить флажки для тех, которые они хотят скопировать в пункт назначения c: / DEV / назначения / the_folder_name_they_typed_in

Когда они нажимают кнопку отправить, выбранные дочерние папки будут скопированы из c: / dev / source в c: / dev / destination / the_folder_name_they_typed_in

Это все работает на локальном внутреннем сервере разработки. Дочерние папки всегда будут в папке c: / dev / source /

Ответы [ 2 ]

1 голос
/ 24 марта 2011

Somme advice:

Используйте белый список для разрешенных символов в папке назначения.Передайте операцию только в том случае, если она соответствует:

^[a-z0-9_-]+$

Вы можете использовать индексы массива для имен каталогов.Таким образом, вы можете перебирать ckeckboxes с помощью foreach ($_POST["dirs"]) { ... }

<input type="checkbox" name="dirs[directory_name]"/>
<input type="checkbox" name="dirs[other_dir_name]"/>
<input type="checkbox" name="dirs[third_directory_name]"/>

Всегда сверять имена каталогов с белым списком , как описано выше.(Если вы разрешите такие символы, как . или / или многие другие, это может быть угрозой безопасности).

0 голосов
/ 24 марта 2011

Вот небольшой фрагмент кода под названием DirectoryIterator.Это не полностью документировано на сайте PHP, но вот его суть:

Создайте список файлов и папок с флажками рядом с ними, добавьте их все в массив.*

Теперь добавьте эту часть в начало файла

<?php 
if($_POST){
if(is_array($_POST['copy'])) foreach($_POST['copy'] as $c){
 @copy($c, str_replace('c:/dev/source','c:/dev/dest', $c));
  echo "copied: $c to ". str_replace('c:/dev/source','c:/dev/dest', $c) . "<br>";

}
}

Я не совсем уверен, какой результат вы получите от $r->getSubPathName() Можете ли вы дать мне знать, если он выводит массив?если это так, возможно, вы замените это на $ r-> getSubPath (), а затем добавите «c: / dev / source» в переменную $ c, когда вы копируете ее?*

здесь

...