thinkphp icon indicating copy to clipboard operation
thinkphp copied to clipboard

is_ssl() 判断 https 的兼容问题

Open kiral6 opened this issue 9 years ago • 1 comments

有时候网站用了 cdn 前端是 https,但实际运行 php 的服务器是 http 的,这个时候 is_ssl 会认为 url 是 http 协议。

这种情况一般可以通过 X_FORWARDED_PROTO 做判断,建议修正代码如下:

function is_ssl() { if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){ return true; }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) { return true; }elseif($_SERVER['HTTP_X_FORWARDED_PROTO']=='https'){ return true; } return false; }

kiral6 avatar Aug 02 '16 09:08 kiral6

额,代码片段忘记排版了,重新发一个。

function is_ssl() {
    if(isset($_SERVER['HTTPS']) && ('1' == $_SERVER['HTTPS'] || 'on' == strtolower($_SERVER['HTTPS']))){
        return true;
    }elseif(isset($_SERVER['SERVER_PORT']) && ('443' == $_SERVER['SERVER_PORT'] )) {
        return true;
    }elseif($_SERVER['HTTP_X_FORWARDED_PROTO']=='https'){
        return true;
    }
    return false;
}

kiral6 avatar Aug 02 '16 09:08 kiral6