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

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

Протокол: http или https Имя сервера: например, localhost Номер порта: например, 8080

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

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

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

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

Спасибо.

Посмотрите документацию .

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

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

 $protocol = isset($_SERVER['HTTPS']) && (strcasecmp('off', $_SERVER['HTTPS']) !== 0); $hostname = $_SERVER['SERVER_ADDR']; $port = $_SERVER['SERVER_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"; } ?> 

Это отображает все номера портов.

Если вы уже знаете номер порта, вы можете сделать это,

 echo getservbyport(3306, "http"); // 80 
  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; 

Попробуйте что-нибудь подобное, если хотите

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

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

Почему бы вам не получить полный URL-адрес

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

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

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