【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のような複数の拡張子を持つファイルを扱う際には、除去したい正確なサフィックスを指定する必要があります。これらの挙動を考慮して利用してください。

関連コンテンツ

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