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/*');
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";
}
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.
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) ...