今回はfile_exists関数について解説して行きます。
ファイルやディレクトリの存在をチェックする関数で、PHPの関数の中でも使用頻度の高い関数の一つでしょう。
ぜひ使い方を覚えて、また一歩PHPマスターに近づいてみてください!
file_exists関数の使い道
ファイルやディレクトリの有無を確認するのに使います。
利用シナリオ
ファイルの存在を確認する場合
チェックスクリプト等で連携ファイルが来ていること確認・・・単純なチェック
ファイルの中身を読み込む前にファイルの存在を確認・・・処理前チェック
ディレクトリの存在を確認する場合
ディレクトリの存在有無を確認し、なければアラートを飛ばす・・・単純なチェック
ディレクトリの存在有無を確認し、なければ作る処理を入れる・・・処理前チェック
ファイルの存在チェックは大事
システムで読み込むCSVやTXTといったファイルは外部の提携先や他バッチシステムから連携されてくるものが多いでしょう。
外部から連携されてくるものは何かしらの不具合により連携されないことがあるということはシステムを作る以上常に念頭に入れておく必要があります。
また同じシステム内で作成されたものであってもオペミスを含む何かしらの不具合によりファイルがないということがあります。
これから処理をしていく元となるデータが正常に配置されていることを確認し、
もし正常に連携されていない場合、何かしら異常を検知した場合は処理をやめる必要があります。
そのまま処理を進めていると異常なデータをそのまま、ユーザーに見せることになる可能性もあります。
またシステム内でファイルの存在チェックをしていない場合、何ヶ月も異常なデータがユーザーに表示されていた!!
ユーザの連絡により気づいたというトラブルの元になります。
必ずデータを読み込む前にファイルの有無を確認しましょう。
file_exists関数の使い方
ではファイルやディレクトリの存在確認をしてくれるfile_exists()関数をご紹介します。
※exists ・・・ 最後にsがつきます。
要注意です。
file_exists() 関数 書式
ファイル名を関数の引数に入れます。
存在有無はTRUE or FALSEのboolean型で返ってきます。
file_exists(string $filename): bool
TRUE or FALSEで返ってくるのでif文を使い、ファイルがあるときとない時の処理を書きます。
<?php
$filename = "sample.txt";
//ファイルがあるとき
if(file_exists($filename)) {
$message = "file あり";
//ファイルがないとき
} else {
$message = "file なし";
}
echo $message;
?>
file_exists関数がうまくいかない時に試して欲しいこと
サーバーのパスを使っていることを確認
https://から始まる形式ではなく /から始まるパスを使っていますか?(Windowsの場合はWindowsのパス)
実行対象のphpファイルからの相対パスでもOKです。
ディレクトリ・ファイル名が合っていることを確認
対象ファイルのあるディレクトリに移動し
以下のコマンドを実行すれば絶対パスつきのファイル名が取れます。
コマンド結果をそのままファイル名に指定することをおすすめします。
ls -1 `pwd`/"ファイル名"
例
ls -1 `pwd`/sample.txt
Macのローカルですがこんな感じでフルパスが取れました。
/Users/XXXXXXX/Documents/php_study/sample.txt
おわりに
file_exists()関数はファイルの存在有無を確認する関数です。
監視スクリプトでのファイル存在有無のチェックや、ファイルを読み込む前処理としてファイルの存在チェックをする際によく用いられます。
有名でよく使う関数なのでぜひ使い方を覚えてみてください!!