1. 絶対パスの取得
  2. ファイルパスから親ディレクトリのパスを取得
  3. ディレクトリパスを含まないファイル名

絶対パスの取得

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

  • ファイルの絶対パス取得

  • ファイルの絶対パスを取得する場合、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'