操作の安全性を保証したいときに取るべき手段
1. 適切な関数を用いて種類をチェックする
ファイル | ディレクトリ | シンボリックリンク | ネームドパイプ デバイススペシャルファイル UNIXドメインソケット |
|
---|---|---|---|---|
file_exists | ○ | ○ | リンクを解決 | ○ |
is_file | ○ | × | リンクを解決 | × |
is_dir | × | ○ | リンクを解決 | × |
is_link | × | × | ○ | × |
2. これから行う操作が可能かどうかチェックする
読み取り可能 | 書き込み可能 | 実行可能 |
---|---|---|
is_readable | is_writable | is_executable |
なお、これらの関数は 「存在確認」+「リンクを解決」+「○○可能」 というプロセスを踏むため、 file_exists 関数を併用する必要はありません。
実装例
読み取れるファイルかどうか判定
function is_readable_file($f) {
return !is_dir($f) && is_readable($f);
}
ファイルの作成・削除・アクセスが出来るディレクトリかどうか判定
function is_active_dir($d) {
return is_dir($d) and is_writable($d) and
PHP_OS === 'WIN32' || PHP_OS === 'WINNT' || is_executable($d);
}
無効なシンボリックリンクであるかどうか判定
function is_invalid_link($l) {
return is_link($l) && !file_exists($l);
}
リンクを解決しない関数一覧
誤っているものや足りないものがあれば教えてください!