PHPで、HTTP通信かHTTPS通信(SSL通信)かを判断するためにはどうすればいいのか、下記に記述します。
意外と簡単に判断できますが、Webサーバの環境によって判断の仕方が異なるのは厄介ですね。。。
サンプルプログラム
function is_ssl () { // Apache if ( isset($_SERVER['HTTPS']) ) { return ( $_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === '1' ) ? true : false ; // IIS } else if ( isset($_SERVER['SSL']) ) { return ( $_SERVER['SSL'] === 'on' ) ? true : false ; // リバースプロキシ (nginx 等) } else if ( isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ) { return ( strtolower($_SERVER['HTTP_X_FORWARDED_PROTO']) === 'https' ) ? true : false ; // リバースプロキシ (nginx 等) } else if ( isset($_SERVER['HTTP_X_FORWARDED_PORT']) ) { return ( $_SERVER['HTTP_X_FORWARDED_PORT'] === '443' ) ? true : false ; // ポート番号がSSLの番号の場合 } else if ( isset($_SERVER['SERVER_PORT']) ) { return ( $_SERVER['SERVER_PORT'] === '443' ) ? true : false ; } // 以上の条件に該当しない場合は、HTTP通信と判断する return false; }