define('TEST_DIR', "/var/tmp/");

if (!($dir = opendir(TEST_DIR."/".$aaaa))) {
die;
}
$after_test_time = array();
while ($test_time = readdir($dir)) {
if ((strlen(trim($test_time)) == 6) && (!is_dir($test_time))) {
echo "$test_time\n";
$after_test_time[] = TEST_DIR."/".$aaaa."/".$test_time;
}
}
closedir($dir);
上記のようなプログラムがあります。
そして、$after_test_timeの配列にフォルダ名だけの
6桁の名前を入れたいです。
$aaaa配下のフォルダ構成なのですが、なぜか111111までechoします。
どうしたらいいのでしょうか?
drwxrwxrwx 2 test *** 4096 Sep 8 15:44 091915
drwxrwxrwx 2 test *** 4096 Sep 8 16:45 092616
drwxrwxrwx 2 test *** 4096 Sep 8 15:23 092715
drwxrwxrwx 2 test *** 4096 Sep 8 15:12 092815
drwxrwxrwx 2 test2 *** 4096 Sep 11 14:07 092924
-rw-r--r-- 1 test2 *** 0 Sep 11 18:00 111111

回答の条件
  • 1人5回まで
  • 登録:2006/09/11 18:21:14
  • 終了:2006/09/11 19:04:13

回答(1件)

id:birdie-brain No.1

birdie-brain回答回数40ベストアンサー獲得回数42006/09/11 18:58:14

ポイント60pt

サンプルプログラム7行目の

>is_dir($test_time)

の引数にディレクトリ指定なしのファイル名のみを渡しているので、検査対象が実行時のカレントディレクトリになってしまってます。

そのため、(たまたまカレントディレクトリに同じ名前のディレクトリが存在しない限り)大抵の場合はfalseを返すことになります。

結果として、これでは読み取り対象のディレクトリにある数字6桁のファイル名をすべて列挙してしまいます。

列挙したファイル名をis_dir()関数に渡すときに、ディレクトリのパスを連結してやればよいのではないでしょうか。

id:hopefully

納得できました。

ありがとうございます。

2006/09/11 19:04:04
  • id:bonlife
    お気づきだと思いますが、is_dir()の前の否定演算子は不要です。
    is_dir()は引数がディレクトリの時にTRUEを返します。
    上記の例では
    is_dir(TEST_DIR. "/" . $aaaa . "/" . $test_time)
    と修正すれば良いはずです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません