オーダーメイドコース
icon
icon

PHPでhttpかhttpsかを判定する方法を現役エンジニアが解説【初心者向け】

初心者向けにPHPでhttpかhttpsかを判定する方法について解説しています。HTTPと違い、HTTPSではSSL(Secure Socket Layer)というプロトコルが使用されており、通信内容が暗号化されています。PHPでhttpsかどうか判定するには、$_SERVER変数をつかって判断します。

テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日  調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名  調査手法:インターネット調査

今回は、PHPでhttpかhttpsかを判定する方法について、TechAcademyのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

 

PHPについてそもそもよく分からないという方は、PHPとは何なのか解説した記事を読むとさらに理解が深まります。

 

なお本記事は、TechAcademyのオンラインブートキャンプ、PHP/Laravel講座の内容をもとに紹介しています。

 

田島悠介

今回は、PHPに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

PHPでhttpかhttpsかを判定する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

httpとhttpsの違いとは

この記事では、PHPでhttpかhttpsかを判定する方法を紹介します。

まずは、httpとhttpsの違いについてついて説明していきます。

HTTPとは「Hyper Text Transfer Protocol(ハイパーテキストトランスファープロトコル)」のことです。

ホームページのデータは文字だけでなく画像や動画などがあります。これらのデータをサーバとクライアントの間で通信するときの通信規約(プロトコル)がHTTPです。

HTTPに対してHTTPSには文字列の最後に「S」が付いています。この最後の「S」は「Secure(セキュア)」の「S」です。HTTPSもHTTPと同じプロトコルの一つですが、HTTPSではSSL(Secure Socket Layer)というプロトコルが使用されています。

SSLのプロトコルを使用することによりその通信の内容は暗号化されます。URLがhttpかhttpsかで何が変わるかというと、通信内容が暗号化されているか、されていないかの違いとなります。

URLがhttp://で始まるものは暗号化されておらず、URLがhttps://で始まるものは暗号化されているものとなります。暗号化されているということは、通信を行う際の安全性が高まり、通信経路の盗聴や改ざんによる、詐欺被害や、ハッキング、無線LAN経由でのサイバー攻撃などを受けにくくなります。

反対にHTTP通信を行うことは、そのような被害を受けやすく、HTTPS通信を行うことが推奨されています。
 

httpsを判定する方法

上記の通り、HTTPでの通信はセキュリティ面の安全性が不十分のため、もしユーザーがHTTP通信を行った場合、HTTPS通信に変換するような処理を行ったりすることができ、より安全にシステムの利用、運用を行えます。

それでは、まずはユーザーがHTTP・HTTPSのどちらでシステムにアクセスしているか半別する方法を紹介します。

echo $_SERVER['HTTP'];

通信プロトコルの内容を知りたい時にPHPでは基本的に、$_SERVER というスーパーグローバル変数にアクセスすることで値を取得できます。

上記では$_SERVERにHTTPという文字列を指定することで、通信の内容がHTTP通信であるかを確認できます。

もし、HTTP通信であった場合は以下の結果となります

'on'

反対にHTTP通信でなかった場合は「NULL」になります。

また、$_SERVERにHTTPSの文字列を渡すことで、その通信内容がHTTPSかどうかを判別できます。
 

[PR] PHPを学んで未経験からWebエンジニアを目指す方法とは

実際に書いてみよう

それでは、上記の判定方法を利用して、HTTP通信でシステムにアクセスされた場合、

HTTPS通信に変換するようなソースを見ていきましょう。

<?php
// HTTPS通信でなかった場合HTTPS通信でリダイレクトする
if (empty($_SERVER['HTTPS'])) {
header("Location: https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
exit;
}

上記のソースでは、まず、通信内容がHTTPSかどうかを判定し、そうでなかった場合は、https://で始まるURLに変換し、リダイレクト(自動的に指定したURLに転送)するという内容になっています。

このような処理を行うことで、HTTPS通信による安全なシステムのアクセスできます。
 

筆者プロフィール

平野大輝(ひらのだいき)

スキル:PHP・Java・JavaScriptを用いて様々なアプリを開発するWebエンジニア。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でも、PHPやフレームワークのLaravelを使ってWebアプリケーション開発を習得できる、オンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。