2010-10-28 60 views
35

如何判斷一個php頁面是通過http還是https訪問的?PHP:HTTP或HTTPS?

+1

如果一個額外的服務器變量將對了解更多關於PHP配置(例如在哪個服務器上運行)有用。 – Bruno 2010-10-28 12:44:57

+0

下面只回答檢查$ _SERVER [「HTTPS」]的答案不完整。請參閱http://stackoverflow.com/questions/1175096/how-to-find-out-if-youre-using-https-without-serverhttps獲取完整答案。 – AnthonyVO 2017-01-28 14:28:23

回答

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

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

這些應該都工作

+0

在第二個版本中,HTTPS必須以大寫字母表示。 – Tim 2014-10-31 07:31:09

41

如果請求與HTTPS送你將在$_SERVER超全局一個額外的參數 - $ _ SERVER [「HTTPS」]。你可以檢查它是否設置或不

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

這種方法的問題在於它並不總是有效,正如'$ _SERVER'文檔所說:「這個數組中的條目是由Web服務器創建的,並不能保證每個Web服務器都能提供這些內容;服務器可能會省略一些,或者提供這裏沒有列出的其他人。「 – Bruno 2010-10-28 13:47:33

+0

如果服務器配置正確,應該不成問題。最好先嚐試這種方法,如果失敗,就使用黑客方法 – 2010-10-28 14:14:33

+0

@EranGalperin,你錯過了這一點。允許正確配置的服務器省略$ _SERVER條目。它在文檔中明確允許。 – Pacerier 2015-03-06 03:11:54

0

您應該能夠發送通過檢查$_SERVER['HTTPS']的值(它應該僅在使用https時設置)來執行此操作。

請參閱http://php.net/manual/en/reserved.variables.server.php

+0

因此,如果我使用HTTPS並且服務器不創建$ _SERVER ['HTTPS'],那麼這是否意味着它是假的HTTPS? – PSyLoCKe 2013-10-14 01:08:28

35

如果您的請求是通過HTTPS發送您將有一個名爲 'HTTPS'

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

在IIS中使用ISAPI時應該使用此答案。 – 2014-09-18 10:53:19