在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.
谢谢。
答案 0 :(得分:30)
我想要$_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)
<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;
}