Подтвердить что ты не робот

Переместить все файлы в папку в другую?

при перемещении одного файла из одного места в другое я использую

rename('path/filename', 'newpath/filename');

как вы перемещаете все файлы в папку в другую папку? попробовал это безрезультатно:

rename('path/*', 'newpath/*');
4b9b3361

Ответ 1

Несколько подробное решение:

// Get array of all source files
$files = scandir("source");
// Identify directories
$source = "source/";
$destination = "destination/";
// Cycle through all source files
foreach ($files as $file) {
  if (in_array($file, array(".",".."))) continue;
  // If we copied this successfully, mark it for deletion
  if (copy($source.$file, $destination.$file)) {
    $delete[] = $source.$file;
  }
}
// Delete all successfully-copied files
foreach ($delete as $file) {
  unlink($file);
}

Ответ 2

Альтернативный вариант с помощью rename() и с некоторой проверкой ошибок:

$srcDir = 'dir1';
$destDir = 'dir2';

if (file_exists($destDir)) {
  if (is_dir($destDir)) {
    if (is_writable($destDir)) {
      if ($handle = opendir($srcDir)) {
        while (false !== ($file = readdir($handle))) {
          if (is_file($srcDir . '/' . $file)) {
            rename($srcDir . '/' . $file, $destDir . '/' . $file);
          }
        }
        closedir($handle);
      } else {
        echo "$srcDir could not be opened.\n";
      }
    } else {
      echo "$destDir is not writable!\n";
    }
  } else {
    echo "$destDir is not a directory!\n";
  }
} else {
  echo "$destDir does not exist\n";
}

Ответ 3

Попробуйте это решение, оно успешно протестировано:

<?php
  $files = scandir("f1");
  $oldfolder = "f1/";
  $newfolder = "f2/";
  foreach($files as $fname) {
      if($fname != '.' && $fname != '..') {
          rename($oldfolder.$fname, $newfolder.$fname);
      }
  }
?>

Ответ 4

Итак, я попытался использовать функцию rename(), как описано, и я все время возвращал сообщение об ошибке no such file or directory. Я поместил код в оператор if else, чтобы убедиться, что у меня действительно созданы созданные каталоги. Это выглядело так:

$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);
if(is_dir($permanentDir)){
    echo $permanentDir . ' is a directory';
    if(is_dir($tempDir)){
        echo $tempDir . ' is a directory';
    }else{
        echo $tempDir . ' is not a directory';
    }
}else{
    echo $permanentDir . ' is not a directory';
}

rename($tempDir . "*", $permanentDir);

Итак, когда я снова запустил код, он выплюнул, что оба пути - это каталоги. Я был в тупике. Я поговорил с коллегой, и он предложил: "Почему бы просто не переименовать каталог temp в новый каталог, так как вы все равно хотите переместить все файлы?"

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

чтобы он выглядел следующим образом.

$tempDir = '/home/site/images/tmp/';
$permanentDir = '/home/site/images/' . $claimid; // this was stored above
mkdir($permanentDir,0775);

rename($tempDir, $permanentDir);

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

Надеюсь, это поможет. Если кто-нибудь знает, почему шаблон не работает в функции rename() и почему я получаю сообщение об ошибке выше, пожалуйста, дайте мне знать.

Ответ 5

попробовал это?:

     <?php

     $oldfolderpath = "old/folder";
     $newfolderpath = "new/folder";

     rename($oldfolderpath,$newfolderpath);
     ?>

Ответ 6

попробуйте следующее: rename ('путь/*', 'newpath/');

Я не вижу смысла иметь звездочку в пункте назначения

Ответ 7

Если целевой каталог не существует, его необходимо сначала создать:

mkdir('newpath');
rename('path/*', 'newpath/');

Ответ 8

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

... (some codes for directory looping) ...
if (copy($source.$file, $destination.$file)) {
   $delete[] = $source.$file;

   $filetimestamp = filemtime($source.$file); 
   touch($destination.$file,$filetimestamp);
}
... (some codes) ...

Ответ 9

Не уверен, что это помогает кому-то или нет, но думал, что я все равно отправлю. Был вызов, когда у меня было множество фильмов, которые я купил и загрузил через различные интернет-магазины, все хранящиеся в одной папке, но все в их собственных подпапках и все с различными соглашениями об именах. Я хотел переместить все их в родительскую папку и переименовать их все, чтобы выглядеть красиво. все подпапки, которые мне удалось переименовать, с помощью инструмента массового переименования и форматирования условных имен. вложенные папки имели другие файлы, в которые я не хотел. поэтому я написал следующий php script to, 1. переименуйте/переместите все файлы с расширением mp4 в родительский каталог, указав им то же имя, что и их содержащая папка, 2. удалите содержимое вложенных папок и найдите каталоги внутри них для пустых а затем rmdir, 3. rmdir подпапки.

$handle = opendir("D:/Movies/");
while ($file = readdir($handle)) {
if ($file != "." && $file != ".." && is_dir($file)) {
    $newhandle = opendir("D:/Movies/".$file);
    while($newfile = readdir($newhandle)) {
        if ($newfile != "." && $newfile != ".." && is_file("D:/Movies/".$file."/".$newfile)) {
            $parts = explode(".",$newfile);
            if (end($parts) == "mp4") {
                if (!file_exists("D:/Movies/".$file.".mp4")) {
                    rename("D:/Movies/".$file."/".$newfile,"D:/Movies/".$file.".mp4");
                }
                else {
                    unlink("D:/Movies/".$file."/".$newfile);
                }
            }
            else { unlink("D:/Movies/".$file."/".$newfile); }
        }
        else if ($newfile != "." && $newfile != ".." && is_dir("D:/Movies/".$file."/".$newfile)) {
            $dirhandle = opendir("D:/Movies/".$file."/".$newfile);
            while ($dirfile = readdir($dirhandle)){
                if ($dirfile != "." && $dirfile != ".."){
                    unlink("D:/Movies/".$file."/".$newfile."/".$dirfile);
                }
            }
            rmdir("D:/Movies/".$file."/".$newfile);
        }
    }
    unlink("D:/Movies/".$file);
}
}

Ответ 10

Переместить или скопировать, как я его использую

function copyfiles($source_folder, $target_folder, $move=false) {
    $source_folder=trim($source_folder, '/').'/';
    $target_folder=trim($target_folder, '/').'/';
    $files = scandir($source_folder);
    foreach($files as $file) {
        if($file != '.' && $file != '..') {
            if ($move) {
                rename($source_folder.$file, $target_folder.$file);
            } else {
                copy($source_folder.$file, $target_folder.$file);
            }
        }
    }   
}

function movefiles($source_folder, $target_folder) {
    copyfiles($source_folder, $target_folder, $move=true);
}