Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【PHP8.x】SplFileInfo::getBasename()メソッドの使い方

getBasenameメソッドの使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

getBasenameメソッドは、PHPのSplFileInfoオブジェクトが表すファイルやディレクトリの基底名を取得するメソッドです。ここで言う基底名とは、ファイルパスやディレクトリパスからディレクトリ部分を取り除いた、ファイルやディレクトリそのものの名前を指します。

このメソッドは、引数の有無によって異なる結果を返します。引数を指定しない場合、例えば「/path/to/document.pdf」のようなファイルパスからは「document.pdf」というように、拡張子を含む完全なファイル名を返します。対象がディレクトリであれば、そのディレクトリ名をそのまま返します。

オプションとして、suffixという文字列を引数に指定することができます。このsuffixを指定すると、取得される基底名の末尾に指定したsuffixがある場合、そのsuffixを取り除いた部分を返します。例えば、「document.pdf」に対して.pdfsuffixとして指定すると「document」という拡張子なしの名前が得られます。これは、ファイルパスから特定の拡張子を取り除いたファイル名だけを取得したい場合に特に便利です。

SplFileInfoクラスはファイルシステム上のファイルやディレクトリに関する情報を取り扱うためのクラスであり、getBasenameメソッドは、ファイルやディレクトリの名前部分を効率的に抽出し、操作する必要がある場面で非常に役立ちます。パスの解析や、特定のファイル名パターンに基づいて処理を行う際などに活用される基本的な機能の一つです。

構文(syntax)

1<?php
2$fileInfo = new SplFileInfo('/path/to/document.pdf');
3$basenameWithExtension = $fileInfo->getBasename();
4$basenameWithoutPdf = $fileInfo->getBasename('.pdf');

引数(parameters)

?string $suffix = null

  • ?string $suffix = null: ファイル名から取り除く接尾辞を指定する文字列。指定しない場合は、ファイル名の末尾にあるこの文字列が取り除かれる

戻り値(return)

string

SplFileInfo::getBasename()は、ファイルパスの最後の要素(ファイル名またはディレクトリ名)を文字列として返します。

サンプルコード

PHP SplFileInfo::getBasenameでファイル名を取得する

1<?php
2
3/**
4 * SplFileInfo::getBasename() メソッドのサンプルコード。
5 *
6 * このメソッドは、ファイルパス文字列からファイル名(ベース名)を抽出します。
7 * オプションで、指定したサフィックス(例: 拡張子)を取り除くことができます。
8 * システムエンジニアを目指す初心者向けに、基本的なファイル名操作の理解を深めます。
9 */
10function demonstrateSplFileInfoGetBasename(): void
11{
12    // 1. 基本的なファイル名抽出のデモンストレーション
13    $filePath1 = '/var/www/html/index.php';
14    // SplFileInfoオブジェクトを作成します。
15    // getBasename()は、ファイルが存在しなくてもパス文字列に対して動作します。
16    $fileInfo1 = new SplFileInfo($filePath1);
17
18    echo "--- ケース1: 標準的なファイルパス ---\n";
19    echo "元のファイルパス: " . $fileInfo1->getPathname() . "\n";
20
21    // サフィックスを指定しない場合: ファイル名全体が返されます。
22    // 出力例: index.php
23    echo "ベース名 (サフィックスなし): " . $fileInfo1->getBasename() . "\n";
24
25    // '.php' サフィックスを指定した場合: 拡張子を取り除いたファイル名が返されます。
26    // 出力例: index
27    echo "ベース名 ('.php'を除去): " . $fileInfo1->getBasename('.php') . "\n";
28
29    // 存在しないサフィックスを指定した場合: 何も除去されずにファイル名全体が返されます。
30    // 出力例: index.php
31    echo "ベース名 ('.html'を除去しようとしたが一致せず): " . $fileInfo1->getBasename('.html') . "\n";
32
33    // 2. 複数の拡張子を持つファイル名のデモンストレーション
34    $filePath2 = 'document.tar.gz';
35    $fileInfo2 = new SplFileInfo($filePath2);
36
37    echo "\n--- ケース2: 複数の拡張子を持つファイル ---\n";
38    echo "元のファイルパス: " . $fileInfo2->getPathname() . "\n";
39
40    // サフィックスなし: document.tar.gz
41    echo "ベース名 (サフィックスなし): " . $fileInfo2->getBasename() . "\n";
42
43    // '.gz' サフィックスを除去: document.tar
44    echo "ベース名 ('.gz'を除去): " . $fileInfo2->getBasename('.gz') . "\n";
45
46    // '.tar.gz' サフィックスをまとめて除去: document
47    echo "ベース名 ('.tar.gz'を除去): " . $fileInfo2->getBasename('.tar.gz') . "\n";
48
49    // 3. ディレクトリパスの場合
50    $dirPath = '/home/user/my_project/';
51    $dirInfo = new SplFileInfo($dirPath);
52
53    echo "\n--- ケース3: ディレクトリパスの場合 ---\n";
54    echo "元のパス: " . $dirInfo->getPathname() . "\n";
55    // ディレクトリ名もベース名として取得できます。
56    // 出力例: my_project
57    echo "ベース名 (サフィックスなし): " . $dirInfo->getBasename() . "\n";
58}
59
60// 関数を実行してデモンストレーションを開始します。
61demonstrateSplFileInfoGetBasename();

SplFileInfo::getBasename()は、PHPのSplFileInfoクラスに属するメソッドで、ファイルパス文字列からファイル名(ベース名)を抽出するために使用されます。このメソッドは、実際のファイルが存在するかどうかに関わらず、与えられたパス文字列からファイル名部分を取り出すことができます。

引数にはオプションで$suffixを指定できます。この引数に文字列を指定すると、ファイル名の末尾からその文字列が一致した場合にのみ除去され、残りの部分が返されます。例えば、「index.php」というファイル名に対して'.php'をサフィックスとして指定すると「index」が返されます。引数を省略した場合や、指定したサフィックスがファイル名と一致しなかった場合は、ファイル名全体がそのまま返されます。

戻り値は常に文字列型で、抽出されたファイル名が返されます。

サンプルコードでは、まず「/var/www/html/index.php」のような標準的なファイルパスから「index.php」や拡張子を除去した「index」を取得する基本的な使い方を示しています。また、「document.tar.gz」のように複数の拡張子を持つファイルに対して、特定の拡張子のみや複数の拡張子をまとめて除去する方法もデモンストレーションしています。さらに、「/home/user/my_project/」のようなディレクトリパスに対しても、そのディレクトリ名「my_project」をベース名として取得できることが確認でき、ファイルパスの操作において非常に役立つメソッドです。

SplFileInfo::getBasename()は、ファイルが実際に存在しなくても、パス文字列からファイル名部分を安全に抽出できるメソッドです。引数$suffixはオプションで、ファイル名の末尾と完全に一致した場合にのみその部分が除去されます。指定したサフィックスがファイル名の末尾と一致しない場合でもエラーにはならず、何も除去されずにファイル名全体が返される点にご注意ください。これは、除去したい部分を正確に指定する必要があることを意味します。また、ディレクトリパスに対しても、末尾のスラッシュが無視されて最後のディレクトリ名をベース名として取得できます。戻り値は常に文字列です。

PHP SplFileInfo::getBasename() でファイル名を取得する

1<?php
2
3// SplFileInfo::getBasename() メソッドのサンプルコード
4// ファイルやディレクトリのパスから、ファイル名またはディレクトリ名(ベース名)を取得します。
5// システムエンジニアを目指す初心者の方へ: このメソッドはファイルパスを扱う際に頻繁に利用されます。
6
7// 例1: 通常のファイルパス
8$filePath = '/home/user/documents/report.pdf';
9
10// 例2: 拡張子を持つ別のファイルパス
11$imagePath = '/var/www/html/images/logo.png';
12
13// 例3: ディレクトリパス
14$dirPath = '/usr/local/bin/';
15
16// SplFileInfo オブジェクトを作成
17// SplFileInfo は、ファイルシステムに関する情報をオブジェクト指向で扱うためのクラスです。
18// コンストラクタにファイルまたはディレクトリのパス文字列を渡してインスタンス化します。
19$fileInfo = new SplFileInfo($filePath);
20$imageInfo = new SplFileInfo($imagePath);
21$dirInfo = new SplFileInfo($dirPath);
22
23echo "--- SplFileInfo::getBasename() の使用例 ---\n\n";
24
25// 1. 引数なしでベース名を取得(拡張子を含むファイル名、またはディレクトリ名)
26// getBasename() を引数なしで呼び出すと、パスの最後の部分がそのまま返されます。
27echo "パス: '{$filePath}'\n";
28echo "  ベース名: " . $fileInfo->getBasename() . "\n";
29// 出力: report.pdf
30
31echo "\nパス: '{$dirPath}'\n";
32echo "  ベース名: " . $dirInfo->getBasename() . "\n";
33// 出力: bin (末尾のスラッシュは自動的に無視されます)
34
35// 2. 特定のサフィックス(拡張子など)を除いてベース名を取得
36// getBasename() の第1引数として除去したい文字列(通常は拡張子)を渡すと、
37// その文字列がベース名の末尾から取り除かれた結果が返されます。
38echo "\nパス: '{$imagePath}'\n";
39echo "  ベース名 ('.png'を除去): " . $imageInfo->getBasename('.png') . "\n";
40// 出力: logo
41
42// 複数の拡張子を持つファイルの場合
43$archivePath = '/tmp/backup.tar.gz';
44$archiveInfo = new SplFileInfo($archivePath);
45echo "\nパス: '{$archivePath}'\n";
46echo "  ベース名 ('.gz'を除去): " . $archiveInfo->getBasename('.gz') . "\n";
47// 出力: backup.tar
48echo "  ベース名 ('.tar.gz'を除去): " . $archiveInfo->getBasename('.tar.gz') . "\n";
49// 出力: backup
50
51?>

SplFileInfo::getBasename()メソッドは、ファイルやディレクトリのパス文字列から、ファイル名やディレクトリ名(ベース名)を正確に取得する際に用いるメソッドです。このメソッドは、ファイルシステムに関する情報をオブジェクト指向で扱うためのSplFileInfoクラスに属しています。

getBasename()を引数なしで呼び出すと、与えられたパスの最後の部分がそのまま文字列として返されます。例えば、/home/user/documents/report.pdfというパスからはreport.pdfが、/usr/local/bin/というディレクトリパスからは末尾のスラッシュが自動的に無視されbinという文字列が取得されます。

オプションの引数$suffixに文字列を渡すと、その文字列がベース名の末尾から取り除かれた結果が文字列として返されます。この機能は、ファイル名から拡張子を除去したい場合に特に役立ちます。例えば、image.pngのパスに対して$suffix.pngを指定すると、imageという文字列が得られます。.tar.gzのように複数の拡張子を持つファイルに対しても、指定したサフィックスを除去できます。戻り値は常に文字列です。

このメソッドは、ファイルパスを扱うPHPアプリケーション開発において頻繁に利用され、システムエンジニアを目指す方にとってファイルシステム操作の基本となる重要な機能です。

SplFileInfo::getBasename()は、ファイルパスやディレクトリパスの末尾部分を文字列として取得する際に使用します。引数を指定しない場合、ファイル名であれば拡張子を含んだ名前が、ディレクトリ名であれば末尾のスラッシュを除いた名前がそのまま返されます。

第1引数 $suffix に文字列を渡すと、取得されるベース名の末尾がその文字列と完全に一致した場合にのみ、その部分が除去されます。この際、大文字・小文字は区別されますので、例えば「.png」と「.PNG」は異なるものとして扱われる点にご注意ください。

このメソッドは、ファイルやディレクトリが実際に存在するかどうかは確認せず、純粋に与えられたパス文字列を解析します。そのため、実際のファイル操作を行う際には、パスの妥当性や存在チェックを別途行うことを推奨します。また、このメソッドはSplFileInfoオブジェクトのインスタンスメソッドであるため、事前にnew SplFileInfo($path)でオブジェクトを作成してから利用します。

関連コンテンツ

関連プログラミング言語