PHP判断请求协议是http还是https
封面图
•
2025-10-07
•
PHP
162
0
0
0
在 PHP 中,可以通过检查 `$_SERVER` 超全局数组中的某些变量来判断当前请求是使用 **HTTP** 还是 **HTTPS** 协议。以下是几种常见的方法: --- ### ✅ 方法一:使用 `$_SERVER['HTTPS']` ```php if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on') { echo "当前请求是 HTTPS"; } else { echo "当前请求是 HTTP"; } ``` > 注意:有些服务器(如 Nginx)可能会将 `HTTPS` 设置为 `1` 而不是 `'on'`,所以可以加上更宽松的判断: ```php if (isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] === 'on' || $_SERVER['HTTPS'] === '1')) { echo "HTTPS"; } else { echo "HTTP"; } ``` --- ### ✅ 方法二:使用 `$_SERVER['SERVER_PORT']` ```php if ($_SERVER['SERVER_PORT'] == 443) { echo "HTTPS"; } else { echo "HTTP"; } ``` > - HTTP 默认端口是 `80` > - HTTPS 默认端口是 `443` --- ### ✅ 方法三:使用 `$_SERVER['REQUEST_SCHEME']`(推荐) ```php $scheme = $_SERVER['REQUEST_SCHEME']; if ($scheme === 'https') { echo "HTTPS"; } else { echo "HTTP"; } ``` > `REQUEST_SCHEME` 是 PHP 5.4+ 引入的,表示请求的协议(`http` 或 `https`),是最准确的方式。 --- ### ✅ 方法四:结合 `HTTP_X_FORWARDED_PROTO`(适用于代理或负载均衡) 如果你的应用部署在反向代理(如 Nginx、Apache、Cloudflare)后面,可能需要检查 `HTTP_X_FORWARDED_PROTO`: ```php if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { echo "HTTPS"; } else { echo "HTTP"; } ``` > 通常配合 `$_SERVER['HTTPS']` 使用: ```php $protocol = isset($_SERVER['HTTP_X_FORWARDED_PROTO']) ? $_SERVER['HTTP_X_FORWARDED_PROTO'] : $_SERVER['REQUEST_SCHEME']; if ($protocol === 'https') { echo "HTTPS"; } else { echo "HTTP"; } ``` --- ### ✅ 总结推荐方式 ```php if (isset($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] === 'https') { echo "HTTPS"; } else { echo "HTTP"; } ``` 这种方式最可靠,适用于大多数服务器环境。 --- 如果你有特定的服务器配置(如 Nginx、Apache、Cloudflare 等),也可以告诉我,我可以提供更具体的判断方式。
上一篇:
php实现基于确定有穷自动机算法的铭感词过滤
下一篇:
PHP处理mysql事务嵌套
标题录入,一次不能超过6条
返回顶部
留言
留言
评论