başka bir klasördeki tüm dosyaları taşımak?

7 Cevap php

i kullanmak başka bir yerden bir dosyayı taşırken

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

nasıl bir klasördeki tüm dosyaları başka bir klasöre taşırım? Sonuç olmadan bunu denedim:

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

7 Cevap

Biraz ayrıntılı çözüm:

// 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);
}

Adlandırmak kullanarak alternatif bir () ve bazı hata denetimi:

$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";
}

try this: rename('path/*', 'newpath/');

Ben hedef bir yıldız olan bir nokta görmüyorum

Yani anlatıldığı gibi rename() işlevini kullanmak için çalıştı ve ben orada no such file or directory o hatayı geri almak tuttu. Ben gerçekten dizin oluşturuldu var mıydı sağlamak için bir else if deyimi içinde kodu yerleştirilir. Bu gibi görünüyordu:

$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);

Ben tekrar kod koştu Yani, hem yolları dizinleri olduğunu tükürmek. Ben şaşkına dönmüş. "Sen zaten bütün dosyaları taşımak istiyorum çünkü Neden sadece yeni dizine geçici dizini yeniden adlandırmak değil?", Ben bir arkadaşı ile konuştum ve o önerdi

Meğerse bu ben yapıyor sona budur. Ben rename() fonksiyonu ile joker kullanmak yerine sadece kalıcı birine temp dizini yeniden adlandırmak için rename() kullanmaya çalışıyor vazgeçti.

bu nedenle bu gibi görünüyor.

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

rename($tempDir, $permanentDir);

Dosya yüklendi ve "taşındı" edildikten sonra orada kalmasını eski tmp dizini gerek yok çünkü bu benim amaçlar için güzel çalıştı.

Umarım bu yardımcı olur. Joker rename() fonksiyonu çalışmıyor ve neden ben yukarıda belirten hata alıyorum neden herkes bilir, lütfen bana bildirin.

Hedef dizin mevcut değilse, önce bunu oluşturmanız gerekir:

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

Bir yan not olarak; Eğer başka bir klasöre dosya kopyalamak zaman, onların son değiştirilen zaman geçerli zaman damgası olur. Yani touch() yeni dosyalar gerekir.

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

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

Bunu denediniz mi?:

     <?php

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

     rename($oldfolderpath,$newfolderpath);
     ?>