确定当前脚本是在运行服务器还是生产服务器上运行

时间:2011-01-25 06:55:48

标签: php localhost development-environment production-environment

我有脚本调用不同的URL,具体取决于它们是否由我的在线站点(发布)或我的离线本地主机(开发)处理。我想找到一个快速的方法来找到哪个。

我可以提出一些笨重的方法来做到这一点,但是有一种明确,快速,优雅的方法吗?像if(is_offline()) { ... }

这样的东西

5 个答案:

答案 0 :(得分:7)

  1. IIS服务器上提供了一个名为$_SERVER["COMPUTERNAME"]的变量,您可以使用它来确定脚本是否在您的开发服务器或生产服务器上运行( MYMACHINE vs. < EM> WWW37 )。

  2. 您还可以使用$_SERVER["HTTP_HOST"]变量( localhost www.domain.com )。

  3. 您还可以在开发服务器上创建一个空文本文件(注意不要上传它),并使用is_file()检查它是否存在(is_file(“。foo”)== true vs. false )。

  4. 如果两台服务器上的操作系统不同( WINNT Linux ),则可以检查PHP_OS。

  5. 您可以检查__FILE__常量中是否存在某个路径( C:/ inetpub / wwwroot / website / / home / www37 / )。

  6. 3的变体:@include("override_server_with_local_config.php");

答案 1 :(得分:3)

您可以查看$_SERVER['HTTP_HOST']以查看脚本运行的主机名。

您可以查看$_SERVER['REMOTE_ADDR']以查看请求该网页IP的用户是否为127.0.0.1。

您可以ping本地网络上的某些内容,看看您是否已连接到它。

您可以在代码的开头定义一个常量,在相应的机器上设置为“release”或“development”。

答案 2 :(得分:3)

最好的方法是在指示productiondevelopment的位置设置配置变量。

您可以通过主机名(localhost vs www.foobar.com)来完成,但这是一个难以理解的解决方案。您也可以使用不同的主机名访问您的应用程序以进行测试。因此,显性优于隐式。

答案 3 :(得分:0)

一些检查可以使其成为可能

define('IS_LOCAL', !(
  in_array($_SERVER['HTTP_HOST'], array('localhost','127.0.0.1')) === false &&
  $_SERVER['REMOTE_ADDR'] !== '127.0.0.1' &&
  $_SERVER['REMOTE_ADDR'] !== '::1'
));

答案 4 :(得分:-1)

一个功能可以帮助get_headers('URL')

get_headers

Tt获取服务器发送的所有标头。检查返回的数组以检查URL的状态。返回数组的第一个元素包含URL状态。