这是边界编程,但我先在这里发布。
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 找到一种方法来检索该区域中的“主机名:端口”字段。
我们有 apache 将我们所有的虚拟主机信息转储到一个文件中,然后将该单个文件分解为多个文件,并将相关信息(总命中数等)记录到数据库中。我们目前遇到的问题之一是,如果域进入 ServerAlias,我们的 php 软件无法找到包含其日志的数据库表(因为域在技术上不正确。)但是,“主机名:端口” php / phpinfo() 中的字段;始终检索我想要的信息,即主域名。
如果有任何其他方法 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
如果标准的 $_SERVER['SERVER_NAME'] 不是您所追求的,您是否尝试过 $_SERVER['SERVER_SIGNATURE']?
http://uk.php.net/manual/en/reserved.variables.server.php
您是否在虚拟主机中设置了 ServerAdmin 指令?
如果是这样,我会使用
$_SERVER['SERVER_ADMIN']
, 并在 @ 符号之后使用电子邮件地址的后半部分。例子:
用正则表达式解决了问题。
搜索:^ServerName\s\b((?=[a-z0-9-]{1,63}.)[a-z0-9]+(-[a-z0-9]+)*.)+ ([az]{2,63})\b
替换:$&\nSetEnv\tprimarydomain\t$1$3
如果您对客户端提供的主机名不感兴趣,那么您可能希望使用以下指令:
UseCanonicalName和UseCanonicalPhysicalPort。
对于真实的服务器名称(来自操作系统,而不是虚拟服务器):
对于端口: