2017-07-16 91 views
-2

我很努力地找到有關循環遍歷文件夾內所有子文件夾並使用PHP重命名它們的任何信息。我正在重命名它們,以便我對子文件夾的數量沒有任何限制。循環並重命名php中的所有子文件夾

目前我的用戶文件夾結構如下:

images/logos/1216/logo.jpg 
images/logos/11437/logo.jpg 
images/logos/234438/logo.jpg 

所以我想遍歷所有文件夾中的「標誌」內並重新命名如下:

images/users/1/1216/logos/logo.jpg 
images/users/11/11437/logos/logo.jpg 
images/users/234/234438/logos/logo.jpg 

要計算新的子文件夾名稱,我將採取現有的用戶ID(即11437和除以1000)。

實際的問題是,我是如何遍歷所有子文件夾以及重命名文件夾結構的最佳方式。

+0

這不是一個真正的重命名問題,因爲你正在完成一個完全不同的結構。我會說你應該複製文件,然後刪除原文。 – Andreas

+0

是否所有文件都被稱爲logo.jpg? – Andreas

+0

是的,所有的文件現在被稱爲logo.jpg – Mark

回答

0

如果我對這裏的第一行代碼是正確的,你可以像第二行那樣得到一個數組。首先進行測試並對文件進行備份。

這應該列出所有userid的或目錄並循環遍歷它們。
如果副本是成功的(true),則取消鏈接舊文件,否則返回錯誤消息。

這是未測試的代碼

//$arr = array_filter(glob('images/logos/*'), 'is_dir'); 
$arr = array("images/logos/1216","images/logos/11437","images/logos/234438"); 
//var_dump($arr); 

foreach($arr as $dir){ 
    $UID = str_replace("images/logos/", "", $dir); 
    $newpath = "images/users/" . floor($UID/1000) . "/" . $UID . "/logos/logo.jpg"; 
    $oldpath = $dir . "/logo.jpg"; 
    if(copy($oldpath, $newpath)){ 
     unlink($oldpath); 
    }else{ 
     echo "error with file " . $oldpath . "<br>\n"; 
     $error = true; 
    } 
} 

if(!$error) unlink("images/logos"); 

EDIT;剛注意到我最近使用的Excel太多了。將&更改爲。
EDIT2;現在在我自己的頁面上測試了代碼,看起來glob返回路徑。包含獲取用戶ID的代碼。

+0

感謝上面的代碼,我遇到的問題是logos文件夾中有成千上萬的子文件夾,我想要一種方法來循環訪問徽標中的所有子文件夾文件夾,而不是提供一個數組。 – Mark

+0

@Mark yes ... foreach通過它們循環。 – Andreas

+0

請參閱此處以供參考:https://3v4l.org/Jm42j – Andreas