PHPでファイルが存在したら処理をする、といったファイル存在チェックにはfile_exists()
が便利です。
ファイルに読み書きする処理の前などに存在チェックをしてやることで、ファイルがなかった場合のエラーにも対処できます。
目次
file_exists関数で存在チェック
ファイルまたはディレクトリが存在しているか調べてくれます。
ファイルの存在チェック
ファイルが存在するかをチェックし、存在した場合としない場合で条件分岐させ、それぞれにメッセージを表示させてみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// ファイル名を変数に格納 $filename = 'dir/file.txt'; // ファイルが存在するかチェックする if (file_exists($filename)) { // ファイルが存在したら、ファイル名を付けて存在していると表示 echo 'ファイルは存在します。'; } else { // ファイルが存在していなかったら、見つからないと表示 echo 'ファイルが見つかりません!'; } |
ファイルは存在します。
ファイルが存在するので、ちゃんと存在しているとメッセージが表示されました。
file_exists関数の構文
file_exists ( チェックしたいファイルまたはディレクトリのパス );
存在した場合 → true を返す
存在しない場合 → false を返す
ファイルが存在した場合true
を返すので、if文でチェックして、処理を分ける方法が一般的な使い方ですね。
ディレクトリの存在チェック
file_exists()
はファイルだけでなく、ディレクトリの存在チェックもしてくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
// ディレクトリ名を変数に格納 $dir = 'test/images/'; // ディレクトリが存在するかチェックする if (file_exists($dir)) { // ディレクトリが存在したら、ディレクトリ名は存在していると表示 echo $dir.'は存在します。'; } else { // ディレクトリが存在していなかったらエラーメッセージを表示 echo 'ディレクトリが見つかりません!'; } |
test/images/は存在します。
様々なファイル存在チェック
実際にファイルの存在チェックを使った、実用的なサンプルを見ていきましょう。
ファイルが存在していたらテキストを書き込む
該当ファイルが存在した場合にのみ、ファイルの書き込みを行います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
// ファイルのパスを変数に格納 $filename = 'file.txt'; // ファイルの存在をチェック if (file_exists($filename)) { // ファイルがあったらテキストを書き込む file_put_contents($filename, 'ファイルがあったのでテスト書き込み!'); // ファイルを読み込んで表示させる readfile($filename); } else { //もしファイルがなかったらエラーメッセージを表示 echo 'ファイルがありません!'; } |
ファイルがあったのでテスト書き込み!
ファイルの存在をチェックし、存在したらファイルにテキストを書き込み、ファイルの中身を読み込んでブラウザに表示させました。
参考:PHPでのファイル書き込みとパーミッションエラー解決法
特定の拡張子が付いたファイルが存在するかチェックする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// 拡張子.txtが付いたファイルを配列化し変数に格納 $txt = glob('test/*.txt'); // 配列に値が入っているかチェック if (empty($txt)) { // 配列が空だったらエラーメッセージを表示 echo 'ファイルが見つかりません!'; } else { // 配列に値が入っていたら存在すると表示 echo 'ファイルは存在します。'; } |
ファイルは存在します。
拡張子.txt
が付いたファイルを探し、配列に格納します。
その配列の中身が空かどうかチェックし、条件分岐させています。
以下のように動作しています。
glob()
に*.txt
を指定し、拡張子が.txt
のファイルを全て取得し、配列化する
※glob()
は条件に合うファイルを全て取得して、配列化してくれる
※glob()
に指定した*
(アスタリスク)はワイルドカードと呼ばれ、全ての文字列に該当するという意味
$txt = glob(‘test/*.txt’);
参考:glob関数とunlink関数で削除empty()
で配列の中身が空かどうかをチェック
※empty()
は変数の中身が空かどうかをチェックし、0
や空文字もtrue
を返す
if (empty($txt)) {
参考:「empty」で0や空文字判定- 空だったら「ファイルが見つかりません」と、空じゃなかったら「ファイルは存在します」と表示させる