- ベストアンサー
ファイルアップローダ+複数のディレクトリを削除するシステムについて
- 複数のディレクトリを削除するシステム構築の際、うまくいかない問題が発生しました。
- フォルダ構成やプログラムの処理内容に関して説明しています。
- 解決方法がわからない場合は、教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
横からすいません。 ディレクトリの権限関係の問題はないでしょうか。 また、エラーは表示されない設定でしょうか。そうならば何らかの手段でエラーを確認できるようにしてみた方がよいです。
その他の回答 (2)
- okmotokun
- ベストアンサー率59% (92/155)
<?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回で抜けてますから。
- okmotokun
- ベストアンサー率59% (92/155)
(1) closedir してから rewinddir はエラーになりませんか。 rewinddir は要らないとおもいます。 (2) rmdir($_WK_dir_name[$i]) は rmdir($_dir_path) とすべきではありませんか。
お礼
回答ありがとうございます。さっそく試してみましたが。 ディレクトリ 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回目は、「空白」となりました。
お礼
回答ありがとうございます。 最初の回答と同様上記のように、実行しましたが、同じ結果となりました。 ロードポイントを見る限り以下のような動きをしています。 1回目のforループにて、 while文は、通り、20090601は削除。 2回目(以降)のforループにて、 while文は、入らず、20090602以降(20090603、20090604)が削除できませんでした。