質問:
ユーザーが、現在のサイト URL プロトコルに準拠していますが、SSL がないため、HTTPS で動作するかどうかは不明です。彼らは関数が正しいかどうかを尋ねます:
function siteURL() { $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://"; $domainName = $_SERVER['HTTP_HOST'].'/'; return $protocol.$domainName; } define( 'SITE_URL', siteURL() );
また、関数を次のように単純化できるかどうかも疑問に思います:
function siteURL() { $protocol = 'http://'; $domainName = $_SERVER['HTTP_HOST'].'/' return $protocol.$domainName; } define( 'SITE_URL', siteURL() );
答え:
提供された関数は正しく、次の条件に基づいてプロトコル (http または https) を効果的に決定できます:
ただし、同じ結果を達成するより簡潔な方法があります:
if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') { $protocol = 'https://'; } else { $protocol = 'http://'; }
このコード スニペットは、$_SERVER['HTTPS'] の存在とその値が 'on' または 1 であるかどうかの両方をチェックします。また、$_SERVER['HTTP_X_FORWARDED_PROTO'] の存在とその値が 'https' かどうかもチェックします。 '。このシナリオは、Web サイトが HTTPS を使用しているが、$_SERVER['HTTPS'] 経由でプロトコルに直接アクセスできない場合に発生します。
以上がPHP で現在のサイト URL プロトコルを確認する方法: この関数は正しいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。