2017-07-16 20 views
-2

私はフォルダ内のすべてのサブフォルダをループする情報を見つけて、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

はい、すべてのファイルは現在 – Mark

答えて

0

ここでコードの最初の行が正しいとすれば、2行目のように配列が検索されます。最初にテストし、ファイルのバックアップを作成します。

これは、すべてのユーザーIDまたはディレクトリをリストし、それらをループする必要があります。
コピーが成功した場合(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がパスを返すようです。 UserIDを取得するためのコードが含まれています。

+0

上記のコードをありがとう、問題は、ロゴフォルダに何千ものサブフォルダがあり、ロゴ内のすべてのサブフォルダをループするメソッドが必要だったことですアレイを提供しないようにします。 – Mark

+0

@マークはい... foreachはループします。 – Andreas

+0

ここをクリックして参考にしてください:https://3v4l.org/Jm42j – Andreas

関連する問題