Php 在Zend中的何处使用gethostname

Php 在Zend中的何处使用gethostname,php,zend-framework,session-variables,Php,Zend Framework,Session Variables,目标:我想知道是否有可能在Zend Framework中的一个位置确定主机是本地主机还是我的开发站点的主机,并通过会话变量在站点的其余部分使用该确定 详细信息:我正在与一小群人一起开发一个网站。我们正在使用svn工具合并代码,并在本地主机上进行测试,然后将更改和添加移动到开发服务器上。由于每个平台都使用相同的代码,我们在php中使用gethostname()来确定我们是通过本地主机还是服务器访问我们的站点。我们需要这样做,以便可以适当地设置文件路径(http://localhost/images

目标:我想知道是否有可能在Zend Framework中的一个位置确定主机是本地主机还是我的开发站点的主机,并通过会话变量在站点的其余部分使用该确定

详细信息:我正在与一小群人一起开发一个网站。我们正在使用svn工具合并代码,并在本地主机上进行测试,然后将更改和添加移动到开发服务器上。由于每个平台都使用相同的代码,我们在php中使用
gethostname()
来确定我们是通过本地主机还是服务器访问我们的站点。我们需要这样做,以便可以适当地设置文件路径(
http://localhost/images/dog.jpg
vs
https://mysite.com/images/dog.jpg
)。最初,每次这起作用时,我们都在控制器的
公共函数init()
中设置一个变量$host,该变量包含要在整个页面中使用的适当字符串。然后,我们切换到将$host放入会话变量中,这显著减少了冗余代码的数量。但是我确信有一种方法可以将它设置在一个地方并完成它,但是我不知道这个地方会在哪里(在Zend框架内)。索引登录页无法工作,因为用户可能会从其他位置进入。我的最佳猜测是在布局中设置它,但这给了我错误,因为布局代码在页面加载过程中运行得太晚。有没有更好的地方来确定主人?是否有一种方法可以在布局代码中对其进行优先级排序,以便在页面需要它之前以某种方式执行它

代码:

if(!isset($_SESSION['hostname'])){
  $hostname = gethostname();
  if ($hostname == 'prodserver') { 
    $_SESSION['hostname'] = 'https://mysite.com'; 
  } else { 
    $_SESSION['hostname'] = 'http://localhost'; 
  }
}

我们目前的方法效果很好,但我不能动摇一定有更好的方法的感觉!如果你知道的话,我很想听。谢谢

要回答您评论中的问题,不,会话变量根据定义是特定于用户的。但是,ZF(按惯例)设置常量
APPLICATION_ENV
,可用于执行特定于环境的检查。您还可以通过设置变量(包括baseUrl)。application.ini,如果需要,您将如何解决问题。

首先为什么要将主机名添加到生成的URL?这样我们就可以进行完整路径调用。(这部分不是我的决定。)只需使用绝对路径,即以
/
开头的路径。没有理由在内部链接中包含主机名,这只会增加复杂性。我同意Tim的观点,没有理由在内部URL上使用完整的方案、主机和端口。只需使用
/
/
(对于当前方案)并让系统处理其余部分。不管是谁做的这个决定都非常糟糕。如果您需要确保http页面中出现https,请为必须是https的页面设置https重定向。这很公平。谢谢我会看看我能做些什么来切换到绝对路径,但是,即使解决了这个问题,我们仍然会根据是否在localhost中测试打印一些信息,所以答案仍然是有用的。更重要的是:我真的很好奇。:-)无论用户从哪个页面访问会话变量,会话变量是否可以在一个位置设置并应用于整个站点?具体的应用对我来说并不重要。啊!application.ini是有意义的。非常感谢。