• ベストアンサー

深い階層のフォルダの作成や削除をPHPで

深い階層のフォルダの作成や削除をPHPで行う方法はありますか? できれば、WindowsやLinux共通で動作すれば助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • gfct9s
  • ベストアンサー率90% (10/11)
回答No.2

フォルダ作成と削除ということですね。 おそらく問題にされているのは、下記のような点でしょうか。 深い階層のフォルダ作成  →親フォルダから順に作らないと、サブフォルダを作成することができない 深い階層のフォルダ作成  →サブフォルダを空にしてから出ないと、親フォルダを削除できない Windows/Linux共通となると、区切り文字「\」「/」の問題がありますが、 これは定数DIRECTORY_SEPARATORを使うことで解決できます。 この定数は、それぞれの環境で適切な区切り文字が入ってきます。 http://au3.php.net/manual/ja/ref.dir.php ■深い階層のフォルダ作成 ・与えられたパスを区切り文字で分割 ・上位のフォルダから順に作っていく ということで、下記のような感じでどうでしょうか。 (スペースが全角です。コピーするときは注意して下さい) function makedir($dirpath){   $dirs = explode(DIRECTORY_SEPARATOR , $dirpath);   $path = '';      foreach ($dirs as $dir) {     $path .= $dir . DIRECTORY_SEPARATOR;          if (! file_exists($path)) {       mkdir($path);     }   } } ■深い階層のフォルダを削除 ・下位のファイル、フォルダから削除 ということで、dir()、is_dir()、unlink()、rmdir()関数あたりを使って http://au2.php.net/manual/ja/class.dir.php http://au2.php.net/is_dir http://au2.php.net/unlink http://au2.php.net/rmdir 下記のように書くことができますが、当方のWindows+Apache+PHP4環境では フォルダ削除時にPermission deniedエラーが出ました。 ベタでrmdir('a:\\b\\c\\d'); rmdir('a:\\b\\c'); …とやっていくと削除 できたりしているのですが、すみませんが原因がわかりませんでした。 function remove($path){   $d = dir($path);      while ($entry = $d->read()) {     if ($entry == '.' || $entry == '..') continue;          $objpath = $path . DIRECTORY_SEPARATOR . $entry;          if (is_dir($objpath)) {       // サブディレクトリを削除       remove($objpath);     } else {       // 見つかったファイルは削除       unlink($objpath);     }   }      unset($d); $d = null;   rmdir($path); } シェル/コマンドラインを使うと簡単だとかいう、元も子もないコメントが rmdir()のマニュアルページにあったので、それを参考に、 http://au3.php.net/manual/ja/function.rmdir.php#64460 $path = '…削除したいフォルダのフルパス…'; // Linux if (DIRECTORY_SEPARATOR == '/') {   system('rm -rf ' . $path); } // Windows if (DIRECTORY_SEPARATOR == '\\') {   system('rmdir ' . $path . ' /s /q'); } とやってみましたが、いかがでしょうか。 ※テスト時は重要なフォルダを消さないようにご注意ください

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

深い階層・・・って意図がよくわからないですが 普通にmkdirでは作れないという意味でしょうか? http://www.php.net/manual/ja/function.mkdir.php

関連するQ&A

専門家に質問してみよう