2012年2月20日月曜日

[PHP] 絶対パスかどうか調べる

絶対パスかどうか調べる必要があったのでなんとなく。
正規表現で済ませてもいいのだけれども、
http以外にもshttpやhttps、ftpなどその他派生まで考慮してるとぐだぐだなるため、
PHPのデフォルトに任せることにしたのです。

対象はPHP5.2以上

//link・・・http://mio-koduki.blogspot.com/2012/02/php.html
//第一引数・・・絶対パスかどうか調べたいパス
//返り値・・・絶対パスであればtrue、そうでなければfalse
function is_absolute($url)
{
    return
    ($purl=parse_url($url))!==false
    &&isset($purl['scheme'])
    &&isset($purl['host'])
    &&filter_var
    (
        $url,
        FILTER_VALIDATE_URL,
        FILTER_FLAG_PATH_REQUIRED,
    );
}

ちなみにhttpだけなどの条件をつけるなら

//link・・・http://mio-koduki.blogspot.com/2012/02/php.html
//第一引数・・・絶対パスかどうか調べたいパス
//返り値・・・絶対パスであればtrue、そうでなければfalse
function is_absolute_only_http($url)
{
    return
    ($purl=parse_url($url))!==false
    &&isset($purl['scheme'])
    &&$purl['scheme']=='http'
    &&isset($purl['host'])
    &&filter_var
    (
        $url,
        FILTER_VALIDATE_URL,
        FILTER_FLAG_PATH_REQUIRED,
    );
}

こんな感じ。

ポイントとなる関数
  • parse_url ・・・ URL を解釈し、その構成要素を返す
  • filter_var ・・・ 指定したフィルタでデータをフィルタリングする

0 件のコメント:

コメントを投稿