PHP 是否可以从 apache2handler 检索“hostname:port”?

PHP 是否可以从 apache2handler 检索“hostname:port”?

这是边缘编程,但我先在这里发帖。

PHP 信息的输出

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 

我正在尝试找到一种方法让 PHP 检索该区域中的“Hostname:port”字段。

我们有 apache,它将所有虚拟主机信息转储到一个文件中,然后将该单个文件分解为多个文件,并将相关信息(总点击次数等)记录到数据库中。我们目前遇到的一个问题是,如果域名来自 ServerAlias,我们的 php 软件无法找到包含其日志的数据库表(因为该域名在技术上不正确)。但是,php / phpinfo(); 中的“Hostname:port”字段始终会检索我想要的信息,即主域名。

如果有任何其他方法可以让 PHP 从 apache 获取“ServerName”字段而我不知道,请告诉我,因为这样会容易得多。


另一种方法是在每个虚拟主机中都有一个 SetEnv 命令,但不必逐一添加

SetEnv primarydomain localdomain.com

对于每个 VirtualHost,有没有办法使用变量?

例如:

SetEnv primarydomain %v

谢谢!!

- - - - - - - - - - -更新 - - - - - - - - - - - - - -

我们通过正则表达式搜索和替换解决了该问题。

搜索:^ServerName\s\b((?=[a-z0-9-]{1,63}.)[a-z0-9]+(-[a-z0-9]+)*.)+([az]{2,63})\b

替换:$&\nSetEnv\tprimarydomain\t$1$3

答案1

对于真实服务器名称(来自操作系统,而不是虚拟服务器):

echo php_uname('n');

对于端口:

echo $_SERVER["SERVER_PORT"];

答案2

如果标准的 $_SERVER['SERVER_NAME'] 不是您想要的,您是否尝试过 $_SERVER['SERVER_SIGNATURE']?

http://uk.php.net/manual/en/reserved.variables.server.php

答案3

您是否在虚拟主机中设置了 ServerAdmin 指令?

如果是这样,我会使用$_SERVER['SERVER_ADMIN'],并取 @ 符号后的电子邮件地址的后半部分。

例子:

array_pop(split("@", $_SERVER['SERVER_ADMIN'], 2))'

答案4

如果您对客户端提供的主机名不感兴趣,那么您可能希望使用以下指令:

使用规范名称使用规范物理端口

相关内容