2010-10-28 15 views
35

Wie kann ich feststellen, ob auf eine PHP-Seite über http oder https zugegriffen wurde?PHP: HTTP oder HTTPS?

+1

Wenn wäre nützlich, um mehr über Ihre PHP-Konfiguration zu erfahren (auf welchem ​​Server sie zum Beispiel läuft). – Bruno

+0

Die folgenden Antworten beziehen sich nur auf die Überprüfung von $ _SERVER ["HTTPS"] sind nicht vollständig. Eine vollständige Antwort finden Sie unter http://stackoverflow.com/questions/1175096/how-to-find-out-if-youre-using-https-without-serverhttps. – AnthonyVO

Antwort

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

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

Diese sollten beide arbeiten

+0

In der zweiten Version muss HTTPS in Großbuchstaben sein. – Tim

41

Wenn die Anforderung mit HTTPS gesendet wurde Sie in der $_SERVER Superglobal einen zusätzlichen Parameter haben - $ _SERVER [ 'HTTPS']. Sie können prüfen, ob es gesetzt ist oder nicht

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

Das Problem mit diesem Ansatz ist, dass es nicht immer funktioniert, wie die '$ _SERVER'-Dokumentation sagt:" Die Einträge in diesem Array werden vom Webserver erstellt. Es gibt keine Garantie, dass jeder Webserver diese bereitstellen wird Server können einige auslassen oder andere bereitstellen, die hier nicht aufgeführt sind. " – Bruno

+0

Wenn der Server richtig konfiguriert ist, sollte dies kein Problem sein. Besser, diesen Ansatz zuerst zu versuchen und auf Hacks zurückzugreifen, wenn es scheitert –

+0

@EranGalperin, Sie vermissen den Punkt. Ein ordnungsgemäß konfigurierter Server darf $ _SERVER-Einträge weglassen. Es ist ausdrücklich in der Dokumentation erlaubt. – Pacerier

0

Sie sollten in der Lage sein, gesendet wurde Tun Sie dies, indem Sie den Wert von $_SERVER['HTTPS'] überprüfen (es sollte nur bei Verwendung von https gesetzt werden).

Siehe http://php.net/manual/en/reserved.variables.server.php.

+0

also, wenn ich HTTPS benutze und der Server das $ _SERVER ['HTTPS'] nicht erzeugt, heißt das, dass es ein gefälschtes HTTPS ist? – PSyLoCKe

35

Wenn Ihre Anfrage per HTTPS gesendet wird, müssen Sie einen zusätzlichen Server-Variable namens 'HTTPS'

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

Sollte diese Antwort verwenden, wenn Sie ISAPI mit IIS verwenden. –