2012年4月16日月曜日

[PHP] 現在のURLを取得する

たまに現在のURLを取得したい時がある。
しかし残念ながらPHPに一発で取得する方法は今のところない。
なので、地道にサーバ変数から作っていくことになる。

//link・・・http://mio-koduki.blogspot.jp/2012/04/php-url.html
//返り値・・・成功した場合は現在のURL、失敗した場合はfalse
function get_current_url()
{
    $host=getenv('HTTP_HOST');
    $uri=getenv('REQUEST_URI');
    if(strval($host)===''||strval($uri)==='')
    {
        return false;
    }
    $https=getenv('HTTPS');
    return 'http'.(isset($https)&&strval($https)!==''&&strtolower($https)!='off'?'s':'').'://'.$host.$uri;
}

というふうになる。
ちなみにgetenv()のところはもちろん$_SERVERでも構わないが、
$_SERVERが定義されてない際にE_NOTICEを出さないために使ってる。

また、getenv('HTTPS')HTTPSの判定はPHPの$_SERVERマニュアルを見てみると
スクリプトが HTTPS プロトコルを通じて実行されている場合に 空でない値が設定されます。
注意: ISAPI を IIS で使用している場合は、HTTPS プロトコルを通さないでリクエストが行われたときの値は off となることに注意しましょう。
と書いてあるため、上記のようなチェックにしてある。
ただし、世には「shttp」 とちょっと変わり種や「ftp」などのプロトコルもあるが、
基本必要ではないため「http」と「https」にのみ対応している。

また限定的な場合であるが、特定のSSLアクセラレータを使用しているサーバでは
https通信を行ってもHTTPSに値が設定されない。
その場合は残念ながらPHPではhttps通信をキャッチできない。

ポイントとなる関数
  • getenv ・・・ 環境変数の値を取得する

0 件のコメント:

コメントを投稿