しかし残念ながら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 件のコメント:
コメントを投稿