PHP obtiene el nombre completo del servidor, incluido el número de puerto y el protocolo

1 minuto de lectura

En PHP, ¿hay un de confianza y buena manera de conseguir estas cosas:

Protocolo: es decir, http o https Nombre del servidor: por ejemplo, localhost Número de puerto: por ejemplo, 8080

Puedo obtener el nombre del servidor usando $_SERVER['SERVER_NAME'].

Puedo obtener el protocolo, pero no creo que sea perfecto:

    if(strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,5))=='https') {
        return "https";
    }
    else {
        return "http";
    }

Sin embargo, no sé cómo obtener el número de puerto. Los números de puerto que estoy usando no son 80… son 8080 y 8888.

Gracias.

  • print_r($_SERVER) y mira lo que te da.

    – Jon

    15 de septiembre de 2011 a las 13:07

  • estoy usando el reenvío de puerto CLI de Vue localmente, así que para mí el correcto fue $_SERVER['HTTP_X_FORWARDED_PORT']

    – dave

    17 de noviembre a las 15:40

Avatar de usuario de Jonnix
jonnix

Echa un vistazo a la documentación.

Usted quiere $_SERVER['SERVER_PORT'] Pienso.

  • si ($_SERVIDOR[‘SERVER_PORT’] != ‘443’) { $URL = ‘https://’.$_SERVIDOR[‘SERVER_NAME’].$_SERVIDOR[‘REQUEST_URI’]; encabezado (“ubicación: $ URL”); ?> }

    –Mohamed Saqib Rajput

    6 de noviembre de 2015 a las 7:14

$_SERVER['SERVER_PORT'] le dará el puerto utilizado actualmente.

avatar de usuario de sbrbot
sbrbot

La función que devuelve la información completa del protocolo-servidor-puerto:

function getMyUrl()
{
  $protocol = (!empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on' || $_SERVER['HTTPS'] == '1')) ? 'https://' : 'http://';
  $server = $_SERVER['SERVER_NAME'];
  $port = $_SERVER['SERVER_PORT'] ? ':'.$_SERVER['SERVER_PORT'] : '';
  return $protocol.$server.$port;
}

Esto es lo que uso:

    function my_server_url()
    {
        $server_name = $_SERVER['SERVER_NAME'];

        if (!in_array($_SERVER['SERVER_PORT'], [80, 443])) {
            $port = ":$_SERVER[SERVER_PORT]";
        } else {
            $port="";
        }

        if (!empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on' || $_SERVER['HTTPS'] == '1')) {
            $scheme="https";
        } else {
            $scheme="http";
        }
        return $scheme.'://'.$server_name.$port;
    }

<?php

$services = array('http', 'ftp', 'ssh', 'telnet', 'imap', 'smtp', 'nicname', 'gopher', 'finger', 'pop3', 'www');

foreach ($services as $service) {
    $port = getservbyname($service, 'tcp');
    echo $service . ":- " . $port . "<br />\n";
}

?>

Esto es mostrar todos los números de puerto.

Si ya conoce el número de puerto, puede hacer esto,

echo  getservbyport(3306, "http");   // 80

Avatar de usuario de Alix Axel
Alix Axel

$protocol = isset($_SERVER['HTTPS']) && (strcasecmp('off', $_SERVER['HTTPS']) !== 0);
$hostname = $_SERVER['SERVER_ADDR'];
$port = $_SERVER['SERVER_PORT'];

Avatar de usuario de Kristian
cristian

 if(strtolower(substr($_SERVER["SERVER_PROTOCOL"],0,4))=='http') {
        $strOut = sprintf('http://%s:%d', 
                       $_SERVER['SERVER_ADDR'],
                       $_SERVER['SERVER_PORT']);
    } else {
         $strOut = sprintf('https://%s:%d', 
                       $_SERVER['SERVER_ADDR'],
                       $_SERVER['SERVER_PORT']);
    }

 return $strOut;

Prueba algo asi si quieres

¿Ha sido útil esta solución?