Php 如何在$u SERVER[“SERVER”u NAME“中检测多个字符串?
我想在Php 如何在$u SERVER[“SERVER”u NAME“中检测多个字符串?,php,superglobals,Php,Superglobals,我想在$\u SERVER[“SERVER\u NAME”]中检测字符串数组,以便为dev/prod之类的环境定义一个常量。 基本上,如果URL中有localhost或.dev,则会将常量设置为“prod” 这是我的一次尝试,但即使我当前的url是“localhost:3000”或“site.dev”,我也总是会得到“prod”: 最后使用了这个代码,它就像一个符咒 // Define environment $dev_urls = array(".dev", "localhost", "be
$\u SERVER[“SERVER\u NAME”]
中检测字符串数组,以便为dev/prod之类的环境定义一个常量。基本上,如果URL中有
localhost
或.dev
,则会将常量设置为“prod”
这是我的一次尝试,但即使我当前的url是“localhost:3000”或“site.dev”,我也总是会得到“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");
}
SERVER\u NAME
是在服务器配置中定义的,无论您使用什么URL访问该页面,它都不会更改
我相信您希望使用HTTP\u主机
if ($_SERVER['HTTP_HOST'] == 'localhost' || substr($_SERVER['HTTP_HOST'], -4) == '.dev')
define('ENV', 'dev');
else
define('ENV', 'prod');
你可以使用和来做你想做的事情
$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
}
同意,但它似乎无法解决问题,总是得到“prod”。@flks,因为你的hacky
if
语句没有意义。只需检查if($\u SERVER['HTTP\u HOST']=='localhost')
即可确定您是否在开发环境中。事实上,我可以以localhost:3000或site.devYep的身份访问开发URL。它可以工作!但挑战在于使用数组轻松地读取和更改它。问题是如何在这个$\u服务器['HTTP\u HOST']
?(stristr($\u服务器['HTTP\u HOST'],['localhost'],'.dev'])!==false)
如果字符串中存在这些单词,那么它是真的。我从未收到任何关于我留下的答案的反馈;它解决了你的问题吗?如果有,将其标记为已接受将不胜感激;谢谢
$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
}