絶対パスの取得
ファイルの絶対パスを取得したい場合、
ファイルの絶対パス取得
ファイルの絶対パスを取得する場合、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" ではない
ファイルパスから親ディレクトリのパスを取得
パスに "." や、”..”が指定される可能性がある場合、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'