絶対パスの取得

ファイルの絶対パスを取得したい場合、

ファイルの絶対パス取得

ファイルの絶対パスを取得する場合、realpath関数が使用できます。 相対パスからも絶対パスが取得できます。

<?php
$myPath = __FILE__;             //  /home/php/basic/test.php
$rpath = realpath($myPath);     //  $rpath => '/home/php/basic/test.php'

realpath関数は "./test.php" のような相対パスからも絶対パスを返します。

<?php
$dotPath = "./test.php";        //  絶対パスは /home/php/basic/test.php
$rpath = realpath($myPath);     //  $rpath => '/home/php/basic/test.php'

注意. パスにシンボリックリンクが含まれる場合、シンボリックリンクのパスでなく実際の絶対パスになります。

<?php
//  /etc/init.d が /etc/rc.d/init.d へのシンボリックリンクになっている場合
//  シンボリックリンクのパスでなく、実態の /etc/rc.d/init.d/sshd になります。
$rpath = realpath("/etc/init.d/sshd");   // $rpath => '/etc/rc.d/init.d/sshd'

実行中のPHPファイルの絶対パス取得

現在実行されているPHPファイルの絶対パスは、PHPが自動的に定義する定数 "__FILE__" に保存されています。 シンボリックリンクが含まれている場合、シンボリックリンクでなく、実際の絶対パスが保存されています。 下記のような内容のファイルを/etc/init.d/test.phpとして保存します。

<?php  echo __FILE__, "\n";
これを実行すると __FILE__ にtest.phpの絶対パスが定義されています。
php /etc/init.d/test.php
/etc/rc.d/init.d/test.php   //  シンボリックリンクがある"/etc/init.d/test.php" ではない

PHP マニュアル・自動的に定義される定数

ファイルパスから親ディレクトリのパスを取得

パスに "." や、”..”が指定される可能性がある場合、realpath関数でフルパスを 取得してから、dirname関数や、pathinfo関数のPATHINFO_DIRNAMEで親ディレクトリの パスを取得します。

dirname関数

変数に入った文字列からディレクトリ部分を取り出します。 相対パスの場合はフルパスでなく、相対パスの文字列になります。

<?php
$myPath = __FILE__;              //  /home/php/basic/test.php
$dirname = dirname($myPath);     // $dirname => '/home/php/basic'

相対バスの場合は、相対パスが返ってきます。

<?php
$dotPath = "./test.php";         // 絶対パスは /home/php/basic/test.php
$dirname = dirname($myPath);     // $dirname => '.'

PATHINFO_DIRNAME

PHPでは、ファイル名を除いたディレクトリのパスを取得したい場合、pathinfo関数でPATHINFO_DIRNAMEを指定します。 取得できるパスの最後は、”/”を除いたものになります。

<?php
$myPath = __FILE__;                              //  /home/php/basic/test.php
$dirname = pathinfo($myPath, PATHINFO_DIRNAME);  //  $dirname => '/home/php/basic'

$dotPath = "./test.php";                         //  /home/php/basic/test.php
$dirname = pathinfo($dotPath, PATHINFO_DIRNAME);  //  $dirname => '.'

相対パスから取得

realpath関数でファイルのフルパスを取得し、そのフルパスからdirname関数で親ディレクトリのパスを取得します。

<?php
$dotPath = "./test.php";
$rpath = realpath($dotPath);
$dirname = dirname($rpath);       // $dirname => '/home/php/basic'

ディレクトリパスを含まないファイル名

PHPのpathinfo関数では、ファイル名に関して、以下のような関係になります。

PATHINFO_BASENAME = PATHINFO_FILENAME + "." + PATHINFO_EXTENSION

注意. PATHINFO_FILENAMEはPHP5.2.0に追加されたので、5.2.0未満では使用できません。

ファイル名のみの取得

pathinfo関数で拡張子を含んだファイル名を取得する場合、PATHINFO_BASENAMEを指定します。 ファイル名が"test.php"の場合、取得できるのは"test.php"になります。

<?php
$myPath = __FILE__;                            //  /home/php/basic/test.php
$basename = pathinfo($myPath, PATHINFO_BASENAME);   // $basename => 'test.php'

拡張子を除いたファイル名を取得

pathinfo関数で拡張子を除いたファイル名を取得する場合、PATHINFO_FILENAMEを指定します。 ファイル名が"test.php"の場合、取得できるのは"test" のようなファイル名から拡張子( ".php" )を除いた文字列になります。

<?php
$myPath = __FILE__;                            //  /home/php/basic/test.php
$filename = pathinfo($myPath, PATHINFO_FILENAME);   // $filename => 'test'

注意. これはPHP バージョン5.2.0で追加されました。

拡張子のみを取得

拡張子のみを取得したい場合、pathinfo関数でPATHINFO_EXTENSIONを指定します。 ファイル名が"test.php"の場合、取得できるのは"php"のようなドットを除いた文字列になり

<?php
$myPath = __FILE__;                            //  /home/php/basic/test.php
$ext = pathinfo($myPath, PATHINFO_EXTENSION);	// $ext => 'php'

basename関数でファイル名のみを取得

ファイル名の取得はbasename関数でも可能です。basename関数は、拡張子を含んだファイル名を返します。

<?php
$dotPath = "./test.php";            //  /home/php/basic/test.php
$basename = basename($dotPath);     // $basename => 'test.php'