2010-10-28 23 views
35

¿Cómo puedo saber si se accedió a una página php a través de http o https?PHP: HTTP o HTTPS?

+1

Si Sería útil saber más sobre su configuración de PHP (en qué servidor se está ejecutando, por ejemplo). – Bruno

+0

Las respuestas a continuación que solo se refieren a la comprobación $ _SERVER ["HTTPS"] no están completas. Consulte http://stackoverflow.com/questions/1175096/how-to-find-out-if-youre-using-https-without-serverhttps para obtener una respuesta completa. – AnthonyVO

Respuesta

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

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

Estos deben tanto el trabajo

+0

En la segunda versión, HTTPS debe estar en mayúsculas. – Tim

41

Si la solicitud se envía con HTTPS tendrá un parámetro adicional en el $_SERVER superglobal - $ _SERVER [ 'HTTPS']. Puede comprobar si se establece o no

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

El problema con este enfoque es que no siempre funciona, ya que la documentación '$ _SERVER' dice:" Las entradas en este conjunto son creadas por el servidor web. No hay garantía de que cada servidor web proporcione alguno de estos ; los servidores pueden omitir algunos, o proporcionar otros que no se enumeran aquí ". – Bruno

+0

Si el servidor está configurado correctamente, no debería ser un problema. Es mejor probar este enfoque primero y recurrir a hacks si falla –

+0

@EranGalperin, Te estás perdiendo el punto. Un servidor configurado correctamente puede omitir las entradas $ _SERVER. Está explícitamente permitido en la documentación. – Pacerier

35

Si su solicitud es enviada por HTTPS que tendrá una variable de servidor adicional llamado 'HTTPS'

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

Debería usar esta respuesta cuando use ISAPI con IIS. –