скопировать файл из одной папки в другую - PullRequest
0 голосов
/ 12 октября 2009

Я хочу переместить все файлы из одной папки в другую. мой код выглядит следующим образом. в этом я сделал папку, в которую я хочу скопировать все файлы из папки templats

$doit = str_replace(" ", "", $slt['user_compeny_name']);
mkdir("$doit");
$source = "templat/";
$target = $doit . "/";
$dir = opendir($source);
while (($file = readdir($dir)) !== false) {
    copy($source . $file, $target . $file);
}

Работает нормально. скопировать все файлы, но предупредить, что первый аргумент функции copy () не может быть каталогом

Может ли кто-нибудь помочь мне как можно скорее

Ответы [ 5 ]

4 голосов
/ 12 октября 2009

Readdir будет читать всех дочерних элементов в каталоге, включая другие каталоги, и, например, «виртуальные» каталоги. и .. (ссылка на корневую и родительскую директорию, соответственно). Вы должны будете проверить их и запретить функцию copy() для этих экземпляров.

while (($file = readdir($dir)) !== false)
{
    if(!is_dir($file))
    {
        copy($source.$file, $target.$file);
    }
}
3 голосов
/ 12 октября 2009

opendir() будет включать элементы . и .. согласно документации .

Вам нужно будет исключить их, используя код в других комментариях.

3 голосов
/ 12 октября 2009

Вы не учитываете файлы . и .. в верхней части каталога.Это означает, что первое, что он пытается скопировать, это «\ template».это было бы то же самое, что пытаться скопировать каталог.

3 голосов
/ 12 октября 2009
if ($file != "." && $file != "..") {
// copy
}
1 голос
/ 03 февраля 2017

Я знаю, этот вопрос довольно старый, но есть и ответы. Я чувствую необходимость показать некоторые новые методы, которые можно использовать для выполнения запрошенной задачи.

В то же время Объекты были представлены с гораздо большим количеством функций и возможностей. Излишне говорить, что другие ответы будут работать так же хорошо.

Но здесь мы используем DirectoryIterator :

$szSrcFolder = 'source_folder';
$szTgtFolder = 'target_folder';

foreach (new DirectoryIterator($szSrcFolder) as $oInfo)
    if ($oInfo->isFile())
        copy($oInfo->getPathname(), $szTgtFolder . DIRECTORY_SEPARATOR . $oInfo->getBasename());

Помните, что в этом скрипте все пути указаны относительно рабочего каталога самого скрипта.

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

...