移動從一個位置的一個文件時,另一個我使用將文件夾中的所有文件移動到另一個文件夾中?
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);
}
嘗試: 重命名( '路徑/ *', 'NEWPATH /');使用重命名
mkdir('newpath');
rename('path/*', 'newpath/');
沒有工作..「沒有這樣的文件或目錄」 – ajsie 2010-01-17 18:53:24
有星號如果目標目錄不存在,您需要先創建()和一些錯誤檢查:
$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";
}
「沒有這樣的文件或目錄」 – Alvin 2011-06-15 21:20:06
如果你有問題,張貼一些代碼(或一個新的問題)。 – 2011-06-16 09:42:19
這個答案對我無效。如果重命名函數支持globs,但是從PHP7開始看起來並不是這樣,那將會很棒。例如:'rename(/home/eric/wordpress/files/.tmp-checksum/*,/ home/eric/wordpress/files/core):沒有這樣的文件或目錄' 但是,運行'ls/home/eric/wordpress/files/.tmp-checksum/*在bash shell中確實顯示很多文件。 – Eric 2017-11-06 03:10:12
另一種:
我沒有看到一個點在目的地
於是,我所描述的使用rename()
功能,我一直得到錯誤背面,有no such file or directory
。我將代碼放在if語句中,以確保我確實擁有創建的目錄。它是這樣的:
$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()
函數中不起作用,並且爲什麼我收到上述錯誤,請告訴我。
作爲一個附註;當您將文件複製到另一個文件夾時,它們上次更改的時間將成爲當前時間戳。所以你應該新的文件touch()。
... (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
$oldfolderpath = "old/folder";
$newfolderpath = "new/folder";
rename($oldfolderpath,$newfolderpath);
?>
不知道這是否可以幫助任何人或沒有,但以爲我反正發佈。有一個挑戰,我有一堆電影,我通過各種網上商店購買和下載,所有這些電影都存儲在一個文件夾中,但都在自己的子文件夾中,並且都有不同的命名約定。我想將它們全部移到父文件夾中,並將它們全部重命名爲漂亮。所有我設法使用批量重命名工具和條件名稱格式重命名的子文件夾。子文件夾中有我不想要的其他文件。所以我寫了下面的PHP腳本,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);
}
}
請嘗試此解決方案,它的試驗成功::
<?php $files = scandir("f1"); $oldfolder = "f1/"; $newfolder = "f2/"; foreach($files as $fname) { if($fname != '.' && $fname != '..') { rename($oldfolder.$fname, $newfolder.$fname); } } ?>
你需要保持原來的目錄? – Sampson 2010-01-17 18:48:28
這將是很好的保持原來的文件夾...不是這次,但也許另一次我將不得不保留它..我可以懷疑你的方法是=) – ajsie 2010-01-17 18:49:33
但我注意到我的目標文件夾中的文件,我想保持。然後你的方法不起作用,因爲它不允許將文件夾移動到已經包含文件的目標文件夾 – ajsie 2010-01-17 18:55:04