ホームページ  >  記事  >  バックエンド開発  >  PHP で現在のサイト URL プロトコルを確認する方法: この関数は正しいですか?

PHP で現在のサイト URL プロトコルを確認する方法: この関数は正しいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 16:58:02776ブラウズ

 How to Determine the Current Site URL Protocol in PHP: Is this Function Correct?

PHP サイト URL 取得プロトコル - http と https

質問:

ユーザーが、現在のサイト 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) を効果的に決定できます:

  • $_SERVER['HTTPS'] が空でなく、'off に等しくない場合】 '
  • $_SERVER['SERVER_PORT'] が 443 に等しい場合

ただし、同じ結果を達成するより簡潔な方法があります:

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。