[PHP]HTTPとHTTPSの切替処理

Read More

PHPです


ブラウザでページを表示するのに利用されているのがHTTPです。
これにSSL技術による暗号化機能を付与したものをHTTPSと言います。
アドレスの先頭がhttps://になっているものがHTTPSで通信しているものです。


さてSSL通信を行う際の注意点は、そのページ内で読み込む全てのデータはHTTPSで読み込まなくてはならない点です。

例えば、外部ファイルであるcssやjsなんかもそうだけど、ページ内で使う画像なんかも全てHTTPSでなくてはなりません。
# これをしておかないと、一部のページが暗号化されていない旨の警告が出る


さて、ここに一つ画像を表示するURIがあるとします。
http://hoge.com/images/abc.jpg

これをHTTPSに対応させるには
https://hoge.com/images/abc.jpg
にすれば良いわけです。これを絶対パスと言います。
# これに対し相対パスは、基本となるURLからの位置を示したimages/abc.jpgとなる。
# 相対パスのデメリットが嫌いなので相対パスは余り使いません。
# なので今回は相対パスについては触れません。


HTTPとHTTPSを動的に切り替える処理の例
<?php
define('HTTP_IMG_URL', 'http://hoge.com/images');
define('HTTPS_IMG_URL, 'https://hoge.com/images');

if($_SERVER['HTTPS']){$HTTP='HTTPS';}else{$HTTP='HTTP';};
?>

<div><img src="<?=constant("${HTTP}_IMG_URL")?>/abc.jpg" /></div>

予めHTTP、HTTPS両方の定数を定義しておきます。
サーバから返される値を元に、要求されたページがHTTP、HTTPSのどちらのものかを判定し結果を$HTTPに格納します。
constantで動的に定数を参照します。

こうすることで処理を書き換えることなく両方の通信に耐えることができます



なおこの仕組みは画像に限らずjsやcssを読み込むのにも使えます