【PHP8.x】is_file()関数の使い方
is_file関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
is_file関数は、指定されたパスが通常のファイルであるかどうかを確認する関数です。この関数は、引数として検証したいファイルのパスを受け取ります。もし指定されたパスが実際に存在する通常のファイルであれば、true(真)を返します。一方、指定されたパスが存在しない場合、ディレクトリである場合、あるいはシンボリックリンクだがリンク先が通常ファイルではない場合、またはその他の特殊なファイル(デバイスファイルなど)である場合には、false(偽)を返します。
この関数は、ファイル操作を行う前に、対象が通常のファイルであることを確認する際に非常に役立ちます。例えば、ファイルの読み書きを始める前に、指定されたパスがディレクトリではなく、実際に内容を持つファイルであることをチェックするために使用します。シンボリックリンクが指定された場合でも、そのリンク先が通常のファイルであればtrueを返しますので、実際のファイル実体を基準に判断できます。
ファイルが存在するかどうかだけを確認したい場合はfile_exists()関数を使用しますが、is_file()関数はさらにそれが「通常のファイル」であるかまでを厳密に判断します。これにより、意図しないディレクトリへの書き込みや、存在しないファイルへのアクセスといった予期せぬエラーを防ぎ、より堅牢なファイル処理ロジックを構築することが可能になります。ファイルシステムを扱うアプリケーション開発において、安全なファイル操作を実現するための基本的なツールの一つとして利用されます。
構文(syntax)
1<?php 2$filepath = 'path/to/your/file.txt'; 3$isFile = is_file($filepath); 4?>
引数(parameters)
string $filename
- string $filename: 検査するファイルパスを指定する文字列
戻り値(return)
bool
指定されたファイルパスに、通常のファイルが存在するかどうかを判定します。ファイルが存在する場合は true を、存在しない場合やディレクトリである場合は false を返します。
サンプルコード
PHPでファイルが存在し空か判定する
1<?php 2 3/** 4 * 指定されたファイルが実在し、かつ内容が空であるかを判断します。 5 * 6 * この関数は、`is_file()` を使用してパスが有効なファイルであることを確認し、 7 * その後 `filesize()` を使用してファイルのサイズが0バイトであるかをチェックします。 8 * 9 * @param string $filePath チェックするファイルのパス。 10 * @return bool ファイルが存在し、内容が空(0バイト)であれば true、それ以外は false を返します。 11 */ 12function isFileContentEmpty(string $filePath): bool 13{ 14 // 1. まず、指定されたパスが通常ファイルとして存在するかをチェックします。 15 // is_file() は、ファイルが存在し、ディレクトリやシンボリックリンクではなく 16 // 「通常のファイル」である場合に true を返します。 17 if (!is_file($filePath)) { 18 return false; // ファイルが存在しない、または通常のファイルではない 19 } 20 21 // 2. ファイルが存在することが確認できたら、そのファイルのサイズを取得します。 22 // filesize() は、ファイルのサイズをバイト単位で返します。 23 // もしファイルサイズの取得に失敗した場合(例: 権限不足)、false を返します。 24 $fileSize = filesize($filePath); 25 26 // 3. ファイルサイズの取得に失敗した場合、ファイルが空であるかを判断できないため、 27 // 安全のために false を返します。 28 if ($fileSize === false) { 29 return false; 30 } 31 32 // 4. ファイルサイズが0バイトであれば、そのファイルは空であると判断します。 33 return $fileSize === 0; 34} 35 36// --- 使用例 --- 37 38// テスト用のファイル名を設定 39$testFilename = 'sample_file_for_check.txt'; 40 41echo "--- ファイルの状態チェック ---" . PHP_EOL; 42 43// ケース1: 存在しないファイル 44echo "1. 'non_existent.txt' のチェック: "; 45if (isFileContentEmpty('non_existent.txt')) { 46 echo "空のファイルです。" . PHP_EOL; 47} else { 48 echo "空のファイルではありません。" . PHP_EOL; // 期待される出力 49} 50 51// ケース2: 空のファイルを作成し、チェック 52file_put_contents($testFilename, ''); // 空のファイルを作成 53echo "2. '" . $testFilename . "' (空) のチェック: "; 54if (isFileContentEmpty($testFilename)) { 55 echo "空のファイルです。" . PHP_EOL; // 期待される出力 56} else { 57 echo "空のファイルではありません。" . PHP_EOL; 58} 59 60// ケース3: 内容のあるファイルを作成し、チェック 61file_put_contents($testFilename, 'Hello, PHP engineers!'); // 内容のあるファイルを作成 62echo "3. '" . $testFilename . "' (内容あり) のチェック: "; 63if (isFileContentEmpty($testFilename)) { 64 echo "空のファイルです。" . PHP_EOL; 65} else { 66 echo "空のファイルではありません。" . PHP_EOL; // 期待される出力 67} 68 69// 使用したテストファイルを削除してクリーンアップ 70if (file_exists($testFilename)) { 71 unlink($testFilename); 72} 73 74?>
このPHPのサンプルコードは、指定されたファイルが存在し、その内容が空(0バイト)であるかを判断する方法を初心者の方にも分かりやすく示しています。
中心となるis_file関数は、引数$filenameで指定されたパスが実際に存在する「通常のファイル」であるかをチェックし、その結果を真偽値(bool)で返します。例えば、ディレクトリや存在しないパスに対してはfalseを返し、通常のファイルであればtrueを返します。
サンプルコードで定義されているisFileContentEmpty関数は、このis_file関数とfilesize関数を組み合わせて、より詳細なファイルの空判定を行っています。この関数は、引数$filePathで指定されたファイルパスが有効な通常のファイルであり、かつそのファイルのサイズが0バイトである場合にのみtrueを返します。ファイルが存在しない場合や、サイズが0バイトでない場合にはfalseを戻り値として返します。
コードの実行部では、存在しないファイル、内容が空のファイル、そして内容が書き込まれたファイルという三つの異なる状況でisFileContentEmpty関数を呼び出しています。これにより、ファイルの実際の状態に応じて、関数が「空のファイルです」または「空のファイルではありません」と正確に判断する様子を確認できます。これはファイルの状態を安全に確認する上で重要なテクニックです。
このサンプルコードでは、is_file()で通常のファイルであるかを確認し、filesize()でファイルの内容が空か判断しています。is_file()はディレクトリやシンボリックリンクにはfalseを返すため、単なる存在確認ではない点にご注意ください。filesize()はファイルが存在しない場合や、読み取り権限がない場合にfalseを返すため、必ず戻り値を確認しエラーハンドリングを行うことが重要です。ファイルが存在することを確認した後でも、サイズ取得までの間にファイルが削除されたり内容が変わったりする「競合状態」が発生する可能性もあります。実運用では、ファイルのパスは絶対パスで指定することを検討し、適切なファイルアクセス権限が付与されているか確認するようにしてください。
PHP is_file でファイル存在チェック
1<?php 2 3/** 4 * 指定されたパスが通常のファイルであるかどうかをチェックし、結果を出力します。 5 * 6 * is_file() 関数は、指定されたパスが存在し、それが通常のファイルである場合にのみ true を返します。 7 * ディレクトリ、シンボリックリンク、または存在しないパスに対しては false を返します。 8 * 9 * @param string $filePath チェックするファイルのパス。 10 * @return void 11 */ 12function checkFileStatus(string $filePath): void 13{ 14 echo "パス '{$filePath}' の状態を確認します。\n"; 15 16 if (is_file($filePath)) { 17 echo " 結果: このパスは、存在する通常のファイルです。\n"; 18 } else { 19 echo " 結果: このパスは、存在しないか、または通常のファイルではありません (例: ディレクトリ、シンボリックリンク)。\n"; 20 } 21 echo "----------------------------------------\n"; 22} 23 24// ----------------------------------------------------- 25// サンプルコードの実行例 26// ----------------------------------------------------- 27 28// 1. このスクリプト自身をチェック(存在する通常のファイル) 29// __FILE__ は現在のPHPスクリプトのフルパスを表す定数です。 30checkFileStatus(__FILE__); 31 32// 2. 存在しないファイルをチェック 33checkFileStatus('non_existent_file.txt'); 34 35// 3. ディレクトリをチェック(is_file() はディレクトリに対して false を返します) 36// __DIR__ は現在のPHPスクリプトがあるディレクトリのフルパスを表す定数です。 37checkFileStatus(__DIR__); 38 39// 4. 一時的にファイルを作成し、それをチェックした後に削除する例 40// (より実践的な例として、ファイル作成・削除の関数を利用) 41$tempFileName = 'temp_example_file.txt'; 42file_put_contents($tempFileName, 'これはテストファイルです。'); 43echo "一時ファイル '{$tempFileName}' を作成しました。\n"; 44checkFileStatus($tempFileName); 45 46// 使用済みのテストファイルを削除 47unlink($tempFileName); 48echo "一時ファイル '{$tempFileName}' を削除しました。\n"; 49echo "----------------------------------------\n"; 50 51// 削除後のファイルを再度チェック(存在しないため false になります) 52checkFileStatus($tempFileName); 53 54?>
PHPのis_file()関数は、指定されたパスが通常のファイルであるかどうかを調べるために使用します。
引数には、調べたいファイルへのパスを文字列として渡します。この関数は、指定したパスが存在し、かつそれがディレクトリなどではない「通常のファイル」である場合にのみ、戻り値としてtrue(真)を返します。パスが存在しない場合や、ディレクトリやシンボリックリンクであった場合はfalse(偽)を返します。
このサンプルコードは、checkFileStatusという独自の関数を定義し、様々な条件のパスに対してis_file()を実行して結果を表示しています。まず、現在実行中のスクリプト自身のパス(__FILE__)を調べることで、存在するファイルにはtrueが返されることを示します。次に、存在しないファイル名や、ディレクトリのパス(__DIR__)を渡すと、これらは通常のファイルではないためfalseが返されることを確認できます。さらに、一時的にファイルを作成してチェックするとtrueとなり、そのファイルを削除した後に再度チェックするとfalseに変わる流れを通して、関数の正確な挙動を具体的に示しています。
このように、ファイル操作を行う前に、対象が意図した通り通常のファイルであるかを確認する際に便利な関数です。
is_file()関数は、指定されたパスが存在し、かつそれがディレクトリではなく「通常のファイル」である場合にtrueを返します。ディレクトリやシンボリックリンク、存在しないパスに対してはfalseとなる点が重要です。単にパスが存在するかを確認したい場合はfile_exists()関数の利用も検討してください。サンプルコードの__FILE__は現在のスクリプト、__DIR__はスクリプトのあるディレクトリのフルパスを示す定数です。一時ファイルを生成する際は、unlink()関数で必ず削除し、不要なファイルが残らないように注意しましょう。パスの指定は絶対パス、相対パスのどちらでも可能ですが、意図しないファイルにアクセスしないよう、特にウェブ環境では細心の注意を払ってください。