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

【PHP8.x】basename()関数の使い方

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

作成日: 更新日:

基本的な使い方

basename関数は、指定されたパス文字列から、末尾のファイル名またはディレクトリ名を抽出する関数です。

この関数は、ファイルのフルパス(例: /usr/local/data/report.pdf)が与えられたときに、そのパスの最も末尾にある名前(例: report.pdf)だけを取り出したい場合に非常に役立ちます。パスがディレクトリの場合(例: /home/user/images/)には、末尾のディレクトリ名(例: images)を返します。

basename関数は、ファイルやディレクトリの名前だけを効率的に取得できるため、ファイルの保存処理、ログファイルの解析、WebアプリケーションでのURL構築など、さまざまなパス操作の場面で利用されます。例えば、ユーザーがアップロードしたファイルのフルパスからファイル名だけを取得し、別の場所に保存するといった用途に便利です。

オプションとして、2番目の引数suffixに文字列を指定することで、抽出した名前から特定の拡張子を取り除くことができます。例えば、basename('/path/to/document.txt', '.txt')と実行すると、結果はdocumentとなります。これにより、ファイル名と拡張子を分離する処理を簡潔に行うことが可能です。

システムエンジニアを目指す方にとって、ファイルシステムやパス操作は基本的なスキルであり、basename関数はその理解を深め、実用的な処理を実装するための重要なツールの一つです。この関数は常に文字列を返します。

構文(syntax)

1<?php
2
3basename("/path/to/your/file.txt");

引数(parameters)

string $path, string $suffix = ""

  • string $path: ファイルパスまたはディレクトリパスを指定する文字列
  • string $suffix = "": 除去したい接尾辞を指定する文字列 (省略可能)

戻り値(return)

string

指定されたファイルパスから、ファイル名のみを抽出した文字列を返します。

サンプルコード

PHP basename()でパスからファイル名を取得する

1<?php
2
3/**
4 * basename() 関数の使用例
5 * パスからファイル名またはディレクトリ名(末尾のスラッシュがない場合)を抽出します。
6 * オプションで、指定されたサフィックス(拡張子など)を取り除きます。
7 */
8
9// 例 1: 基本的な使用方法 - ファイルパスからファイル名を抽出
10// "/path/to/file.txt" から "file.txt" を取得します。
11$path1 = "/var/www/html/index.php";
12$filename1 = basename($path1);
13echo "元のパス: '{$path1}'\n";
14echo "basename(): '{$filename1}'\n\n";
15
16// 例 2: Windows形式のパスでも動作
17// "C:\dir\file.exe" から "file.exe" を取得します。
18$path2 = "C:\\Users\\User\\Documents\\report.docx";
19$filename2 = basename($path2);
20echo "元のパス: '{$path2}'\n";
21echo "basename(): '{$filename2}'\n\n";
22
23// 例 3: オプションのサフィックス引数を使用してファイル拡張子を除去
24// "/home/user/image.jpg" から ".jpg" を取り除き "image" を取得します。
25$path3 = "/home/user/image.jpg";
26$filename3_no_ext = basename($path3, ".jpg");
27echo "元のパス: '{$path3}'\n";
28echo "basename() (サフィックス '.jpg' を除去): '{$filename3_no_ext}'\n\n";
29
30// 例 4: サフィックスがファイル名の一部と一致する場合 (末尾のみが除去される)
31// "/archive/data.tar.gz" から ".gz" を取り除き "data.tar" を取得します。
32$path4_a = "/archive/data.tar.gz";
33$filename4_no_gz = basename($path4_a, ".gz");
34echo "元のパス: '{$path4_a}'\n";
35echo "basename() (サフィックス '.gz' を除去): '{$filename4_no_gz}'\n\n";
36
37// 例 5: 複数の拡張子を持つファイルから特定のサフィックスを除去
38// "/archive/data.tar.gz" から ".tar.gz" を取り除き "data" を取得します。
39$path5 = "/archive/data.tar.gz";
40$filename5_no_tar_gz = basename($path5, ".tar.gz");
41echo "元のパス: '{$path5}'\n";
42echo "basename() (サフィックス '.tar.gz' を除去): '{$filename5_no_tar_gz}'\n\n";
43
44// 例 6: ディレクトリパスの場合 (末尾にスラッシュがある場合、空文字列を返します)
45// "/usr/local/bin/" からは空文字列が返されます。
46$path6 = "/usr/local/bin/";
47$filename6 = basename($path6);
48echo "元のパス: '{$path6}'\n";
49echo "basename(): '{$filename6}' (末尾のスラッシュは取り除かれ、空文字列が返されます)\n\n";
50
51// 例 7: ファイル名のみの場合
52// "my_script.sh" はそのまま "my_script.sh" が返されます。
53$path7 = "my_script.sh";
54$filename7 = basename($path7);
55echo "元のパス: '{$path7}'\n";
56echo "basename(): '{$filename7}'\n\n";
57
58?>

PHPのbasename()関数は、ファイルパスの文字列から末尾の要素、つまりファイル名やディレクトリ名を取得するために使用されます。

この関数は、第一引数に$pathとして処理対象のパス文字列を、第二引数にオプションとして$suffixを受け取ります。戻り値として、パスの末尾部分の文字列を返します。

第一引数に/var/www/html/index.phpのようなファイルパスを指定すると、最後のスラッシュ以降の部分であるindex.phpが返されます。この挙動はWindows形式のパス(例: C:\Users\report.docx)でも同様に機能し、report.docxを取得します。

オプションの第二引数$suffix.jpgのような拡張子を指定すると、取得したファイル名の末尾がその文字列と一致する場合に限り、その部分が取り除かれます。例えば、パスが/home/user/image.jpgでサフィックスに.jpgを指定すると、imageという文字列が返されます。

注意点として、パスが/usr/local/bin/のようにスラッシュで終わっている場合、この関数は空の文字列を返すため、ディレクトリ名そのものを取得したい場合は事前に末尾のスラッシュを取り除く必要があります。この関数は、ファイルパスからファイル名部分だけを安全かつ手軽に抽出したい場合に非常に便利です。

basename()関数は、与えられたパス文字列からファイル名、または末尾のスラッシュがない場合のディレクトリ名を抽出します。WindowsとUnix形式のパスの両方に対応しており、異なるOS環境でも利用できる点が便利です。

特に注意すべき点は二つあります。一つは、パスが末尾にスラッシュを含むディレクトリ名である場合(例: /var/www/html/)、戻り値が空文字列となることです。これを理解していないと意図しない結果を招く可能性があります。もう一つは、第二引数で指定するsuffix(拡張子など)は、パスの末尾と完全に一致する場合にのみ除去される点です。例えば、.tar.gzのような複数の拡張子を持つファイルを扱う際には、除去したい正確なサフィックスを指定する必要があります。これらの挙動を考慮して利用してください。

PHP basename()でファイル名と拡張子を取得する

1<?php
2
3/**
4 * basename() 関数の使用例を表示します。
5 *
6 * この関数は、指定されたパス文字列の末尾にあるファイル名(またはディレクトリ名)部分を返します。
7 * オプションで、指定したサフィックスをファイル名から取り除くことができます。
8 * システムエンジニアを目指す初心者の方のために、一般的な使用例をいくつか紹介します。
9 *
10 * @return void
11 */
12function demonstrateBasename(): void
13{
14    // 例1: 通常のファイルパスからファイル名を取得する
15    // "/var/www/html/index.php" から "index.php" を取得します。
16    $filePath1 = "/var/www/html/index.php";
17    $fileName1 = basename($filePath1);
18    echo "元のパス: " . $filePath1 . "\n";
19    echo "ファイル名: " . $fileName1 . "\n\n"; // 出力: index.php
20
21    // 例2: ディレクトリパスから末尾のディレクトリ名を取得する
22    // basename() は、パスの最後のコンポーネントを返すため、
23    // ディレクトリパスが与えられた場合は、そのディレクトリ名を返します。
24    // "/usr/local/bin/" から "bin" を取得します。
25    $directoryPath = "/usr/local/bin/";
26    $directoryName = basename($directoryPath);
27    echo "元のパス: " . $directoryPath . "\n";
28    echo "ディレクトリ名 (basename): " . $directoryName . "\n\n"; // 出力: bin
29
30    // 例3: 拡張子を除外してファイル名を取得する
31    // ".txt" というサフィックスを指定することで、ファイル名から拡張子を取り除きます。
32    // "/home/user/document.txt" から "document" を取得します。
33    $filePath2 = "/home/user/document.txt";
34    $fileName2WithoutExtension = basename($filePath2, ".txt");
35    echo "元のパス: " . $filePath2 . "\n";
36    echo "ファイル名 (拡張子なし): " . $fileName2WithoutExtension . "\n\n"; // 出力: document
37
38    // 例4: 存在しない拡張子を除外しようとする場合
39    // 指定したサフィックスがファイル名の末尾に一致しない場合、何も変更されません。
40    // "/app/data.json" から ".xml" を除外しようとしますが、一致しないため "data.json" のままです。
41    $filePath3 = "/app/data.json";
42    $fileName3 = basename($filePath3, ".xml");
43    echo "元のパス: " . $filePath3 . "\n";
44    echo "ファイル名 (存在しない拡張子を除外): " . $fileName3 . "\n\n"; // 出力: data.json
45}
46
47// 関数を実行してサンプルコードの動作を確認します。
48demonstrateBasename();
49

PHPのbasename()関数は、指定されたパス文字列の末尾にあるファイル名、またはディレクトリ名部分を抽出するために使用される便利な関数です。これはファイルやディレクトリのパスを扱うシステム開発において、非常に基本的ながらも重要な機能の一つです。

この関数は、まず必須の引数である$pathとして、処理したいファイルまたはディレクトリのパス文字列を受け取ります。例えば、「/home/user/document.txt」のようなファイルパスや、「/usr/local/bin/」のようなディレクトリパスを指定します。basename()は、スラッシュ(/)で区切られた最後の部分を返します。

さらに、オプションで2番目の引数$suffixを指定することができます。この引数に文字列を渡すと、basename()関数は抽出したファイル名の末尾から、その$suffixに一致する部分を取り除いて結果を返します。例えば、「index.php」というファイル名から「.php」を取り除いて「index」だけを取得したい場合などに活用できます。ただし、指定した$suffixがファイル名の末尾と一致しない場合、ファイル名は変更されずにそのまま返されます。

basename()関数の戻り値は常にstring型で、これはパスの末尾から取得されたファイル名、またはディレクトリ名そのものです。この関数を使うことで、複雑なパス文字列から目的のファイル名やディレクトリ名を簡潔かつ正確に取得し、後続の処理に利用できます。ウェブアプリケーションでのファイル名処理や、システム内のパス情報の管理など、幅広い用途で活用できるでしょう。

basename関数は、ファイル名だけでなく、パスの末尾がディレクトリ名の場合でも、その名前を取得します。例えば /usr/local/bin/ の場合は bin が返されます。第二引数の $suffix は、指定された文字列がパスの末尾と完全に一致した場合にのみ取り除かれます。一致しない場合は、ファイル名やディレクトリ名から何も変更されずにそのまま返されるため、指定するサフィックスが正確であることを確認してください。この関数はパスの末尾部分を安全に抽出するのに役立ちます。

PHP basenameで拡張子なしファイル名を取得する

1<?php
2
3/**
4 * ファイルパスからファイル名のみを抽出し、さらに拡張子を取り除く例。
5 * basename() 関数は、パスの最後のコンポーネントを返します。
6 * 第二引数に除去したい文字列(通常は拡張子)を指定することで、その文字列もファイル名から取り除けます。
7 */
8function demonstrateBasenameWithoutExtension(): void
9{
10    $filePathWithExtension = '/var/www/html/index.php';
11    $fileNameWithoutExtension = '/path/to/document.txt';
12    $complexFileName = '/archive/data.tar.gz';
13
14    // 1. ファイルパスからファイル名のみを取得 (拡張子含む)
15    // index.php
16    $fullFileName = basename($filePathWithExtension);
17    echo "元のパス: '{$filePathWithExtension}'\n";
18    echo "ファイル名 (拡張子含む): {$fullFileName}\n";
19
20    // 2. ファイルパスからファイル名を取得し、特定の拡張子を除去
21    // index
22    $fileNameOnly = basename($filePathWithExtension, '.php');
23    echo "ファイル名 (拡張子 .php 除去): {$fileNameOnly}\n\n";
24
25    // 3. 別のファイルで拡張子なしの挙動を確認
26    // document
27    $baseNameOnly = basename($fileNameWithoutExtension, '.txt');
28    echo "元のパス: '{$fileNameWithoutExtension}'\n";
29    echo "ファイル名 (拡張子 .txt 除去): {$baseNameOnly}\n\n";
30
31    // 4. 複数の拡張子を持つファイルの場合
32    // data.tar
33    $partiallyRemoved = basename($complexFileName, '.gz');
34    echo "元のパス: '{$complexFileName}'\n";
35    echo "ファイル名 (拡張子 .gz 除去): {$partiallyRemoved}\n";
36
37    // data
38    $fullyRemoved = basename($complexFileName, '.tar.gz');
39    echo "ファイル名 (拡張子 .tar.gz 除去): {$fullyRemoved}\n";
40}
41
42// 関数の実行
43demonstrateBasenameWithoutExtension();
44
45?>

PHP 8のbasename関数は、ファイルパスからファイル名だけを簡単に取り出すための機能です。

この関数は、最初の引数$pathに渡されたファイルやディレクトリのパス文字列から、パスの最後の部分、つまりファイル名やディレクトリ名を文字列として返します。例えば、/var/www/html/index.phpというパスからは「index.php」という文字列が取得されます。

basename関数の強力な点は、オプションである第二引数$suffixを使用することで、抽出したファイル名から特定の文字列(主に拡張子)を取り除けることです。この$suffix.php.txtといった拡張子を指定すると、ファイル名からその部分を除去した文字列を返します。サンプルコードでは、/var/www/html/index.phpから.phpを除去して「index」だけを取得したり、/path/to/document.txtから.txtを除去して「document」だけを取得する例が示されています。また、/archive/data.tar.gzのような複数の拡張子を持つファイルでも、.gzだけを除去して「data.tar」とする、あるいは.tar.gz全体を除去して「data」とするなど、柔軟な使い方が可能です。

このように、basename関数はファイルパスから必要なファイル名を抽出し、拡張子を除いた形式で利用したい場合に大変便利です。戻り値は常に文字列型です。

basename関数は、指定されたパスからファイル名部分のみを抽出する際に利用します。第二引数に特定の文字列を指定すると、その文字列がファイル名の末尾に完全に一致する場合に限り、ファイル名から除去されます。例えば、data.tar.gzのようなファイル名から.tarだけを除去したい場合、第二引数に.tarと指定しても除去されず、末尾の.gz、または.tar.gzと完全に一致する文字列を指定する必要があります。この関数はパス文字列の操作に特化しており、指定したパスが有効であるか、あるいは実際にファイルが存在するかどうかは確認しませんのでご注意ください。ファイルシステムでファイルを操作する前には、パスの適切性やファイルの存在を別途確認することをお勧めします。

関連コンテンツ

関連プログラミング言語