при перемещении одного файла из одного места в другое я использую
rename('path/filename', 'newpath/filename');
как вы перемещаете все файлы в папку в другую папку? попробовал это безрезультатно:
rename('path/*', 'newpath/*');
при перемещении одного файла из одного места в другое я использую
rename('path/filename', 'newpath/filename');
как вы перемещаете все файлы в папку в другую папку? попробовал это безрезультатно:
rename('path/*', 'newpath/*');
Несколько подробное решение:
// 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);
}
Альтернативный вариант с помощью 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";
}
Попробуйте это решение, оно успешно протестировано:
<?php $files = scandir("f1"); $oldfolder = "f1/"; $newfolder = "f2/"; foreach($files as $fname) { if($fname != '.' && $fname != '..') { rename($oldfolder.$fname, $newfolder.$fname); } } ?>
Итак, я попытался использовать функцию 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()
и почему я получаю сообщение об ошибке выше, пожалуйста, дайте мне знать.
попробовал это?:
<?php
$oldfolderpath = "old/folder";
$newfolderpath = "new/folder";
rename($oldfolderpath,$newfolderpath);
?>
попробуйте следующее: rename ('путь/*', 'newpath/');
Я не вижу смысла иметь звездочку в пункте назначения
Если целевой каталог не существует, его необходимо сначала создать:
mkdir('newpath');
rename('path/*', 'newpath/');
В качестве побочного примечания; при копировании файлов в другую папку их последнее измененное время становится текущей временной меткой. Таким образом, вы должны прикоснуться() к новым файлам.
... (some codes for directory looping) ...
if (copy($source.$file, $destination.$file)) {
$delete[] = $source.$file;
$filetimestamp = filemtime($source.$file);
touch($destination.$file,$filetimestamp);
}
... (some codes) ...
Не уверен, что это помогает кому-то или нет, но думал, что я все равно отправлю. Был вызов, когда у меня было множество фильмов, которые я купил и загрузил через различные интернет-магазины, все хранящиеся в одной папке, но все в их собственных подпапках и все с различными соглашениями об именах. Я хотел переместить все их в родительскую папку и переименовать их все, чтобы выглядеть красиво. все подпапки, которые мне удалось переименовать, с помощью инструмента массового переименования и форматирования условных имен. вложенные папки имели другие файлы, в которые я не хотел. поэтому я написал следующий 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);
}
}
Переместить или скопировать, как я его использую
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);
}