在Zend中使用gethostname的位置

时间:2013-03-04 17:36:07

标签: php zend-framework session-variables

目标:我想知道是否可以在Zend Framework中确定主机是localhost还是我的开发站点的主机一个地方并使用该确定通过会话变量在网站的其余部分。

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

代码:

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

我们目前的方法运作得很好,但我无法摆脱必须有更好方法的感觉!如果你知道的话 - 我很乐意听到它。谢谢!

1 个答案:

答案 0 :(得分:2)

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