2010-10-28 10 views
35

Jak sprawdzić, czy strona php była dostępna przez http lub https?PHP: HTTP lub HTTPS?

+1

Jeśli przydałoby się dowiedzieć więcej o twojej konfiguracji PHP (na której serwerze działa, na przykład). – Bruno

+0

Poniższe odpowiedzi, które odnoszą się tylko do sprawdzania $ _SERVER ["HTTPS"], nie są kompletne. Proszę zobaczyć http://stackoverflow.com/questions/1175096/how-to-find-out-if-youre-using-https-without-serverhttps dla pełnej odpowiedzi. – AnthonyVO

Odpowiedz

13
$protocol = strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https'?'https':'http'; 

$protocol = isset($_SERVER["HTTPS"]) ? 'https' : 'http'; 

te powinny zarówno praca

+0

W drugiej wersji protokół HTTPS musi być pisany wielkimi literami. – Tim

41

Jeżeli wniosek został wysłany z HTTPS trzeba będzie dodatkowy parametr w $_SERVER superglobalną - $ _SERVER [ 'HTTPS']. Można sprawdzić, czy jest ona ustawiona czy nie

if(isset($_SERVER['HTTPS'])) { 
+2

Problem z tym podejściem polega na tym, że nie zawsze działa, ponieważ dokumentacja "$ _SERVER" mówi: "Wpisy w tej tablicy są tworzone przez serwer sieciowy. Nie ma gwarancji, że każdy serwer WWW dostarczy dowolne z tych ; serwery mogą pomijać niektóre lub dostarczać inne niewymienione tutaj. " – Bruno

+0

Jeśli serwer jest poprawnie skonfigurowany, nie powinien stanowić problemu. Lepiej najpierw wypróbować to podejście i zastosować ataki hakerskie, jeśli się nie powiedzie. –

+0

@EranGalperin, Tęskniłeś za sednem. Prawidłowo skonfigurowany serwer może pominąć wpisy $ _SERVER. Jest to wyraźnie dozwolone w dokumentacji. – Pacerier

35

Jeśli żądanie jest wysyłane przez HTTPS będzie mieć dodatkową zmienną serwera o nazwie 'https'

if (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') { //HTTPS } 
+1

Należy użyć tej odpowiedzi podczas korzystania z interfejsu ISAPI z usługami IIS. –

Powiązane problemy