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.
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.
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
Alix Axel
$protocol = isset($_SERVER['HTTPS']) && (strcasecmp('off', $_SERVER['HTTPS']) !== 0);
$hostname = $_SERVER['SERVER_ADDR'];
$port = $_SERVER['SERVER_PORT'];
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
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