初心者でもできる!PHPでファイル存在チェックの5つの手法

PHPでファイル存在をチェックする方法を示すコードのスクリーンショットPHP
この記事は約6分で読めます。

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればサンプルコードを活用して機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

PHPでプログラミングを始めたばかりのあなた。膨大な数のファイルとディレクトリが存在する状況下で、特定のファイルが存在するかどうかを確認したいケースが必ず出てきます。

そんな時、どうすれば良いでしょうか?この記事を読むことで、PHPでファイル存在をチェックする方法が身につきます。

初心者でも理解できるように5つの具体的な手法とそれぞれのサンプルコード、注意点、応用例まで詳しく解説します。

●PHPでのファイル存在チェックとは

PHPでのファイル存在チェックとは、指定したファイルが実際に存在するかどうかを確認する操作のことを指します。

これは、ファイルの読み込みや書き込みを行う前に、事前にそのファイルが存在するかを確認するために行います。

これにより、存在しないファイルを操作しようとしてエラーが発生することを防ぐことができます。

●PHPでのファイル存在チェックの基本的な方法

PHPでのファイル存在チェックの基本的な方法は、組み込み関数のfile_exists()を使用する方法です。

○サンプルコード1:基本的なファイル存在チェック

このコードでは、file_exists()関数を使ってファイルの存在をチェックする方法を紹介しています。

この例ではsomefile.txtというファイルが存在するかを確認しています。

もしファイルが存在すれば”ファイルが存在します。”と表示され、存在しなければ”ファイルが存在しません。”と表示されます。

<?php
$filename = 'somefile.txt';

if (file_exists($filename)) {
    echo "ファイルが存在します。";
} else {
    echo "ファイルが存在しません。";
}
?>

このように、file_exists()関数は指定したファイルが存在する場合はtrueを返し、存在しない場合はfalseを返すので、if文と組み合わせてファイルの存在をチェックすることができます。

●PHPでのファイル存在チェックの応用例

基本的なファイル存在チェックの方法を理解したところで、さらに応用的なチェックの方法について見ていきましょう。

ディレクトリのチェック、ファイルの読み書き可能性のチェック、特定の種類(例えば画像)のファイルの存在チェックなど、具体的な応用例を紹介します。

○サンプルコード2:ファイル存在チェックとディレクトリのチェック

このコードでは、file_exists()関数とis_dir()関数を組み合わせて、指定したパスが存在するかどうか、そしてそのパスがディレクトリなのかファイルなのかを確認する方法を紹介しています。

この例では、/path/to/directoryというパスが存在するかを確認し、存在すればそのパスがディレクトリかファイルかを判定しています。

<?php
$filename = '/path/to/directory';

if (file_exists($filename)) {
    echo "指定したパスは存在します。";
    if (is_dir($filename)) {
        echo "それはディレクトリです。";
    } else {
        echo "それはファイルです。";
    }
} else {
    echo "指定したパスは存在しません。";
}
?>

○サンプルコード3:ファイルの読み込み可能性のチェック

このコードでは、is_readable()関数を使ってファイルが読み込み可能かどうかを確認する方法を紹介しています。

この例では、readme.txtというファイルが読み込み可能かを確認しています。

<?php
$filename = 'readme.txt';

if (is_readable($filename)) {
    echo "ファイルは読み込み可能です。";
} else {
    echo "ファイルは読み込み可能ではありません。";
}
?>

○サンプルコード4:ファイルの書き込み可能性のチェック

このコードでは、is_writable()関数を使ってファイルが書き込み可能かどうかを確認する方法を紹介しています。

この例では、writefile.txtというファイルが書き込み可能かを確認しています。

<?php
$filename = 'writefile.txt';

if (is_writable($filename)) {
    echo "ファイルは書き込み可能です。";
} else {
    echo "ファイルは書き込み可能ではありません。";
}
?>

○サンプルコード5:画像ファイルの存在チェック

このコードでは、file_exists()関数とexif_imagetype()関数を使って、画像ファイルの存在とそのファイル形式を確認する方法を紹介しています。

この例では、image.jpgという画像ファイルが存在するかを確認しています。

<?php
$filename = 'image.jpg';

if (file_exists($filename) && exif_imagetype($filename) !== false) {
    echo "画像ファイルが存在します。";
} else {
    echo "画像ファイルが存在しません。";
}
?>

●ファイル存在チェックの注意点と対処法

ファイル存在チェックを行う際には、いくつかの注意点があります。

まず、ファイルが存在しないか、あるいはアクセスできない状態でfile_exists()関数や他のファイル操作関数を使用すると、警告が発生する可能性があります。

これを避けるためには、エラーハンドリングを適切に行うことが重要です。

具体的には、file_exists()関数などを使用する前に、ファイルのパスが適切かどうかを確認する、例外処理を適用するなどの手段があります。

次に、ファイル存在チェックはファイルのパーミッションや所有者により、結果が異なることがあります。

例えば、読み込みが許可されていないファイルに対してis_readable()関数を使用すると、読み込み不可能と判断されます。

同様に、書き込みが許可されていないファイルに対してis_writable()関数を使用すると、書き込み不可能と判断されます。

これらの関数を使用する前に、適切なパーミッションが設定されているかを確認することが重要です。

また、シンボリックリンクに関する注意点もあります。

file_exists()関数はシンボリックリンク自体の存在を確認しますが、シンボリックリンクの参照先が存在するかどうかは確認しません。

シンボリックリンクの参照先の存在も確認したい場合は、is_link()関数と組み合わせて使用すると良いでしょう。

●カスタマイズの方法

PHPでのファイル存在チェックは、上記のような標準的な関数だけでなく、さらにカスタマイズすることも可能です。

例えば、特定の拡張子のファイルだけを対象とするチェック、特定のディレクトリ以下のすべてのファイルを対象とするチェックなど、具体的な要件に合わせて機能を追加することができます。

これらのカスタマイズは、標準的な関数を組み合わせたり、正規表現を使用したりすることで実現可能です。

まとめ

以上、PHPでのファイル存在チェックの方法とその応用例、注意点と対処法、カスタマイズの方法について解説しました。

ファイル操作はWebアプリケーション開発において頻繁に行われるため、これらの方法を理解し、適切に使用することが重要です。

なお、いずれの方法もファイルやディレクトリのパーミッション設定やサーバーのセキュリティ状況に影響を受けるため、その点も考慮に入れて利用するようにしましょう。