pict-php.png プログラム中でよく使うPATHとURLを扱うPHP関数の覚え書きです。ファイル名のみ取り出したり、拡張子を取り出したりといったように様々な用途で頻繁に利用します。

PATHを扱う関数


1. パスの指定要素を取り出す

pathinfo
http://www.php.net/manual/ja/function.pathinfo.php

pathinfo($path, [取り出す要素]);
パスを構成要素に分割して指定された要素を返します。
  1. <?php
  2. $path = "/www/html/img/sample.jpg";
  3. echo pathinfo($path, PATHINFO_DIRNAME);
  4. echo pathinfo($path, PATHINFO_BASENAME); // 拡張子を含むファイル名
  5. echo pathinfo($path, PATHINFO_EXTENSION); // 拡張子(.は含まない)
  6. echo pathinfo($path, PATHINFO_FILENAME); // 拡張子を含まないファイル名
  7. ?>
この出力結果は以下のようになります。
  1. /www/html/img
  2. sample.jpg
  3. jpg
  4. sample
注: PATHINFO_FILENAMEはPHP 5.2以降で有効
第2パラメータの取り出す要素を省略した場合には、全ての要素を含む連想配列を戻します。
  1. <?php
  2. $path = "/www/html/img/sample.jpg";
  3. $path_parts = pathinfo($path);
  4. print_r($path_parts);
  5. echo $path_parts['dirname'], "\n";
  6. echo $path_parts['basename'], "\n";
  7. echo $path_parts['extension'], "\n";
  8. echo $path_parts['filename'], "\n"; // PHP 5.2.0 以降
  9. ?>
この出力は以下のようになります。
  1.   [dirname] => /www/html/img
  2.   [basename] => sample.jpg
  3.   [extension] => jpg
  4.   [filename] => sample
  5. )

これ以外にもdirname(), basename()という関数があり、これがpathinfo(PATHINFO_DIRNAME)やpathinfo(PATHINFO_BASENAME)と同じ結果を戻します。basename()は拡張子がわかっているような場合に第2引数に拡張子を指定すると拡張子をのぞいたpathinfo(PATHINFO_FILENAME)と同じ値を返してくれます。
pathinfo以外で拡張子のみを取り出す関数はないようです。以下のようにすれば取り出せます。
  1. <?php
  2. // pathinfo()を使わないでファイルの拡張子を取り出す方法
  3. $path = "/www/html/img/sample.jpg";
  4. echo array_pop(explode('.', basename($path))); // どっちでも
  5. echo end(explode('.', basename($path)));       // 結果は同じ
  6. ?>
注: array_pop()もend()もどちらも配列の最後の要素を返します。
出力結果は以下のようになります。
  1. jpg
  2. jpg

dirname
http://www.php.net/manual/ja/function.dirname.php
basename
http://www.php.net/manual/ja/function.basename.php

2.相対パスを絶対パスを変換する

realpath
http://www.php.net/manual/ja/function.realpath.php

realpath()は相対パスを絶対パスを変換してくれます。「.」や「..」、シンボリックリンクなどを含まない絶対パスを返します。ファイルやパスが存在しない場合にはFALSEが返ります。


URLを扱う関数


pathinfo()のURL版のような関数がparse_url()関数です。

parse_url
http://www.php.net/manual/ja/function.parse_url.php

parse_url($path, [取り出す要素])
絶対URLを構成要素に分割して指定した要素を返します。第2パラメータの要素を省略した場合には全要素を含む連想配列を返します。
  1. <?php
  2. $url = 'http://www.example.com/test/download.php?file=sample.jpg';
  3. ?>
この出力は以下とようになります。
  1. (
  2.     [scheme] => http
  3.     [host] => www.example.com 
  4.     [user] =>
  5.     [pass] =>
  6.     [path] => /test/download.php
  7.     [query] => file=sample.jpg
  8.     [fragment] =>
  9. )
取り出す要素としては以下のものが指定可能です。
PHP_URL_SCHEME、 PHP_URL_HOST、PHP_URL_PORT、 PHP_URL_USER、PHP_URL_PASS、 PHP_URL_PATH、PHP_URL_QUERY、PHP_URL_FRAGMENT

注意:この関数は相対URLでは正しく動作しません。絶対URLを使いましょう。


 

まだ投票はありません