PHPでファイルなのかディレクトリなのかを確認するには以下の関数を使用します。
使用したOSは、CentOS 5.8, PHPは5.1.6になります。
$ lsb_release -idc Distributor ID: CentOS Description: CentOS release 5.8 (Final) Codename: Final
$ php -version PHP 5.1.6 (cli) (built: May 7 2012 15:03:06) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
本サンプルPHPスクリプトの動作確認は、コマンドラインから行いました。
<?php mkdir('a'); touch('b'); /* check a */ if (is_file('a')) { echo 'a is file.' . PHP_EOL; } if (is_dir('a')) { echo 'a is directory' . PHP_EOL; } /* check b */ if (is_file('b')) { echo 'b is file.' . PHP_EOL; } if (is_dir('b')) { echo 'b is directory' . PHP_EOL; } rmdir('a'); unlink('b'); ?>
上記のサンプルPHPスクリプトは、aディレクトリ、bファイルを作成しis_file, is_dir関数にてファイルかディレクトリかどうかの確認を行っています。
存在確認後、作成したaディレクトリとbファイルを削除しています。
サンプルPHPスクリプトの実行結果は以下のようになります。
ディレクトリかファイルかの判別がされています。
$ php is_file_dir.php a is directory b is file.
ファイルが存在しないのに、is_dir, is_fileを使っても意味がないので、以下のようにすればファイルの存在をチェックしファイルかディレクトリかどうかを確認することができます。
<?php mkdir('a'); if (file_exists('a')) { if (is_file('a')) { echo 'a is file.' . PHP_EOL; } elseif(is_dir('a')) { echo 'a is directory.' . PHP_EOL; } elseif(is_link('a')) { echo 'a is link file.' . PHP_EOL; } else { echo 'unknown' . PHP_EOL; } } rmdir('a'); ?>
シンボリックリンクかどうかは、is_link()関数を使用してください。