我想在$_SERVER["SERVER_NAME"]
中检测一个字符串数组,为dev / prod等环境定义一个常量。
基本上,如果网址中包含localhost
或.dev
,则会将常量设置为“prod”。
这是我的尝试但我总是得到"prod"
即使我当前的网址是“localhost:3000”或“site.dev”:
// Define environment
$dev_urls = array(".dev", "localhost");
if (str_ireplace($dev_urls, "", $_SERVER["SERVER_NAME"]) == $_SERVER["SERVER_NAME"]){
define("ENV", "dev");
} else {
define("ENV", "prod");
}
最后使用了这个像魅力
的代码// Define environment
$dev_urls = array(".dev", "localhost", "beta.");
if (str_ireplace($dev_urls, "", $_SERVER["HTTP_HOST"]) != $_SERVER["HTTP_HOST"]){
define("ENV", "dev");
} else {
define("ENV", "prod");
}
答案 0 :(得分:3)
SERVER_NAME
在服务器配置中定义,无论您使用哪个网址访问该网页,它都不会更改。
我相信你想改用HTTP_HOST
。
if ($_SERVER['HTTP_HOST'] == 'localhost' || substr($_SERVER['HTTP_HOST'], -4) == '.dev')
define('ENV', 'dev');
else
define('ENV', 'prod');
答案 1 :(得分:0)
您可以使用array_filter()
和anonymous function来完成您要找的工作。
$dev_urls = [".dev", "localhost"];
$host = $_SERVER["HTTP_HOST"];
$result = array_filter($dev_urls, function($e) use ($host) {
return strpos($host, $e) !== false;
});
if ($result) {
//development URL
} else {
//production URL
}
但是,这是一个子字符串搜索,可能不准确。我建议改为完全匹配。
$dev_urls = ["foo.dev", "localhost"];
$host = $_SERVER["HTTP_HOST"];
$result = array_filter($dev_urls, function($e) use ($host) {
return $host === $e;
});
if ($result) {
//development URL
} else {
//production URL
}