【发布时间】:2011-06-15 00:20:43
【问题描述】:
我有调用不同 URL 的脚本,具体取决于它们是由我的在线站点(发布)还是我的离线本地主机(开发)处理的。我想找到一种快速的方法来找出哪个是哪个。
我可以想出一些笨拙的方法来做到这一点,但是有没有一种确定的、快速的、优雅的方法?类似if(is_offline()) { ... }
【问题讨论】:
标签: php localhost development-environment production-environment
我有调用不同 URL 的脚本,具体取决于它们是由我的在线站点(发布)还是我的离线本地主机(开发)处理的。我想找到一种快速的方法来找出哪个是哪个。
我可以想出一些笨拙的方法来做到这一点,但是有没有一种确定的、快速的、优雅的方法?类似if(is_offline()) { ... }
【问题讨论】:
标签: php localhost development-environment production-environment
您可以查看$_SERVER['HTTP_HOST'] 以查看脚本在哪个主机名下运行。
你可以查看$_SERVER['REMOTE_ADDR'],看看请求页面的IP是不是127.0.0.1的用户。
您可以 ping 本地网络上的某些内容以查看您是否已连接到它。
您可以在代码开头定义一个常量,在相应的机器上设置为“发布”或“开发”。
【讨论】:
【讨论】:
最好的方法是在某处设置一个配置变量,指示production 或development。
您可以通过主机名(localhost 与 www.foobar.com)来实现,但这是一个不稳定的解决方案。您也可以使用不同的主机名访问您的应用程序以进行测试。因此,显式优于隐式。
【讨论】:
在 IIS 服务器上有一个名为 $_SERVER["COMPUTERNAME"] 的变量,您可以使用它来确定脚本是在您的开发服务器还是生产服务器上运行(MYMACHINE 与 WWW37).
您也可以使用$_SERVER["HTTP_HOST"] 变量(localhost 与 www.domain.com)。
您也可以在您的开发服务器上创建一个空文本文件(注意不要上传它)并使用is_file() 检查它是否存在 (is_file(".foo") == true 与 false)。
如果两台服务器上的操作系统不同(WINNT 与 Linux),您可以检查 PHP_OS。
您可以检查 __FILE__ 常量内是否存在特定路径(C:/inetpub/wwwroot/website/ 与 /home/www37/ em>)。
3 的变体:@include("override_server_with_local_config.php");
【讨论】:
进行几次检查就可以实现
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'
));
【讨论】: