Problema resolvido com um regexp.
Pesquisa: ^ NomeServidor \ s \ b ((? = [a-z0-9 -] {1,63}.) [a-z0-9] + (- [a-z0-9] +) * .) + ([az] {2,63}) \ b
Substituir: $ & $ \ SetConv \ tprimariodominio \ t $ 1 $ 3
Esta é uma programação limítrofe, mas estou postando aqui primeiro.
saída do PHPinfo
apache2handler
Apache Version Apache/2.2.3 (CentOS)
Apache API Version 20051115
Server Administrator root@localhost
Hostname:Port localdomain.com:0
User/Group apacheuser(500)/500
Estou tentando encontrar uma maneira de o PHP recuperar o campo "Nome do host: porta" nessa área.
Temos o apache despejando todas as informações do nosso host virtual em um único arquivo, e então esse único arquivo é dividido em vários arquivos & informações relevantes (total de ocorrências, ect) são registradas em um banco de dados. Um dos problemas que estamos enfrentando no momento é que, se um domínio entrar em um ServerAlias, nosso software php não conseguirá encontrar a tabela do banco de dados contendo seus logs (porque o domínio tecnicamente não está correto). Nome do host: porta "campo em php / phpinfo (); Sempre recupera as informações que eu quero, que é o nome de domínio principal.
Se houver qualquer outro método, o PHP pode obter o campo "ServerName" do apache que eu não conheço, por favor me avise, pois isso seria muito mais fácil.
Uma abordagem alternativa é ter um comando SetEnv em cada host virtual, no entanto, em vez de ter que passar por e adicionar um
SetEnv primarydomain localdomain.com
para cada VirtualHost, existe uma maneira de usar uma variável?
No exemplo:
SetEnv primarydomain %v
Obrigado !!
--------------------- update ------------------------- -
Resolvemos o problema com uma pesquisa de expressão regular & substituir.
Pesquisa: ^ NomeServidor \ s \ b ((? = [a-z0-9 -] {1,63}.) [a-z0-9] + (- [a-z0-9] +) * .) + ([az] {2,63}) \ b
Substituir: $ & $ \ SetConv \ tprimariodominio \ t $ 1 $ 3
Se o padrão $ _SERVER ['SERVER_NAME'] não é o que você está procurando, você já tentou $ _SERVER ['SERVER_SIGNATURE']?
Você define a diretiva ServerAdmin no host virtual?
Se sim, usaria $_SERVER['SERVER_ADMIN']
e pegaria a última parte do endereço de e-mail após o símbolo @.
Exemplo:
array_pop(split("@", $_SERVER['SERVER_ADMIN'], 2))'
Se você não estiver interessado nos nomes de host fornecidos pelo cliente, talvez queira usar as diretivas:
Para o nome real do servidor (do sistema operacional, não do servidor virtual):
echo php_uname('n');
Para a porta:
echo $_SERVER["SERVER_PORT"];
Tags php apache-2.2