【PHP8.x】filetype関数の使い方

filetype関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

filetype関数は、指定されたファイルのタイプを判断し、その種類を表す文字列を返す関数です。この関数は、与えられたパスが指すファイルやディレクトリの種類を識別します。識別可能なタイプは多岐にわたり、具体的には、名前付きパイプを意味する"fifo"、文字型スペシャルファイルを意味する"char"、ディレクトリを意味する"dir"、ブロック型スペシャルファイルを意味する"block"、シンボリックリンクを意味する"link"、そして通常のファイルを意味する"file"などがあります。これらのいずれにも当てはまらない場合や、タイプを特定できない場合は"unknown"という文字列を返します。

引数としては、タイプを調べたいファイルやディレクトリへのパスを文字列で一つ受け取ります。

関数が正常に実行され、ファイルのタイプを判断できた場合は、前述のタイプを示す文字列が返されます。しかし、指定されたパスが存在しない場合、ファイルへのアクセス権がない場合、またはファイルのステータス情報を取得できない場合など、何らかのエラーが発生した際にはブール値のfalseを返します。PHP 8では、無効なパスが指定された際にE_WARNINGレベルの警告が発生するようになりました。そのため、この関数を利用する際には、戻り値がfalseでないことを確認し、エラーハンドリングを行うことが重要です。filetype関数は、ファイルの処理を行う際に、その種類に応じて異なる操作を行いたい場合に非常に有用で、ファイルシステムを操作するプログラムにおいて重要な役割を果たします。

構文(syntax)

1<?php
2// ファイルを作成し、その種類を調べます。
3$filename = 'example.txt';
4file_put_contents($filename, 'これはテストファイルです。');
5
6// filetype() 関数を使ってファイルの種類を取得します。
7$type = filetype($filename);
8echo "ファイル '{$filename}' の種類は: {$type}\n";
9
10// 後処理として作成したファイルを削除します。
11unlink($filename);
12
13// ディレクトリの種類を調べることもできます。
14$dirname = __DIR__; // 現在のスクリプトがあるディレクトリ
15$type = filetype($dirname);
16echo "ディレクトリ '{$dirname}' の種類は: {$type}\n";
17?>

引数(parameters)

string $filename

  • string $filename: ファイルの種類を判定したいファイルへのパスを指定する文字列

戻り値(return)

string|false

指定されたファイルパスのファイルタイプを文字列で返します。ファイルが見つからない、またはファイルタイプを判別できない場合は false を返します。

サンプルコード

PHP filetype関数でPDFファイルの種類を判別する

1<?php
2
3/**
4 * PHPのfiletype関数を使用して、指定されたファイルパスのファイルシステム上の種別を判別する例です。
5 *
6 * filetype関数はMIMEタイプ(例: 'application/pdf')を返すものではなく、
7 * ファイルシステム上の種別('file', 'dir', 'link', 'fifo', 'char', 'block', 'unknown')を返します。
8 * PDFファイルであっても、通常のファイルとしてディスクに存在する場合は 'file' となります。
9 */
10function demonstrateFiletypeForPdfExample(): void
11{
12    // 動作確認用に一時ディレクトリ内にPDFファイル名を想定したダミーファイルを作成します。
13    $tempDir = sys_get_temp_dir();
14    $filename = $tempDir . '/example_document_' . uniqid() . '.pdf';
15
16    // ダミーのPDFコンテンツをファイルに書き込みます。
17    // ファイルの内容はfiletype関数には影響しませんが、ファイルが存在する必要があります。
18    if (file_put_contents($filename, '%PDF-1.4% DUMMY PDF CONTENT') === false) {
19        echo "エラー: 一時ファイルの作成に失敗しました。\n";
20        return;
21    }
22
23    echo "作成されたダミーファイル: " . $filename . "\n";
24
25    // filetype関数を呼び出し、ファイルの種類を取得します。
26    $fileType = filetype($filename);
27
28    if ($fileType === false) {
29        echo "エラー: ファイルタイプを取得できませんでした。ファイルが存在しないか、アクセス権がありません。\n";
30    } else {
31        echo "filetype関数によるファイルの種類: " . $fileType . "\n";
32        if ($fileType === 'file') {
33            echo "このファイルは、通常のファイルとして認識されました。\n";
34        } else {
35            echo "このファイルは、" . $fileType . "として認識されました。\n";
36        }
37    }
38
39    // 処理後に作成した一時ファイルを削除します。
40    if (unlink($filename)) {
41        echo "一時ファイルを削除しました。\n";
42    } else {
43        echo "警告: 一時ファイルの削除に失敗しました。手動で削除する必要があるかもしれません。\n";
44    }
45}
46
47// 関数を実行して結果を表示します。
48demonstrateFiletypeForPdfExample();

PHP 8のfiletype関数は、指定されたファイルパスがファイルシステム上でどのような種類であるかを判別するために使用されます。この関数は、引数として種類を調べたいファイルのパスを文字列で受け取ります。成功した場合、戻り値としてそのファイルの種類を示す文字列、例えば「file」(通常のファイル)、「dir」(ディレクトリ)、「link」(シンボリックリンク)などを返します。ファイルが存在しない、またはアクセス権がないなどの理由で失敗した場合はfalseが返されます。

特に重要な点として、filetype関数はファイルのMIMEタイプ(例: 'application/pdf'や'image/jpeg')を判別するものではないことを理解してください。これは、あくまでファイルシステム上での種別を判定します。そのため、PDFファイルであっても、それが通常のファイルとしてディスクに保存されているのであれば、'file'という結果が返されます。

提示されたサンプルコードでは、一時ディレクトリ内にPDFファイル名を想定したダミーファイルを作成し、filetype関数を適用しています。この例を実行すると、作成したダミーのPDFファイルに対して'file'が返されることを確認でき、filetype関数が通常のファイルであることを示す挙動を示します。この関数は、ファイルの基本的な種別を効率的に確認したい場合に役立ちます。

filetype関数は、ファイルのMIMEタイプではなく、ファイルシステム上の種別(例: 'file', 'dir')を返します。PDFファイルであっても、通常のファイルであれば 'file' となりますので、ファイルの内容を判別する用途では使用できません。ファイルが存在しない場合やアクセス権がない場合は false を返すため、必ず戻り値の確認が必要です。ファイルの内容に応じた種類を判別したい場合は、finfo_file関数などの利用を検討してください。サンプルコードの一時ファイル作成は、テスト用途で参考にできますが、実運用ではセキュリティとクリーンアップに注意が必要です。

PHP filetype()でPPTファイルの種類を調べる

1<?php
2
3declare(strict_types=1);
4
5/**
6 * 指定されたファイルのタイプを調べ、結果を出力します。
7 * filetype() 関数は、PPTファイルのような通常のファイルを 'file' として返します。
8 *
9 * @param string $filename チェックするファイルへのパス
10 */
11function checkPptFileType(string $filename): void
12{
13    // file_exists() でファイルの存在を確認
14    if (!file_exists($filename)) {
15        echo "エラー: ファイル '{$filename}' が見つかりません。" . PHP_EOL;
16        return;
17    }
18
19    // filetype() を使ってファイルの種類を取得
20    $fileType = filetype($filename);
21
22    if ($fileType === false) {
23        // 失敗した場合
24        echo "エラー: ファイル '{$filename}' の種類を取得できませんでした。" . PHP_EOL;
25    } else {
26        // 成功した場合、結果を出力
27        // 通常のファイル(.ppt, .pptx, .txt など)は "file" と判定されます。
28        echo "ファイル '{$filename}' の種類は '{$fileType}' です。" . PHP_EOL;
29    }
30}
31
32// --- サンプル実行 ---
33
34// チェック用のダミーファイル名
35$dummyPptFile = 'sample-presentation.ppt';
36$dummyDir = 'sample-directory';
37
38try {
39    // サンプル用に空のファイルとディレクトリを作成
40    touch($dummyPptFile);
41    mkdir($dummyDir);
42
43    echo "--- PPTファイルのチェック ---" . PHP_EOL;
44    checkPptFileType($dummyPptFile);
45
46    echo PHP_EOL;
47
48    echo "--- ディレクトリのチェック ---" . PHP_EOL;
49    checkPptFileType($dummyDir);
50
51    echo PHP_EOL;
52
53    echo "--- 存在しないファイルのチェック ---" . PHP_EOL;
54    checkPptFileType('non_existent_file.ppt');
55
56} finally {
57    // スクリプトの終了時に、作成したダミーファイルとディレクトリを削除
58    if (file_exists($dummyPptFile)) {
59        unlink($dummyPptFile);
60    }
61    if (is_dir($dummyDir)) {
62        rmdir($dummyDir);
63    }
64}

このPHPサンプルコードは、filetype() 関数を使って指定されたパスがファイルなのかディレクトリなのか、あるいは他の種類なのかを判別する方法を示しています。

filetype() 関数は、引数 $filename に渡されたパスのタイプを文字列で返します。例えば、通常のファイルであれば 'file'、ディレクトリであれば 'dir' という文字列が返ってきます。もしファイルの種類の取得に失敗した場合、例えばファイルが存在しない時などには false を返します。

このコードの重要な点は、filetype() 関数がファイルの中身や拡張子を解析するわけではないということです。そのため、PowerPointファイル(.ppt)のような特定のアプリケーションファイルも、テキストファイルや画像ファイルなどと同じ「通常のファイル」として扱われ、結果は 'file' となります。

サンプルでは、ダミーのPPTファイルとディレクトリを作成し、それぞれに対して filetype() を実行しています。これにより、ファイルとディレクトリで返される値が異なること、そしてエラー処理として事前に file_exists() で存在確認を行うことの重要性も理解できます。

filetype()関数は、PPTファイルのような通常のファイルを「file」として識別し、ディレクトリを「dir」と識別するなど、ファイルシステム上の基本的な種類を返します。ファイルの拡張子や内容から具体的な種類(MIMEタイプなど)を判別するわけではない点に注意が必要です。関数が失敗した場合にはfalseを返すため、必ず戻り値をチェックしてエラー処理を適切に行ってください。また、filetype()を呼び出す前にfile_exists()でファイルの存在を確認することや、ファイルへのアクセス権限も考慮することが安全なコード利用の鍵となります。

関連コンテンツ

【PHP8.x】filetype関数の使い方 | いっしー@Webエンジニア