Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

PHP辞典

  1. トップページ
  2. PHP辞典
  3. file_exists() / is_file() / is_dir()

file_exists() / is_file() / is_dir()対応: PHP 4(2000)

ファイルやディレクトリの存在・種類・権限を確認します。ファイル操作の前に安全性を検証するために使われます。

構文
// ファイルまたはディレクトリが存在するかを判定します。
file_exists($filename);

// 通常のファイルかを判定します。
is_file($filename);

// ディレクトリかを判定します。
is_dir($filename);

// 読み取り可能かを判定します。
is_readable($filename);

// 書き込み可能かを判定します。
is_writable($filename);
関数一覧
関数概要
file_exists($filename)ファイルまたはディレクトリが存在する場合に『true』を返します。シンボリックリンクも対象になります。
is_file($filename)通常のファイルの場合に『true』を返します。ディレクトリやシンボリックリンクは『false』になります。
is_dir($filename)ディレクトリの場合に『true』を返します。通常のファイルは『false』になります。
is_readable($filename)ファイルが存在し、実行ユーザーに読み取り権限がある場合に『true』を返します。
is_writable($filename)ファイルが存在し、実行ユーザーに書き込み権限がある場合に『true』を返します。『is_writeable()』はエイリアスです。
戻り値

すべて真偽値を返します。条件を満たす場合は『true』、満たさない場合は『false』です。結果はPHPによってキャッシュされるため、同じファイルに対して繰り返し呼び出した場合はキャッシュされた結果が返されます。

サンプルコード
<?php
// ファイルの存在を確認してから読み込みます。
$path = "/var/www/html/config.json";
if (file_exists($path)) {
    $config = file_get_contents($path);
    echo "設定ファイルを読み込みました。";
} else {
    echo "設定ファイルが見つかりません。";
}

// is_file() でファイルとディレクトリを区別します。
echo var_export(is_file("/var/www/html/index.php"), true); // ファイルなら『true』と出力されます。
echo var_export(is_file("/var/www/html/"), true); // ディレクトリなので『false』と出力されます。

// is_dir() でディレクトリを判定します。
$upload_dir = "/var/www/html/uploads";
if (!is_dir($upload_dir)) {
    mkdir($upload_dir, 0755, true); // ディレクトリがなければ作成します。
    echo "アップロードディレクトリを作成しました。";
}

// 権限を確認してからファイル操作を行います。
$log_file = "/var/www/html/app.log";
if (is_writable($log_file)) {
    file_put_contents($log_file, date("Y-m-d H:i:s") . " ログ\n", FILE_APPEND);
} else {
    echo "ログファイルに書き込み権限がありません。";
}

// 設定ファイルの読み取り権限を確認します。
$config_path = "/var/www/html/pvt/common.php";
if (is_readable($config_path)) {
    echo "設定ファイルを読み取れます。";
} else {
    echo "設定ファイルの読み取り権限がありません。";
}

// clearstatcache() でキャッシュを消去します。
file_put_contents("/var/www/html/test.txt", "テスト");
echo var_export(file_exists("/var/www/html/test.txt"), true); // 『true』と出力されます。
unlink("/var/www/html/test.txt");
clearstatcache(); // キャッシュを消去しないと古い結果が返されます。
echo var_export(file_exists("/var/www/html/test.txt"), true); // 『false』と出力されます。
概要

ファイルの存在確認はファイル操作の基本です。『file_exists()』はファイルとディレクトリの両方に対して『true』を返すため、ファイルだけを対象にしたい場合は『is_file()』を使い分けてください。

PHPはファイル情報のstat結果をキャッシュするため、ファイルを作成・削除した直後に確認関数を呼ぶと古い結果が返される場合があります。キャッシュを消去するには『clearstatcache()』を呼び出します。1回のリクエスト内で同じファイルの作成・削除・確認を行う場合は特に注意が必要です。

ファイル操作では常にセキュリティを意識してください。ユーザー入力をファイルパスに含める場合は、ディレクトリトラバーサル攻撃を防ぐために『basename()』や『realpath()』でパスを検証してください。ファイルの作成・削除には『mkdir() / unlink()』を使用します。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。