• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ファイルアップローダ+複数のディレクトリを削除するシステムについて)

ファイルアップローダ+複数のディレクトリを削除するシステムについて

このQ&Aのポイント
  • 複数のディレクトリを削除するシステム構築の際、うまくいかない問題が発生しました。
  • フォルダ構成やプログラムの処理内容に関して説明しています。
  • 解決方法がわからない場合は、教えていただけると助かります。

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

  • ベストアンサー
  • UmJammer
  • ベストアンサー率58% (115/196)
回答No.3

横からすいません。 ディレクトリの権限関係の問題はないでしょうか。 また、エラーは表示されない設定でしょうか。そうならば何らかの手段でエラーを確認できるようにしてみた方がよいです。

その他の回答 (2)

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.2

<?php $_WK_dir_name[1] = "20090601"; $_WK_dir_name[2] = "20090602"; $_WK_dir_name[3] = "20090603"; $_WK_dir_name[4] = "20090604"; for($i=1; $i<4;$i++){ // 削除するディレクトリパスを設定 $_dir_path = './' . $_WK_dir_name[$i] . '/'; // ディレクトリオープン $res_file = opendir( $_dir_path ); // ディレクトリ内のファイル名を1つずつを取得 while($file_name = readdir( $res_file )){ // ファイルかどうか判定する if(is_file($_dir_path . $file_name)){ // ファイル削除 unlink($_dir_path . $file_name); } } // ディレクトリクローズ closedir( $res_file ); // ディレクトリの中身が空になったところで、ディレクトリを削除する。 rmdir($_dir_path); } ?> これで削除できませんか。 20090604 は削除しないんですよね。forループは3回で抜けてますから。

noname#250262
質問者

お礼

回答ありがとうございます。 最初の回答と同様上記のように、実行しましたが、同じ結果となりました。 ロードポイントを見る限り以下のような動きをしています。 1回目のforループにて、   while文は、通り、20090601は削除。 2回目(以降)のforループにて、   while文は、入らず、20090602以降(20090603、20090604)が削除できませんでした。

  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

(1) closedir してから rewinddir はエラーになりませんか。 rewinddir は要らないとおもいます。 (2) rmdir($_WK_dir_name[$i]) は rmdir($_dir_path) とすべきではありませんか。

noname#250262
質問者

お礼

回答ありがとうございます。さっそく試してみましたが。 ディレクトリ 20090601 - xxx1.txt      - yyy1.txt      - zzz1.txt しか削除できず、同じ結果となりました。 1回目のwhile文は、通り、20090601は削除できましたが、 2回目のwhile文は、スルーし、20090602以降が削除できませんでした。 また、プログラム中の // ディレクトリ・ハンドルをオープン $res_file = opendir( $_dir_path ); 直後に 「printf($res_file);」 を追記したところ、 1回目は、「Resource id #5」 2回目は、「空白」となりました。

関連するQ&A