2013-03-04 24 views
0

目的:我想知道是否有可能以確定主機是否是本地主機或我的開發網站在一個地方 Zend Framework中的主機和使用整個其餘的是決心該網站通過會話變量。在哪裏使用gethostname在Zend的

詳情:我正在與一小羣人一起在網站上工作。我們使用svn工具來合併我們的代碼,並在將更改和附加內容移至開發服務器之前在本地主機上進行測試。由於在每個平臺中都使用相同的代碼,我們在php中使用gethostname()來確定我們是通過本地主機還是服務器訪問我們的網站。我們需要這個,所以我們可以適當地設置文件路徑(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

爲什麼要首先將主機名添加到生成的URL? – prodigitalson 2013-03-04 17:37:58

+0

所以我們可以做完整路徑調用。 (這部分不是我的決定。) – lostphilosopher 2013-03-04 17:50:35

+2

只需使用絕對路徑,即以'/'開頭的路徑。沒有理由在內部鏈接上包含主機名,這隻會增加複雜性。 – 2013-03-04 18:03:50

回答

2

要回答評論中的問題,no,會話變量按照用戶特定的定義進行定義。然而,ZF(按照慣例)設置常數APPLICATION_ENV,其可用於執行特定於環境的檢查。你也可以通過設置變量(包括baseUrl)。 application.ini這將是你將如何解決你的問題,如果你需要的話。

+0

啊! application.ini是有道理的。謝謝。 – lostphilosopher 2013-03-04 19:30:12