2012-11-21 172 views
2

好吧。我在SO中閱讀了一些主題,但沒有找到具體的答案。檢查PHP是否在本地服務器上運行

如果PHP代碼在本地或遠程主機上運行,​​我需要檢查PHP。目前我與$_SERVER['SERVER_NAME']檢查,但它不一致。在這種情況下,如果我使用列出的IP(如127.0.0.1localhost)運行PHP,它會考慮使用本地,否則會遠程訪問。如果我與朋友分享我的IP,我的代碼仍然是本地的,但它認爲是遠程的,因爲共享IP未列出。

嗯,我認爲檢查本地主機的IP不是一個好主意(除非你知道一個好的方法)。我嘗試了像gethostbyaddr()gethostbyname()這樣的方法,但是也無法正常工作。

我沒有一個PHP代碼來顯示,但我的代碼基本上是:

// true = localhost 
return $_SERVER['SERVER_NAME'] === '127.0.0.1'; 

的基本問題是:什麼可以確定PHP運行本地?什麼是PHP的「本地」?我認爲它可以解決問題。

Obs .:我無法訪問PHP的CMD/Shell。

+1

這個問題沒有意義。從PHP的角度來看,它始終在本地服務器上運行。 – NullUserException

+1

什麼是你的「本地」? – zerkms

+1

對於perl,我在本地機器上的文件系統中添加了一個local.txt文件,並檢查它是否存在。 – user4035

回答

1

檢查$_SERVER['REMOTE_ADDR']=='127.0.0.1'。這隻會在本地運行時才成立。請注意,這也意味着服務器本地。因此,如果您在服務器上運行了任何向您的PHP頁面發出請求的腳本,它們也將滿足這種情況。

如果有人通過網站訪問您的站點,則無論代理服務器的使用情況如何,您看到的IP地址將永遠不會是127.0.0.1(或IPV6的1 ::)。 (除非你自己在同一臺服務器上運行代理;)

+2

「只有在本地運行時,纔會發生這種情況」---您想說「如果請求來自同一臺計算機」 – zerkms

+0

請求可能很遠,但PHP * always *本地運行。 – NullUserException

+0

如果你在virtualbox或者vmware下運行,他們會爲你分配一個不同的IP地址 - 這是一箇舊的帖子,但是對於谷歌搜索仍然相關 - 'php detect如果本地運行或者在本地服務器上運行'/ –

1

據我所知,只有將能夠知道什麼地址是本地或不是。你的網絡可以設置IP地址,根本看不到本地IP地址。 PHP不能據我所知確定它本身。

1

這是我如何做到這一點,我覺得這不是試圖以檢測127.0.0.1更可靠:

if(strpos(gethostname(), '.local') !== false) { } 

基本上,主機名在我的工作站都已經.local追加到它。您可以將其更改爲完全匹配工作站的主機名。

3

你可以做什麼最PHP框架做,在你的應用程序的引導階段定義代碼在運行的環境設置一個標誌,在它最簡單的形式:

// the setting when run on a dev machine 
define('ENV', 'local'); 

然後它是一個簡單的例子:

if (ENV == 'local') 
{ 
    // do stuff 
} 
相關問題