Подтвердить что ты не робот

PHP получает полное имя сервера, включая номер порта и протокол

В PHP есть надежный и хороший способ получить эти вещи:

Протокол: т.е. http или https Имя сервера: например. локальный Номер порта: например. 8080

Я могу получить имя сервера с помощью $_SERVER['SERVER_NAME'].

Я могу получить протокол, но я не думаю, что он идеален:

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

Я не знаю, как получить номер порта. Номера портов, которые я использую, не 80.. они 8080 и 8888.

Спасибо.

4b9b3361

Ответ 1

Взгляните на документацию.

Вы хотите $_SERVER['SERVER_PORT'] Я думаю.

Ответ 2

$_SERVER['SERVER_PORT'] предоставит вам используемый в настоящее время порт.

Ответ 3

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

Ответ 4

<?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

Ответ 5

 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

Вот что я использую:

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

Ответ 7

Почему бы вам не получить полный url, как этот

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

или (Если вам требуется имя хоста из HTTP)

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

Ответ 8

ничего не было обработано сервером, что-то не так на APACHE, и у меня не было доступа к  сервер, и я закончил перенаправление на http throught Javascript, это не идеальное решение, возможно, это может спасти кого-то еще в моей ситуации.

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