这是边缘编程,但我先在这里发帖。
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']?
答案3
您是否在虚拟主机中设置了 ServerAdmin 指令?
如果是这样,我会使用$_SERVER['SERVER_ADMIN']
,并取 @ 符号后的电子邮件地址的后半部分。
例子:
array_pop(split("@", $_SERVER['SERVER_ADMIN'], 2))'