我正在努力提高自己的技能。由于各种原因(包括数据库连接,调试输出等),我需要确定我的站点是在本地运行(XAMPP)还是远程运行。目前我这样做...... 确实有效:
$root = $_SERVER["DOCUMENT_ROOT"];
$baseurl = $_SERVER["SERVER_NAME"];
$parts = explode("/",$root);
$base = $parts[0];
if($base == "C:") {
if(!defined('LOCAL')){
define('LOCAL', true);
} else {
if(!defined('LOCAL')){
define('LOCAL', false);
};
...但我不禁觉得有一个更优雅的解决方案来检测本地与远程?
请记住,本地域永远不会只是“localhost” - 我有数百个本地站点都在XAMPP的虚拟主机中使用自己的域映射。
非常感谢你的建议。
答案 0 :(得分:2)
如果部署到远程Windows服务器,不禁会觉得您当前的解决方案会中断。这绝对不是一个好习惯。 Laravel特别使用dotenv来解决这个问题,方法是在每台服务器上部署一个环境配置文件,并定义将要使用的基本常量。
例如,您可以在当地使用.env
:
APPLICATION_ENVIRONMENT=local
远程
APPLICATION_ENVIRONMENT=notlocal
然后你可以在启动时做:
$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();
然后您可以使用getenv获取值:
if(!defined('LOCAL')){
define('LOCAL', getenv("APPLICATION_ENVIRONMENT") == "local");
};
答案 1 :(得分:2)
在flat-PHP中,我会使用$_SERVER['SERVER_ADDR']
。使用XAMPP时,默认情况下,$_SERVER['SERVER_ADDR']
为::1
。
如果您在运行XAMPP的同一台计算机上进行编码,您还可以比较$_SERVER['SERVER_ADDR']
和$_SERVER['REMOTE_ADDR']
。