• ベストアンサー

深い階層のフォルダの作成や削除を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

  • Linuxで深い階層のフォルダを作成したい

    Linuxで深い階層のフォルダを作成したいのですが、通常のmkdirではエラーが出ます。良いモジュールはありますか?

    • ベストアンサー
    • Perl
  • aフォルダ内のPHP文章を一階層したのbフォルダで使うには?

    こんにちわ。 せっかく書いたPHP文章をほかのフォルダでも(一階層したでも)使い回したいと思っています。同じ文章を書いて貼り付けるよりは効率がいいと考えました。 ↓これを使いまわしたいのです。 <?php $a = file("../jikan.php"); if ( $a> date(h)) include "oshirase.html"; else include "sonota.html"; ?> ただ階層やフォルダが変わってしまうと../jikan.phpの位置が変わってしまいします。../jikan.phpが../../jikan.phpとしなければならなかったりするわけです。 htmlの方はこちらのスクリプトを使うところはすべて 指定した時間のみoshirase.htmlが出るようにしたいのでこのままでいいのです。 fileで読み込むと配列に入れられてしまうし file get contentsだと取り込んでechoするとPHP文章ごと表示されてしまうしうまく変数にとりこんでjikanの階層のみ../を../../など度置換し実行させる方法をずばり知りたいです! よろしくお願い致します!!

    • ベストアンサー
    • PHP
  • フォルダが削除できない

    こんばんは。 Windowsに共有ディレクトリを作成し、専用のユーザーとパスワードも作成し、Linuxからmountしました。 (mount後の読み書きは正常にできております) あるプロジェクトのバックアップをしたいと思い、シェル作成とテストをしながら、上記の共有フォルダにファイルやディレクトリをコピーしたり削除したりしておりました。 で、突然あるディレクトリだけが削除できなくなってしまいました・・・。 (LinuxからもWindowsからも削除できません) rmdirをすると、「ディレクトリが空ではありません」と怒られます。 (ls -laで見ても空です) rm -rfでも同じメッセージで削除できません・・・。 (rmなのに???) 削除できないフォルダにファイルを作成したりは、何故かできます。 フォルダを削除した後、ハードリンクの数が「0」です・・・。 (上記エラーメッセージ表示後に確認しました) なんですかね?これ。 今後はtarしてからWindows側にコピーする予定ですので、このフォルダ (実際には、ちょっとパスが深いので、マウントポイント以下は全て) を削除してしまいたいのですが・・・。 オーナーはrootです。 chmodは効きません・・・。 (777指定しても反映されてない、まぁroot作業なので関係ないですが・・・) Linuxに詳しい方、ご教示くださいますよう、よろしくお願い致します。

  • フォルダを一括で作成したいのです(階層がある分)。

    フォルダを一括で作成したいのです(階層がある分)。 添付画像(例) AからF列までのデータがあります。 G列のように「う\え\お」の階層で作成したいのです。 そこまで作成すればフォルダ作成ソフトかmkdirコマンドで作成しようと考えています。 関数ではできないでしょうか(VBでしないとだめでしょうか?)。

  • フォルダーが削除出来ません。

    以前に教えて!No.688812 [ http://oshiete1.goo.ne.jp/kotaeru.php3?q=688812 ]でファイルの削除は教わり出来たのですが、今度はフォルダーが削除出来ません。 何方かご伝授お願い致します。 c:\のフォルダにアクセスも削除も出来ません。 最初のフォルダc:\新しいフォルダは開いて、次の階層のフォルダc:\新しいフォルダ\○○○とc:\新しいフォルダ\△△△にアクセスすると、"アクセスできません。アクセス拒否されました。"と警告されます。

  • 深い階層かつパスが破損したフォルダの削除

    深い階層かつパスが破損したフォルダの削除ができません。 同じ名前のフォルダが何階層も作成された上に、パスが見つからない状態です。 robocopy c:\Users d:\Users /E 上記のコマンドでDドライブにユーザープロファイルを移動しようとしたところエラーが発生し、 あるフォルダの配下にApplication Dataという同名のフォルダが何階層にもわたって作成されてしまいました。 ところが、このApplication Dataは実体が見えず、上の階層のフォルダごと削除しようとしてもファイル名が長すぎて削除できませんでした。 rd /s を実行すると、以下のようにパスが見つからなくなり… APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1APPLIC~1APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1 - 指定されたパスが見つかりません。 rd /s "\\.\d:\Users\Application Data"を実行すると以下のようにファイルが長すぎて削除ができません。 APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1\APPLIC~1 が長すぎます。 なお、共有フォルダにしてパスの長さを短くする方法も試しましたが、そもそもApplication Dataというフォルダが全く見えないので、うまくは行きませんでした。 他にわかったことは以下のとおりです。 ・見えているフォルダの中で、Application Dataというフォルダを新たに作成すると上書きについてのダイヤログが表示され、了承すると、作成したはずのフォルダが消滅する。 ・フォルダの階層は13階層ある模様。 ・セーフモードで起動しても症状は変わらず。 ・renameコマンドを入力する際、aと打ったあとにtabキーを押すと保管してくれるが、実行すると、「指定されたファイルは見つかりません」 ・エクスプローラやコマンドプロンプトからApplication Dataというフォルダを直接指定すると、ちゃんと移動はできる。 ・コマンドプロンプト上で移動したあと、dirコマンドをすると「ファイルが見つかりません」と表示される。 環境はwindow7の64bitです。 どなたか、解決方法をご教授願います。

  • このフォルダを削除したいです

    HDDのルートフォルダに画像のようなフォルダが存在しているのですが、削除しようとしてもアクセス許可がないとのことで削除できません。フォルダを一階層だけたどることはできて、「update」という名前のフォルダがありましたが、WindowsUpdate用のフォルダなのでしょうか?どなたか詳しい方、このフォルダの意味と削除方法を教えていただければ助かります。よろしくお願いします。

  • windows Live mailのアドレス帳の階層フォルダーについて

    windows Live mailのアドレス帳の階層フォルダーについて outlook expressからwindows live mailにアドレス帳をコピーしたら、 グループはコピーされましたが、フォルダー階層がなくなりました。 そこで、live mailで階層を作成しようと思いましたが、グループの階層しかできません。 outlook expreesのように同類項をまとめるフォルダーとしての 階層はできないものでしょうか。

  • 共有フォルダの階層

    共有フォルダの階層 共有フォルダを色々なユーザごとに作成したいと考えています。 例えば PC1のDドライブにAというフォルダを作成しその中にB1・B2・B3とフォルダを3つ作成します。 そしてそれらのB1・B2・B3をそれぞれのユーザーに共有設定するのですが、別のPC2というパソコンからPC1を見るとAフォルダは見えずに直接B1・B2・B3が見えてしまいます。 作成したいのはPC2からPC1をみるとAというフォルダが見えてそのフォルダ内に入るとB1・B2・B3が見えて、さらには共有のかかったフォルダのみにアクセスができる状態にしたいのですが、そのような共有の階層は作成できないのでしょうか?

  • デスクトップに自分で作成したフォルダが削除できない

    デスクトップに自分でフォルダ作成し、デスクトップという名前にしてました。 (ある時デスクトップにファイルやフォルダがいっぱいだったので、フォルダ作って 片づけたのです) これが削除できません。中身は空にできたのですが、フォルダを削除しようと すると、 「デスクトップはWindowsのシステムフォルダで、Windowsを正しく実行するのに必要 です。削除てきません。」 とメッセージが出て削除できません。名前がいけないのかと思い、別の名前に変更 しても、同じです。 削除する方法を教えてください。よろしくお願いいたします。 Windows XP Home Edition Ver.2002 SP3 以上