2012-02-12 49 views
1

我想知道如何檢測用戶是否在本地主機上。php檢測文檔索引是否是本地主機

我這樣做的理由是,我可以自動在生產服務器上運行生產代碼,但在我的機器上無壓縮代碼,而無需一直改變鏈接。

我知道我能做到這一點的JS像這樣... 如果(document.URL.indexOf( 「本地主機:8888」)< = 0){

但我需要做在PHP的我的WordPress安裝。我已經遇到此類似的問題 - How can I detect if the user is on localhost in PHP?

所以,我想這(下同),但它無法加載任何

<?php if(IPAddress::In(array("127.0.0.1","::1"))) { ?> 
     <script src="<?php bloginfo('template_url'); ?>/js/scripts.js"></script> 
<?php } ?> 

我也試着在這裏建議的解決方案,但同樣,沒有按't爲我工作How can I detect if the user is on localhost in PHP?

如果這些細節有幫助,我使用Mac上的MAMP和WordPress安裝。

回答

9

使用$ _ SERVER全局變量:http://www.php.net/manual/en/reserved.variables.server.php

if (in_array($_SERVER['REMOTE_ADDR'], array('127.0.0.1', '::1'))) { 
    // code for localhost here 
} 

編輯:關於TerryE的評論,你可能想要做這樣的事情(或者看到他的正則表達式的答案,雖然可能不需要它):

if (substr($_SERVER['REMOTE_ADDR'], 0, 4) == '127.' 
     || $_SERVER['REMOTE_ADDR'] == '::1') { 
    // code for localhost here 
} 

因爲本地主機可以是127.0.0.0/8中的任何東西,儘管127.0.0.1是最常見的。 http://en.wikipedia.org/wiki/Localhost

雖然我原來的答覆可能會被罰款(它是什麼的Symfony2默認使用的「保護」意外生產使用app_dev.php)

+0

大,的作品感謝馬特B類比賽將確定。最後,你知道在加載之前檢查地址是否有任何性能影響,請加載腳本? – SparrwHawk 2012-02-12 23:49:39

+0

我會說這很無足輕重。如果有的話,'in_array'對於大數組可能會很慢,但是2個元素不應該很慢。基本上,你正在做兩個字符串比較,所以這不應該減慢你的速度。如果這對性能至關重要,那麼無論如何您應該爲您的開發機器使用不同的引導程序/前端控制器。 – Matt 2012-02-13 03:35:04

+0

實際上,127.0.0.1/8表示前8位是固定的。所以它不僅僅是127.0.0.X,甚至127.X.Y.Z,儘管127.0.0.1是迄今爲止最常見的地址。 – Arjan 2012-02-13 06:17:05

0

使用preg_match('!127\.0\.\d+\.\d+!', $_SERVER["REMOTE_ADDR"])。因爲有時談到在127.0.1.1等。

+0

馬特也是正確的:你應該檢查IPv6回送以及:'!(127 \ .0 \。\ d + \。。\ d + | :: 1)!'' – TerryE 2012-02-12 23:39:29

+0

你真的需要正則表達式嗎?爲什麼localhost永遠是127.0.1.1?我想我只是非常確定localhost始終是127.0.0.1。 – Matt 2012-02-12 23:42:41

+0

請參閱[WP:localhost](http://en.wikipedia.org/wiki/Localhost),您明顯地在您的PC /筆記本電腦上運行WinXXXX。世界上很多運行Linux,IOS,... :-) – TerryE 2012-02-13 00:46:10

0

馬特的答案類似,你可以使用服務器變種

if(!(strpos($_SERVER['SERVER_NAME'], 'localhost') === false)){ 
    //on localhost 
} 
+0

SERVER_NAME並不總是可用。 – 2012-02-13 11:32:55