is_dirを含むスクリプトを他階層から実行する場合の注意 (自分用メモ

あるディレクトリのファイル一覧取得して、File か Directory かを調べる簡単なscript


check_dir.php は "/home/ryoff/prac_php/" にあるとする。

-- prac_php
   |-- check_dir.php
   |-- fuga.php
   `-- hoge
       `-- foo.php

vi check_dir.php

<?php

$dir = "/home/ryoff/prac_php/";
if (is_dir($dir)) {
  if ($dh = opendir($dir)) {
    while (($file = readdir($dh)) !== false) {
      if (is_dir($file)) {
        echo "DIR : " . $file . "\n";
      }
      else {
        echo "FILE: " . $file . "\n";
      }
    }
    closedir($dh);
  }
}

?>


これを、check_dir.php が置いてある階層以外からたたくと、

FILE: fuga.php
FILE: check_dir.php
DIR : ..
FILE: hoge
DIR : .

こんな感じで、hoge は Directory のはずなのに、File と認識されてしまった。

Perlでもこんなことあったな。

と思った。
自作モジュールをuseするときの注意点 - 雑想空間


Perlだと[FindBin]があるからいいんだけど、phpだとどうすればいいんだろう?

if (is_dir($dir.$file)) {

とりあえず、絶対パスにして応急処置ww
あとで調べる