【PHP】フォルダ(ディレクトリ)内にあるファイルを全て指定場所に移動させる方法
サーバー内のフォルダ(ディレクトリ)にある全てのファイルを指定した場所に移動させる方法を説明しています。
rename関数を使う
ファイルを移動させるためにはrename関数を使います。
rename("ここに移動させるファイル名を指定", "ここに移動させた後のファイル名を指定");
この関数はその名の通り指定したファイルをリネームする関数で、ファイルの移動に使えます(ファイルのみならず、フォルダ(ディレクトリ)の移動も可能です)。移動先に同じファイル名のものがある場合、上書きされます。
リネーム(移動)に成功した場合はtrueが、失敗した場合はfalseが返されます。
任意のフォルダ(ディレクトリ)内にあるファイルを全て移動させるためには?
rename関数を使えば指定したファイルを指定した場所に移動させることができますが、任意のフォルダ内にあるファイルを全て移動させるためにはどうすればいいのでしょうか?
それは、opendir関数を使って任意のフォルダのハンドルをオープンし、そのフォルダ内にあるファイルをループで一つずつ処理してあげればよいです。
この方法の詳細な説明は、指定したフォルダ(ディレクトリ)内にある全てのファイル名を取得する方法を参照してください。
サンプルプログラム
以上を踏まえて、任意のフォルダ(ディレクトリ)内にあるファイルを全て移動させるサンプルプログラムを掲載したいと思います。
<?php //ファイルを移動させたいディレクトリの指定 $move_directory = "../hoge/"; //この場合、現在いる(このプログラムファイルが存在する)ディレクトリの一つ上の階層にある「hoge」フォルダを指定している //現在いる(このプログラムファイルが存在する)ディレクトリのハンドルをオープンできれば処理を実行 if ($handle = opendir("./")) { //オープンしたディレクトリにファイルが存在すればループで取り出していく while(false !== ($entry = readdir($handle))) { //ファイル名が「.」「..」じゃなければ処理を実行 if ($entry != "." && $entry != "..") { //ファイルを指定したディレクトリに移動させる rename($entry, $move_directory . $entry); } } //オープンしたディレクトリのハンドルをクローズする closedir($handle); } ?>
このプログラムを移動させたいファイルがあるフォルダ(ディレクトリ)に設置して実行すると、(上記プログラムの場合)一つ上の階層にある「hoge」フォルダに全てのファイルが移動します(ファイルのみでなくフォルダもあればそれも一緒に移動されます)。
【注意】
ファイルの移動なので、元のフォルダには移動させたファイル類は残りません
元のフォルダに移動させたファイルを残したい場合
上記プログラムの場合、「ファイルの移動」なので元のフォルダに移動させたファイルは残りませんが、念のため残しておきたい場合もあると思います。
その場合、copy関数を使ってファイル移動(正確には複製)を行うと良いです。
具体的には、上記プログラムの12&13行目を以下に差し替えればOKです。
//ファイルを指定したディレクトリに複製する copy($entry, $move_directory . $entry);
【注意】
copy関数を使った場合、ファイルの移動(正確には複製)はできますが、フォルダの移動はできません。
あわせて読んでほしい!
コメント
まだコメントはありません。