【PHP8.x】dirname()関数の使い方
dirname関数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
dirname関数は、指定されたパス文字列から、その一つ上の階層にあたる親ディレクトリのパスを取得する関数です。
この関数は、ファイルやディレクトリのフルパス(例: /var/www/html/index.php や /home/user/documents)を引数として渡すと、そのパスから一番末尾の要素(ファイル名や最後のディレクトリ名)を取り除いた部分を返します。例えば、/var/www/html/index.php の場合は /var/www/html を、/home/user/documents の場合は /home/user を取得できます。
PHP 7.0.0以降、末尾にスラッシュ(/)を持つパスの挙動が変更されました。現在のバージョン(PHP 8を含む)では、/path/to/directory/ のように末尾にスラッシュがあるパスを指定した場合、dirname() 関数は /path/to/directory を返します。一方で、/path/to/directory のように末尾にスラッシュがないパスを指定した場合は /path/to が返されます。この挙動の違いは、末尾のスラッシュが無視された後、残ったパス全体がそのパスの親ディレクトリとして返されるためです。
ルートディレクトリ(/)を指定した場合は / が、空文字列('')を指定した場合は . (カレントディレクトリを表す)が返されます。Windows環境でのパス(例: C:\path\to\file.txt)に対しても適切に動作し、C:\path\to を返します。
この関数は、ファイルパスやディレクトリパスを操作する際に、特定のファイルが所属するディレクトリや、あるディレクトリの一つ上の階層のパスを動的に取得したい場合に非常に役立ちます。例えば、設定ファイルのパスからそのディレクトリパスを取得して、関連する別のファイルを読み込む際などに利用できます。
構文(syntax)
1<?php 2$path = "/usr/local/bin/php"; 3$directory_name = dirname($path); 4?>
引数(parameters)
string $path, int $levels = 1
- string $path: ディレクトリパスを指定する文字列
- int $levels = 1: 指定したパスから親ディレクトリをいくつ遡るかを指定する整数。デフォルトは1で、指定したパスの親ディレクトリを返します。
戻り値(return)
string
与えられたファイルパス文字列から、パスのディレクトリ部分を文字列として返します。
サンプルコード
PHP dirname(DIR) で親ディレクトリを取得する
1<?php 2 3// __DIR__ は、現在のスクリプトファイルが存在するディレクトリのフルパスを返します。 4// 例: `/var/www/html/public` 5$currentScriptDir = __DIR__; 6echo "現在のスクリプトのディレクトリ: " . $currentScriptDir . PHP_EOL; 7 8// dirname() 関数は、指定されたパスの親ディレクトリのパスを返します。 9// dirname(__DIR__) は、現在のスクリプトのディレクトリの親ディレクトリを返します。 10// 例: `/var/www/html/public` の親は `/var/www/html` 11$parentDir = dirname(__DIR__); 12echo "現在のスクリプトの親ディレクトリ: " . $parentDir . PHP_EOL; 13 14// dirname() 関数の第二引数 $levels を使用すると、指定した階層数の親ディレクトリを取得できます。 15// 例えば、2を指定すると2つ上の親ディレクトリを返します。 16// 例: `/var/www/html/public` から2つ上は `/var/www` 17$grandparentDir = dirname(__DIR__, 2); 18echo "現在のスクリプトの祖父ディレクトリ (2階層上): " . $grandparentDir . PHP_EOL; 19 20?>
PHPのdirname関数は、指定されたファイルパスやディレクトリパスの親ディレクトリのパスを取得するために使用します。
第一引数$pathには、親ディレクトリを取得したい対象のパスを文字列で指定します。第二引数$levelsはオプションで、デフォルト値は1です。この引数にnという整数を指定すると、指定されたパスからn階層上の親ディレクトリのパスを文字列として返します。
サンプルコードでは、まずPHPの特殊定数__DIR__が登場します。これは、現在のスクリプトファイルが存在するディレクトリのフルパスを自動的に返してくれるものです。例えば、/var/www/html/publicというディレクトリでスクリプトが実行されていれば、__DIR__はこのパスを返します。
dirname(__DIR__)と記述すると、現在のスクリプトの親ディレクトリ、つまり__DIR__が示すパスの一つ上のディレクトリのパスを取得できます。上記の例では、/var/www/htmlが取得されます。
さらに、dirname(__DIR__, 2)のように第二引数に2を指定すると、現在のスクリプトのディレクトリから2つ上の親ディレクトリのパスを取得できます。先の例でいえば、/var/wwwが取得されることになります。
この関数は、アプリケーション内で設定ファイルやライブラリなど、特定のリソースへのパスを現在のスクリプトの位置を基準に動的に解決したい場合に非常に役立ちます。
__DIR__は現在のスクリプトファイルが存在するディレクトリの絶対パスを示すマジック定数です。これ単体でファイル名を含まないパスを返します。dirname()関数は、指定されたパスの親ディレクトリのパスを取得する際に利用します。そのため、dirname(__DIR__)と記述すると、現在のスクリプトがあるディレクトリの「一つ上のディレクトリ」のパスを確実に取得できます。
また、dirname()関数の第二引数に数値($levels)を指定すると、指定した階層数だけ上の親ディレクトリを取得することが可能です。例えば「2」を指定すると2つ上のディレクトリが得られます。これらの機能は、設定ファイルや共通ライブラリのパスを動的に指定するなど、ファイルシステム上の位置関係に基づいて柔軟にパスを構築する際に非常に重要です。パス区切り文字はPHPが自動的にOSに合わせて処理するため、環境依存を気にせず利用できます。
dirname(__FILE__)で現在のディレクトリパスを取得する
1<?php 2 3/** 4 * dirname() 関数は、指定されたパスの親ディレクトリのパスを返します。 5 * __FILE__ は、現在のスクリプトファイルのフルパスとファイル名を含むマジック定数です。 6 */ 7 8// 1. 現在のスクリプトファイル自身のフルパスを取得します。 9// 例: /var/www/html/public/index.php 10$currentFilePath = __FILE__; 11echo "現在のファイルパス: " . $currentFilePath . "\n\n"; 12 13// 2. dirname(__FILE__) を使用して、現在のスクリプトが存在するディレクトリのパスを取得します。 14// これは、現在のディレクトリの絶対パスを返します。 15// 例: /var/www/html/public 16$currentDirectory = dirname($currentFilePath); 17echo "現在のディレクトリ (dirname(__FILE__)): " . $currentDirectory . "\n"; 18 19// 3. dirname() の第二引数 'levels' を使用して、指定した階層数だけ上のディレクトリを取得します。 20// dirname(__FILE__, 2) は、現在のファイルから2階層上のディレクトリのパスを返します。 21// 例: /var/www/html 22$twoLevelsUpDirectory = dirname($currentFilePath, 2); 23echo "2階層上のディレクトリ (dirname(__FILE__, 2)): " . $twoLevelsUpDirectory . "\n"; 24 25// 4. PHP 5.3 以降では、__DIR__ マジック定数を使うと、 26// dirname(__FILE__) と同じく現在のスクリプトのディレクトリパスを直接取得できます。 27// 例: /var/www/html/public 28$currentDirectoryUsingDir = __DIR__; 29echo "現在のディレクトリ (__DIR__): " . $currentDirectoryUsingDir . "\n"; 30 31?>
PHPのdirname()関数は、指定されたパスから親ディレクトリのパスを取得する際に利用されます。この関数は、最初の引数string $pathに処理したいパス文字列を受け取り、オプションの第二引数int $levelsで何階層上のディレクトリを取得するかを指定できます。$levelsを省略した場合、デフォルトで1階層上、つまり直接の親ディレクトリのパスがstring型で戻り値として返されます。
__FILE__は、現在のスクリプトファイル自身のフルパスとファイル名を表すPHPのマジック定数です。これとdirname()関数を組み合わせたdirname(__FILE__)は、現在のスクリプトファイルが存在するディレクトリのパスを取得する一般的な方法です。例えば、/var/www/html/public/index.phpというファイルで実行すると、結果として/var/www/html/publicというパスが得られます。
さらに、dirname(__FILE__, 2)のように第二引数に数値の2を指定すると、現在のファイルから2階層上のディレクトリのパス、例えば/var/www/htmlのような結果を取得できます。また、PHP 5.3以降では__DIR__というマジック定数を使用すると、dirname(__FILE__)と全く同じく現在のスクリプトのディレクトリパスを直接取得することが可能です。これらの機能は、設定ファイルの読み込みや、他のファイルをインクルードする際の基準パスを指定するなど、様々な場面で活用されます。
dirname(__FILE__)は、実行中のPHPスクリプトファイルが存在するディレクトリの絶対パスを返します。初心者は、この関数が相対パスではなく常に絶対パスを返す点に注意が必要です。PHP 5.3以降では、同じく絶対パスを返す__DIR__マジック定数を使用するのがより簡潔で、推奨されています。
dirname()関数の第二引数に2などの数値を指定すると、現在のファイルから指定した階層数だけ上の親ディレクトリの絶対パスを直接取得でき、多階層のファイル構成で便利です。これらの関数や定数は、設定ファイルの読み込みや他のファイルへのパス指定など、ファイルシステム内の相対的な位置関係を基準にパスを構築する際に非常に役立ちます。返されるパスは常に文字列形式で、安全なパス構築の基本として利用できます。
PHP dirname()関数で親ディレクトリを取得する
1<?php 2 3/** 4 * dirname() 関数の使用例 5 * 6 * dirname() 関数は、指定されたパスの親ディレクトリ名を返します。 7 * 主にファイルパスからディレクトリ部分だけを抽出する際に使用されます。 8 * 9 * @param string $path 指定するパス。 10 * @param int $levels 取得したい親ディレクトリの階層数。デフォルトは1です。 11 * @return string 親ディレクトリのパス。 12 */ 13 14// 1. 基本的な使い方: ファイルパスから親ディレクトリを取得 (levels = 1, デフォルト) 15$path1 = '/var/www/html/index.php'; 16$parentDir1 = dirname($path1); 17echo "元のパス: '{$path1}'\n"; 18echo "親ディレクトリ (levels=1): '{$parentDir1}'\n\n"; // 出力: '/var/www/html' 19 20// 2. ディレクトリパスから親ディレクトリを取得 (levels = 1, デフォルト) 21$path2 = '/usr/local/bin/'; 22$parentDir2 = dirname($path2); 23echo "元のパス: '{$path2}'\n"; 24echo "親ディレクトリ (levels=1): '{$parentDir2}'\n\n"; // 出力: '/usr/local' 25 26// 3. ルートパスの場合 (levels = 1, デフォルト) 27$path3 = '/'; 28$parentDir3 = dirname($path3); 29echo "元のパス: '{$path3}'\n"; 30echo "親ディレクトリ (levels=1): '{$parentDir3}'\n\n"; // 出力: '/' 31 32// 4. 相対パスの場合 (levels = 1, デフォルト) 33$path4 = './assets/images/logo.png'; 34$parentDir4 = dirname($path4); 35echo "元のパス: '{$path4}'\n"; 36echo "親ディレクトリ (levels=1): '{$parentDir4}'\n\n"; // 出力: './assets/images' 37 38// 5. levels 引数を使用: 2階層上の親ディレクトリを取得 39$path5 = '/home/user/documents/report.pdf'; 40$grandparentDir = dirname($path5, 2); 41echo "元のパス: '{$path5}'\n"; 42echo "親ディレクトリ (levels=1): '" . dirname($path5) . "'\n"; // 出力: '/home/user/documents' 43echo "2階層上の親ディレクトリ (levels=2): '{$grandparentDir}'\n\n"; // 出力: '/home/user' 44 45// 6. levels 引数とルートパス 46$path6 = '/a/b/c/d/e'; 47$result6 = dirname($path6, 3); 48echo "元のパス: '{$path6}'\n"; 49echo "3階層上の親ディレクトリ (levels=3): '{$result6}'\n\n"; // 出力: '/a/b' 50 51// 7. levels がパスの階層数を超える場合 52$path7 = '/a/b'; 53$result7 = dirname($path7, 5); 54echo "元のパス: '{$path7}'\n"; 55echo "5階層上の親ディレクトリ (levels=5): '{$result7}'\n\n"; // 出力: '/' (ルートまで遡る) 56 57?>
PHPのdirname関数は、指定されたパスから親ディレクトリのパスを取得するために使用されます。ファイルパスからファイル名を取り除き、ディレクトリ部分だけを抽出したい場合や、特定のディレクトリの親ディレクトリを知りたい場合などに活用できます。
この関数は通常、二つの引数を取ります。最初の引数$pathには、親ディレクトリを取得したいファイルまたはディレクトリのパスを文字列で指定します。絶対パス、相対パスのどちらでも指定可能です。パスの末尾にスラッシュが含まれていても、正しく処理されます。二番目の引数$levelsはオプションで、デフォルト値は1です。この引数に数値を指定することで、現在のパスから何階層上の親ディレクトリを取得するかを設定できます。例えば2を指定すると、2階層上の親ディレクトリが返されます。
dirname関数は、処理結果として親ディレクトリのパスを文字列で返します。例えば、/var/www/html/index.phpというパスに対してdirname()を実行すると、/var/www/htmlが返されます。もし/home/user/documents/report.pdfというパスに対し、levels引数に2を指定して実行すると、/home/userが返されます。なお、パスがルートディレクトリ(/)の場合や、指定されたlevelsがパスの階層数を超過した場合は、ルートディレクトリである/が結果として返されるという挙動も持ちます。この関数を理解することで、プログラム内でのファイルやディレクトリのパス操作をより柔軟に行えるようになります。
dirname関数は、指定されたパスから親ディレクトリ名を取り出す機能です。実際にファイルやディレクトリの存在は確認せず、あくまで文字列として親ディレクトリ部分を抽出する機能である点に留意してください。パスの末尾にスラッシュがあっても、一つ上の階層のディレクトリが正しく返されます。ルートパス「/」を指定した場合、戻り値も「/」となります。第二引数levelsで複数階層上の親ディレクトリを指定できますが、パスの深さを超えてもエラーにならず、最終的にルートパス「/」が返されます。相対パスに対しても適切に動作し、常に文字列として結果が返されます。
PHP dirnameで1つ上の親ディレクトリを取得する
1<?php 2 3/** 4 * dirname() 関数の基本的な使い方を示すサンプルコードです。 5 * 指定されたパスから1つ上の親ディレクトリを取得します。 6 * (キーワード: php dirname up one level) 7 */ 8 9// サンプルとして使用するファイルパス 10$filePath = '/var/www/html/public/index.php'; 11 12// dirname() 関数を使って、指定されたパスの1つ上の親ディレクトリを取得します。 13// 第二引数 $levels はデフォルトで 1 なので、1つ上の階層を返します。 14$parentDirectory = dirname($filePath); 15 16echo "元のファイルパス: " . $filePath . PHP_EOL; 17echo "1つ上の親ディレクトリ: " . $parentDirectory . PHP_EOL; // 出力: /var/www/html/public 18 19echo PHP_EOL; 20 21// ディレクトリパスの場合の例 22$directoryPath = '/var/www/html/public/'; 23$parentOfDirectory = dirname($directoryPath); 24 25echo "元のディレクトリパス: " . $directoryPath . PHP_EOL; 26echo "1つ上の親ディレクトリ (ディレクトリパスの場合): " . $parentOfDirectory . PHP_EOL; // 出力: /var/www/html 27 28?>
dirname()関数は、PHPでファイルやディレクトリのパスを操作する際に用いられ、指定されたパスから親ディレクトリのパス文字列を効率的に取得する関数です。システムエンジニアにとって、ファイルの相対的な位置関係を扱う際に非常に役立ちます。
この関数の第一引数 $path には、親ディレクトリを取得したいファイルまたはディレクトリのパスを文字列型で指定します。例えば、/var/www/html/public/index.phpのような絶対パスや、../files/image.jpgのような相対パスを渡すことができます。
第二引数 $levels はオプションの引数で、何階層上の親ディレクトリを取得するかを整数値で指定します。この引数はデフォルトで1が設定されているため、省略した場合は1つ上の親ディレクトリのパスが返されます。もし2を指定すれば、2つ上の親ディレクトリのパスを取得できます。
dirname()関数は、取得された親ディレクトリのパスを文字列として返します。
サンプルコードでは、この関数の基本的な使い方を示しています。まず、/var/www/html/public/index.phpというファイルパスをdirname()に渡すことで、その1つ上の親ディレクトリである/var/www/html/publicが取得されます。次に、/var/www/html/public/というディレクトリパスを渡した場合の例も示されており、その親ディレクトリである/var/www/htmlが取得される様子がわかります。このように、ファイルパスとディレクトリパスのどちらに対しても、適切に親ディレクトリを特定できるため、パス処理の柔軟性が高まります。
dirname関数は、ファイルやディレクトリのパスから1つ上の親ディレクトリのパスを文字列で返します。引数 $path には絶対パス、相対パスのどちらも指定可能です。ディレクトリパスの末尾にスラッシュがあっても、正しく親ディレクトリを判断しますのでご安心ください。例えば、/var/www/html/public/ を指定しても、/var/www/html が返されます。引数にルートディレクトリ / を指定した場合も / を返し、ファイル名のみを指定した場合(例: file.txt)はカレントディレクトリを示す . を返します。この関数は、指定されたパスが存在するかどうかは確認せず、パスの文字列パターンに基づいて計算します。第二引数 $levels を利用すると、1つ上の階層だけでなく、複数階層上の親ディレクトリも取得できますので、必要に応じて活用してください。