PHP获取完整的服务器名称,包括端口号和协议

时间:2011-09-15 13:04:15

标签: php

在PHP中,是否有可靠以及获取这些内容的好方法:

协议:即http或https Servername:例如本地主机 Portnumber:例如8080

我可以使用$_SERVER['SERVER_NAME']获取服务器名称。

我可以得到协议,但我不认为它是完美的:

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

我不知道如何获取端口号。我使用的端口号不是80 ..它们是8080和8888.

谢谢。

9 个答案:

答案 0 :(得分:30)

查看documentation

我想要$_SERVER['SERVER_PORT']

答案 1 :(得分:5)

$_SERVER['SERVER_PORT']将为您提供当前使用的端口。

答案 2 :(得分:3)

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

答案 3 :(得分:3)

<?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";
}

?>

显示所有端口号。

如果您已经知道端口号,可以这样做,

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

答案 4 :(得分:2)

这是我使用的:

    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;
    }

答案 5 :(得分:1)

 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;

如果你想要

尝试类似的东西

答案 6 :(得分:0)

为什么不像这样得到完整的网址

strtolower(array_shift(explode("/",$_SERVER['SERVER_PROTOCOL'])))."://".$_SERVER['SERVER_NAME'];

或(如果您想要来自HTTP的主机名)

strtolower(array_shift(explode("/",$_SERVER['SERVER_PROTOCOL'])))."://".$_SERVER['HTTP_HOST'];

答案 7 :(得分:0)

没有什么工作在服务器端,在APACHE上出了点问题我无法访问  服务器和我最终通过Javascript重定向到http,这不是理想的解决方案,也许这可以在我的情况下拯救其他人

<script>
if(!window.location.href.startsWith('https')) 
    window.location.href = window.location.href.replace('http','https');
</script>

答案 8 :(得分:0)

从上方编译:

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;
}